JAVA代码优化

1、优先使用基本类而不是包装类

JAVA代码优化

2.返回零长度的数组集合而不是返回null

JAVA代码优化

3.将局部变量作用域最小化

优化前

JAVA代码优化


优化后:

JAVA代码优化

4.如果需要精确的答案避免使用float和double

JAVA代码优化

5.接口优先于反射机制
 

JAVA代码优化

6.集合对象初始容量的重要性

以ArrayList和HashMap举例:

ArrayList 是一个数组的实现,与数组的区别是大小不固定,用Object[] elementData来保存

初始容量为10,超过设定的容量就会出现elementData = Arrays.copyOf(elementData, newCapacity);

并把容量扩展为原来容量的1.5倍

HashMap以Entry[]数组实现的哈希桶数组,用Key的哈希值取模桶数组的大小可得到数组下标。

插入元素时如果存在hash冲突则会equals比较.hashMap默认大小为16,当超过默认大小时容量会创建新的Entry[]容量为原来的2倍,在循环将老的Entry[]保存进新的Entry[]。

所以设置初始容量可以避免数组之间的拷贝提高性能。

Map map = new HashMap(100); //设置容量举例List list = new ArrayList(100); //设置容量举例

7.关于Integer的比较

Integer i1 = 100;Integer i2 = 100;System.out.println(i1==i2); trueInteger i3 = 200;Integer i4 = 200;System.out.println(i3==i4); false

原因:Integer里面默认会将-128到127缓存进IntegerCache里面的cache数组里面,当声明Integer=100时会循环比较这个cache数组,存在的话则直接返回数组里面的Integer引用。(想了解原理的朋友,后期我将会出一个对此详细的介绍)

8.涉及到第三方的网络请求不要放在事务里面

想一下这张场景,第三方网络请求迟迟没有响应,而此时你的事务里面又会导致对数据进行加锁,如果第三方超时为5s也就是说你的数据会被锁定5s,而这5s内所有的请求都不能处理这条被锁的数据(因为这个事务尚未提交)线上环境的话对此影响相当大,有可能导致数据不一致,重复数据等等异常,而这类异常通常不好排查。

转载于:https://my.oschina.net/chengzz/blog/1593803