这个问题在这里已经有答案了:
“文本”和新字符串(“文本”)有什么区别(12个答案)
在java中何时垃圾收集字符串(3个答案)
字符串文本的垃圾收集(4个答案)
什么是java string interning(7个答案)
上个月关门了。
根据java中的字符串行为,我们有以下几点:
当使用字符串文字时,它会自动被插入
当我们使用新字符串(“value”)时,它总是会创建一个新字符串,只有在示例上使用.intern()时,它才会被插入。
但是,在进行一些性能测试时,我发现字符串正在被保留,即使没有显式调用.intern,我甚至做了这样一个简单的测试:
public class TestStrings {
public static void main(String[] args) {
new TestStrings().createStrings();
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
public void createStrings() {
String s1 = new String("helloWorld");
String s2 = new String("helloWorld");
}
}
我希望在探查器中看到2个示例,但它只显示一个:
更糟糕的是,它没有被垃圾收集,因为它将一个gc根显示为“常量池”。
你知道是什么引起的吗?
暂无答案!
目前还没有任何答案,快来回答吧!