文章目录
- 前言
- 代码优化细节
-
- 1、尽量指定类、方法的final修饰符
- 2、尽量重用对象
- 3、尽可能使用局部变量
- 4、及时关闭流
- 5、尽量减少对变量的重复计算
- 6、尽量采用懒加载的策略,即在需要的时候才创建
- 7、慎用异常
- 8、不要在循环中使用try…catch…,应该把其放在最外层
- 9、如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度
- 10、当复制大量数据时,使用System.arraycopy()命令
- 11、乘法和除法使用移位操作
- 12、循环内不要不断创建对象引用
- 13、基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList
- 14、尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销
- 15、不要将数组声明为public static final
- 16、尽量在合适的场合使用单例
- 17、尽量避免随意使用静态变量
- 18、及时清除不再需要的会话
- 19、实现RandomAccess接口的集合比如ArrayList,应当使用最普通的for循环而不是foreach循环来遍历
- 20、使用同步代码块替代同步方法
- 21、将常量声明为static final,并以大写命名
- 22、不要创建一些不使用的对象,不要导入一些不使用的类
- 23、程序运行过程中避免使用反射
- 24、使用数据库连接池和线程池
- 25、使用带缓冲的输入输出流进行IO操作
- 26、顺序插入和随机访问比较多的场景使用ArrayList,元素删除和中间插入比较多的场景使用LinkedList这个,理解ArrayList和LinkedList的原理就知道了
- 27、不要让public方法中有太多的形参
- 28、字符串变量和字符串常量equals的时候将字符串常量写在前面
- 29、请知道,在java中if (i == 1)和if (1 == i)是没有区别的,但从阅读习惯上讲,建议使用前者
- 30、不要对数组使用toString()方法
- 31、不要对超出范围的基本数据类型做向下强制转型
- 32、公用的集合类中不使用的数据一定要及时remove掉
- 33、把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+””最慢
- 34、使用最有效率的方式去遍历Map
- 35、对资源的close()建议分开操作
前言
代码优化的目标是
- 减小代码的体积
- 提高代码运行的效率
代码优化细节
1、尽量指定类、方法的final修饰符
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50% 。
2、尽量重用对象
特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。
3、尽可能使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在