jdk不同版本对String拼接的优化分析
2017-02-03 16:38
288 查看
1. 测试demo代码
测试循环中字符串拼接优化public class ForTest { public static void main(String[] args) { String a = "0"; for (int i = 1; i < 10; i++) { a = a + "i"; } System.out.println(a); } }
2. 测试循环中字符串拼接优化
jdk5jdk6
jdk7
jdk8
结论:
对比jdk5-8所有版本下的反编译字节码,发现结果相同,证明字符串拼接从jdk5开始就已经完成了优化,并且没有进行新的优化。
详细看反编译后的字节码,8开始进入for循环比较阶段,11new一个新的StringBuilder,为了优化之后的String+操作。34循环结束,重新到5,将会在11重新new一个StringBuilder。
循环外字符串拼接可以直接使用String的+操作,没有必要通过StringBuilder进行append.
由于循环中每次都会回到5,所以会不停的创建StringBuilder对象,除了循环体后就成了无效对象,这样会产生大量的垃圾对象。所以好的做法是在循环外声明StringBuilder对象,在循环内进行手动append。不论循环多少层都只有一个StringBuilder对象。
相关文章推荐
- tomcat优化配置及默认引用不同版本JDK配置
- tomcat6优化配置及默认引用不同版本JDK配置
- Java不同JDK版本下地图图像处理效率对比分析
- Integer.valueOf(String)不同JDK版本的差异
- jdk版本不同引起的问题分析
- Java jdk对String字符串拼接的优化
- Java关于浮点数的舍入法与String.format()在不同jdk版本的区别
- jdk版本不同引发的怪异问题(jdk1.5与jdk1.6之间)
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 不同版本jdk以及tomcat共存的问题
- 用javap分析java编译器对string常量表达式的处理和优化
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 转:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 转:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- JDk版本不同对系统的影响
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- JDK 不同版本编译问题