【发布时间】:2018-04-06 13:01:30
【问题描述】:
在AbstractStringBuilder 的JDK 源代码中,append(int) 方法的实现方式不会分配不必要的内存(使用Integer.getChars 直接写入内部char[])。
但insert 的实现使用String.valueOf,它返回一个新字符串,然后将该数据复制到数组中。创建垃圾字符串。
StringBuilder 不是减轻连接字符串的垃圾影响的要点之一。 insert 的无垃圾实现似乎微不足道。那为什么不呢?
Oracle JDK 和 OpenJDK 似乎都是这种情况。甚至在javadoc中提到:
整体效果就好像第二个参数被String.valueOf(int)方法转换成字符串,然后那个字符串的字符被插入到这个字符序列中指定的偏移量。
【问题讨论】:
-
insert的实现不会影响“减轻连接字符串的垃圾影响”的目标,因为连接永远不需要 insert 操作。由于不太常见,减少代码重复被认为比减少垃圾更重要。显然。
标签: java garbage-collection stringbuilder