示例代码:
StringBuffer sb = new StringBuffer("hi");
sb = null;
问题:
文字字符串“ hi”是否仍会保留在内存中,即使在StringBuffer被垃圾回收之后?还是只是用来为StringBuffer创建一个char数组,然后再从不将其放置在内存中?
答案 0 :(得分:10)
是的,hi
是一个编译时间常数,因此它会被编译器阻止并驻留在字符串池中。
此外,G1GC可以将字符串重复数据删除作为JEP 192: String Deduplication in G1的一部分,在这种情况下,即使hi
未被javac
进行中断,它也可能保留为重复数据删除的一部分。
答案 1 :(得分:4)
字符串文字始终引用类
String
的相同实例。这是因为使用方法§15.28 <,可以对字符串文字(或更一般地说,是常量表达式(String.intern
)的字符串)进行“插入”,以便共享唯一的实例。 / em>。