在Java开发者中,字符串的拼接占用资源高往往是热议的话题。
让我们深入讨论一下为什么会占用高资源。
在Java中,字符串对象是不可变的,意思是它一旦创建,你就无法再改变它。所以在我们拼接字符串的时候,创建了一个新的字符串,旧的被垃圾回收器所标记。
如果我们处理上百万的字符串,然后,我们就会生成百万的额外字符串被垃圾回收器处理。
在大多数的教程中,也许你会看到用+号拼接字符串会生成多个字符串,导致性能过差,建议使用StringBuffer/StringBuilder来拼接。
本文在JDK8中做了如下实验:
公共静态void main (String [] args) { 字符串的结果=" "; 结果+=备嗟氖荨? System.out.println(结果); }
通过javap - c来反编译得到:
代码: 0:aload_0//推动“这”> 公共静态void main (String [] args) { 字符串的结果=" "; for (int i=0;我& lt;10;我+ +){ 结果+=备嗟氖荨? } System.out.println(结果); }
同样反编译:
代码: 0:aload_0//推动“这”> 字符串的结果=" "; for (int i=0;我& lt;10;我+ +){ StringBuilder tmp=new StringBuilder (); tmp.append(结果); tmp。追加(“更多数据”); 结果=tmp.toString (); }System.out.println(结果);
可以看到不断生成新的StringBuilder,并且通过tostring,原来的StringBuilder将不再引用,作为垃圾,也增加了GC成本。
所以,在实际的使用中,当你无法区分字符串是静态拼接还是动态拼接的时候,还是使用StringBuilder吧。
<强>参考:强>
http://www.pellegrino.link/2015/08/22/string -连接-与- java - 8. - html
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。