• JAVA--养成好的编程习惯


    原文地址:http://user.qzone.qq.com/1159340782/2

    略微牺牲一些性能,换来更好的可读性和可维护性是好的选择。以下不提倡和提倡的写法仅供参考。

    代码中不提倡的写法

    序号

    不提倡的写法

    原因

    1

    尽量避免随意使用静态变量

    静态变量和类同步,类不卸载,对象将常驻内存,直到程序终止

    2

    尽量避免过多过常的创建java对象

    花费时间去创建对象,回收对象也是一种开销,尽量复用对象,用基本数据类型或数组代替对象。

    3

    尽量避免使用finalize方法

    导致GC负担更大,程序效率更差

    4

    尽量避免变量的重复计算

    如遍历数组的长度,一次计算即可

    5

    尽量避免不必要的创建

    程序逻辑控制对象的创建

    6

    尽量避免使用二维数组

    二维数组占用空间比一维数组多得多,大概10倍

    7

    尽量避免使用split

    Split由于支持正则表达式,效率低,消耗大量资源,建议使用apache下的StringUtils.split频繁split缓存结果

    8

    尽量避免非常大的内存分配

    内存连续,浪费资源

    9

    慎用异常

    创建异常开销大,好在try-catch开销不大

    10

    尽量减少IO操作

    IO消耗系统资源,尽量使用缓存

    11

    尽量避免不需要的instanceof操作

    always true

    12

    尽量避免不需要的造型操作

    --

    13

    对于boolean避免不必要的等式

    Flag == true

    代码中提倡的写法

    序号

    提倡的写法

    原因

    1

    尽量在合适的场合使用单例

    减轻加载的负担,缩短加载的时间,提高加载的效率

    2

    尽量使用final修饰符

    寻找内联所有final方法,性能提高50%

    3

    尽量使用局部变量

    实例变量和静态变量等都在堆中建立,速度慢,局部变量放在栈中,速度快

    4

    处理好包装类型和基本类型使用场景

    包装类型属于对象在堆中创建,基本类型在栈中创建,有对象方面需要处理适用包装类型,其他提倡基本类型

    5

    慎用synchronized尽量减小synchronized方法

    实现同步系统开销大,容易死锁。尽量适用方法同步代替代码块同步

    6

    尽量使用StringBuffer和StringBuilder进行字符串的拼接

    尽量初始化StringBuffer和StringBuilder的长度,字符数组动态添加字符串

    7

    尽量用基本数据类型代替对象

    如String str = “hello” String str = new String(“hello”); 后者还创建了一个字符数组

    8

    单线程尽量使用HashMap ArrayList

    HashTable Vector等使用了同步机制,降低了性能

    9

    尽量合理的使用HashMap

    多使用HashMap的构造方法,初始化它的大小,扩容是一件很耗费性能的事情

    10

    尽量在finally块中释放资源

    避免资源泄漏

    11

    尽量使用位运算取代a/b,a*b操作

    /是一个代价很高的操作

    12

    尽量早释放无用的对象

    Obj =null

    13

    合理使用arrayList和linkedList

    一个是线性表(查询),一个是链表(添加和删除),

    14

    尽量使用System.arraycope复制数组

    比循环复制数组要快得多

    15

    尽量缓存经常使用的对象

    HashMap,WeekHashMap或者第三方的工具EhCache OsCache Memcached

    16

    大对象尽量用clone()不用new

    new创建对象成本大

    17

    尽可能地使用java自身提供的api

    不解释

    18

    使用快速度的jdbc驱动

    数据库连接池

    19

    缓存DataSorce

    为了再次的JNDI调用,可以系统中缓存要使用的DataSorce

    20

    让访问实例内变量的setget方法变成final

    可变成inlined

    21

    charat代替startswith

    --

    22

    如果只有一个字符的’’代替””

    --

    23

    常量字符串,用String代替StringBuffer

    减小运行开销提高性能

    24

    Stringtokenizer代替indexof substring

    Stringtokenizer分析字符串更容易,效率也会高一些

    25

    使用三目运算代替if-return else

    --

  • 相关阅读:
    我的ORM之八-- 事件
    JavaScript(四):函数
    JavaScript(三):数据类型转换
    CSS(九):设置盒子水平垂直居中
    CSS(八):定位属性
    CSS(三):引入样式和优先级
    Dapper:安装Dapper时报错
    HTML(四):行级标签和块级标签
    解决Linux里面未启用网卡的问题
    linq操作符:分区操作符
  • 原文地址:https://www.cnblogs.com/strive-for-freedom/p/4231341.html
Copyright © 2020-2023  润新知