java常用性能优化方法及耗时对比

字符串操作

1.String.split(seg);的时间是StringUtils.split(str, seg);的1.5倍.

2.String.replaceAll(regex, replacement)的时间是StringUtils.replace(text, searchString, replacement)的1.86倍。

3.如果是单个字符替换StringUtils.replace(text, searchString, replacement)的时间是StringUtils.replaceChars(str, searchChar, replaceChar)的15倍。

4.如果是字符串替换StringUtils.replace(text, searchString, replacement) 是StringUtils.replaceChars(str, searchString, replaceString)1.4倍。

一句话:能不用正则表达式的地方尽量不用,哪怕自己写方法来实现。

5.如果必须到正则匹配,则需要声明为final类型,以便在编译期间就编译好。final Pattern pattern = Pattern.compile(match)。

循环遍历

 对于List循环,如果List的底层实现是ArrayList最好使用for(int i;i<list.size();i++)方法,而不是使用for(Object obj: objList)。因为foreach方法会创建迭代器进行迭代,会损耗一部分性能。但是如果List是LinkedList实现的,并且又要get元素,那么get(i)遍历效率比较低。

log4j打日志时间:

1.输出到console是输出到本地磁盘(无缓存)的1.33倍

2.无缓存输出到本地磁盘是加缓存输出到本地磁盘的1.09倍(根据实际情况buffersize不一样,性能也不一样)

3.输出到本地磁盘(无缓存)+输出到console是输出到本地磁盘(无缓存)的1.48倍。

 

Exception try-catch时间:

注:时间比例视try包围的代码执行时间而定,代码执行时间越长,try catch对整体时间的影响越小。这里只是为证明加catch 与不加catch对性能的影响。

1. 循环执行字符串比较方法StringUtils.equals(Str1, Str2); 加catch是不加catch执行时间的1.16倍。

2.循环执行字符串比较方法rr.equals(Str2),都加catch,抛空指针异常是不抛异常执行时间的7400倍。

结论:加try catch对性能有轻微影响,所以不要滥用try-catch,但是对于有可能抛异常的地方也不要吝于加try-catch。 抛异常与不抛异常对性能影响很大,对于空指针等可以从代码端上fix上的异常一定要及时修复。

 

其他第三方库

1.各种JSON库性能对比,强烈推荐使用fastjson。(下面数据来源于第三方测试)

java常用性能优化方法及耗时对比

2.xml解析器性能对比,吐血推荐XStream+Xpp黄金组合。


java常用性能优化方法及耗时对比
 
 

你可能感兴趣的:(java)