2

在下面的SCJP 模拟考试问题中,要求学生找出String b标记为 (0) 的那一行将成为垃圾收集的候选者。

public class Q76a9 {
    static String f() {
        String a = "hello";
        String b = "bye"; // (0)
        String c = b + "!"; // (1)
        String d = b; // (2)
        b = a; // (3)
        d = a; // (4)
        return c; // (5)
    }

    public static void main(String[] args) {
        String msg = f();
        System.out.println(msg); // (6)
    }
}

在发现正确答案是 6 之后,我得出的结论是,如果存储在String Literal Pool中的String 对象丢失了它们的引用,则不要再将其保留在Pool中。如果未引用它们,则它们有资格进行垃圾收集

真的吗?如果是,Literal Pool机制如何处理没有任何引用的字符串?

编辑:这个问题假设没有进行编译器优化

4

0 回答 0