gpt4 book ai didi

java - java中的字符串文字和垃圾收集器

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:20 24 4
gpt4 key购买 nike

更具体地说,我读到,在 java 7 中,字符串文字现在存储在堆的主要部分中,那么它们是否有资格进行垃圾收集器?

String a ="z";
a = null;

现在对象“z”是否被垃圾回收,或者仍然作为匿名对象存在于字符串池中?

最佳答案

只有当包含这些文字的所有类都被 GC 时,字符串文字才能被 GC ,而这只有在加载这些类的类加载器都被 GC 时才会发生。

示例:

public interface I {
String getString();
}

public class Test2 implements I {
String s = "X";
@Override
public String getString() {
return s;
}
}

public class Test implements I {
String s = "X";
@Override
public String getString() {
return s;
}
}

public class Test1 {

public static void main(String[] args) throws Exception {
ClassLoader cl = new URLClassLoader(new URL[] {new URL("file:d:/test/")});
I i = (I)cl.loadClass("Test").newInstance();
WeakReference w = new WeakReference(i.getString()); //weak ref to "X" literal
i = null;
cl = null;
System.out.println(w.get());
System.gc();
Thread.sleep(1000);
System.out.println(w.get());
}
}

编译这些类,将Test.class移动到d:/test,这样系统类加载器就看不到它,然后运行main。你会看到

X
null

这意味着“X”已被 GC 编辑

关于java - java中的字符串文字和垃圾收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23933912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com