StringBuilder/StringBuffer,内存中包含文字字符串

Art*_*nis 6 java string stringbuilder garbage-collection stringbuffer

示例代码:

StringBuffer sb = new StringBuffer("hi");
sb = null;
Run Code Online (Sandbox Code Playgroud)

题:

即使在StringBuffer被垃圾收集之后,文字字符串"hi"会以某种方式保留在内存中吗?或者它只是用于为StringBuffer创建一个char数组,然后永远不会放在内存中?

Kar*_*cki 10

是的,hi是一个编译时常量,因此它被编译器实例化并驻留在字符串池中.

此外,G1GC可以执行字符串重复数据删除作为JEP 192的一部分:G1中的字符串重复数据删除,在这种情况下,即使hi没有被它实例化,javac也可能会将其作为重复数据删除的一部分保留.