4.、编码时的一些建议

1、尽量指定类、方法的final修饰符——虚拟机会想办法内联所有的final方法来减少方法执行时创建栈帧的数量,从而降低栈溢出的风险

2、尽量重用对象——重复new对象会增加内存溢出的风险

3、尽可能使用局部变量—— 一些局部变量是在栈中,免了垃圾回收过程

4、及时关闭流——资源浪费问题

5、尽量减少对变量的重复计算——list.size()在循环中的处理,如果list很多计算多次很耗性能

6、尽量采用懒加载的策略——即在需要的时候才创建,还是创建对象问题,比如在if块外创建了对象

7、慎用异常——异常只能用于错误处理,不应该用来控制程序流程。因为异常有自己的异常对象,会占用堆空间

8、不要在循环中使用try…catch…,应该把其放在最外层——因为异常有自己的异常对象,会占用堆空间

9、如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度,new HashMap(256),StringBuilder(int size)——因为集合的容量是随着元素的增多成本的扩容的

10、当复制大量数据时,使用System.arraycopy()命令,采用native

11、乘法和除法使用移位操作,乘法:<<,除法:>>——因为位运算是更接近计算机底层原理的,性能更高

12、循环内不要不断创建对象引用,Object obj = null; for (int i = 0; i <= count; i++) { obj = new Object(); }——因为对象是占用堆空间的,在循环里面new对象,容易导致内存溢出

13、基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList——因为集合的容量是随着元素的增多成本的扩容的

14、尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer——后三者由于使用同步机制而导致了性能开销

15、不要将数组声明为public static final——public不安全,而final没有用

16、尽量在合适的场合使用单例——节省加载开销

17、尽量避免随意使用静态变量——gc通常是不会回收, public class A{ private static B b = new B(); },B会在A清除后才清除

18、及时清除不再需要的会话——HttpSession的invalidate()方法清除会话。

19、实现RandomAccess接口的集合比如ArrayList,应当使用最普通的for循环而不是foreach循环来遍历——假如是随机访问的,使用普通for循环效率将高于使用foreach循环;反过来,如果是顺序访问的,则使用Iterator会效率更高

20、使用同步代码块替代同步方法

21、将常量声明为static final,并以大写命名——程序启动的时候会主动加载到常量池

22、不要创建一些不使用的对象,不要导入一些不使用的类——not use的警告,可以清除

23、程序运行过程中避免使用反射——尽量在启动时就反射完成,大家不关心启动花了多长时间

24、使用数据库连接池和线程池——这个都有了,可以使用的连接池:c3p0,dbcp…

25、使用带缓冲的输入输出流进行IO操作——即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,提升IO效率

26、顺序插入和随机访问比较多的场景使用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——iterator接口

35、对资源的close()建议分开操作——分开关闭不同的资源,避免未释放,如程序出现异常会导致后面的资源未释放,所以最好把资源释放放在finally中保证一定会被释放

36、JDK7中新引入的Objects工具类,对象比较

37、避免使用正则表达式,使用Apache Commons Lang作为代替

38、远离递归.递归会占用大量资源!

39、避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed 导致的性能下降,JDK7之后,可以使用ThreadLocalRandom来获取随机数

40、静态类、单例类、工厂类将它们的构造函数置为private

41、提前编译正则表达式

42、尽可能地缓存

02-21 07:20