java 7/8字符串interning未按预期工作

r1wp621o  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(235)

这个问题在这里已经有答案了

“文本”和新字符串(“文本”)有什么区别(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根显示为“常量池”。
你知道是什么引起的吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题