java性能优化总结

1.判断元素是否在集合中,可以使用HashSet、HashMap代替List

因为List比较集合中的所有元素,才能查找到具体的值,HashMap、HashSet分桶存储,通过查找key的hash值可以快速找到其所在的桶,接近线性的时间复杂度

2.字符串连接操作

大量字符串连接,使用append连接,不建议使用+,每次使用+会产生很多无用的String对象,占用过多的内存,加重GC的负担。

3.拆分字符串

使用StringUtils的split方法拆分字符串,不建议使用String类的split方法,因为String类的split采用正则表达式匹配,匹配效率低,而StringUtils采用的是普通字符串匹配的方式

4.尽量使用基本类型和String常量,避免使用包装类和String对象

基本类型数据产生和处理都在栈中,包装类型都在堆中。因为使用String常量是存在常量池中,所有线程共享的。而创建String对象是在堆中产生一个新的实例。例如

正确示例String str = “aaaa”              

错误示例String const = new String(“aaaa”)

5.复制数组元素时,采用System的arraycopy()方法代替循环复制

因为arraycopy使用更加底层的函数调用,效率更高

6.避免创建集合不设置初始容量

因为ArrayList的初始容量为10,一旦存储的元素个数超过阈值,会造成集合扩容。如果产生多次扩容,则会产生很多无用的中间集合对象,以及多次无意义的元素拷贝,性能低下。

7.RDD关联

一大一小RDD关联,如果小的RDD是中间计算结果,使用广播小的RDD并在大的RDDpartion函数中从小的RDD查找元素进行关联,避免直接使用JoinGroupBy操作。 

一大一小RDD关联,如果小的RDD来源于HDFS文件,使用广播HDFS文件路径并在大的RDDpartion函数中读取HDFS文件查找元素进行关联,避免先读取HDFS文件成RDD后再广播该RDD

8.多线程中,可以使用原子操作,使用ConcurrentHashMap代替Map,采用AtomicLong

9.常见的高性能集合组件:

(1)FastUtil

(2)Goldman Sachs Collections

(3)HPPC

(4)Koloboke

(5)Trove

10.对象池技术

11.Java NIO和IO,IO是面向流的,NIO是面向缓冲区的,Jetty

12.Java自带的序列化性能较为底下,业界许多的序列化框架Thrift、Kyro、Protostuff

13.JProfiler使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值