字符串文字可以符合垃圾回收的条件。以这种方式?

时间:2014-05-29 14:36:09

标签: java string garbage-collection

我在帖子https://stackoverflow.com/a/23934422/2194456

中看到过
 class Test {
    String s = "1";
}
...
MyClassLoader cl = new MyClassLoader();
Object obj = cl.loadClass("Test").newInstance();
obj = null;
cl = null;
// now "1" is eligible for GC if no other class or object references it 

这真的有效吗?

1 个答案:

答案 0 :(得分:1)

对于字符串文字进行GCed的唯一原因是,如果所有引用它的类都被卸载了。即使这样,特定的垃圾收集器也必须被设计为删除被拦截的字符串,而不是全部都是。

对于要卸载的类,必须使用用户类加载器加载,并且必须释放/卸载该加载器以及引用该类的所有对象和类。这绝不会偶然发生,并且很难达到目的。

(上面的代码尝试这样做,但是,正如我所说的那样,故意这样做很难,所以我不能说它是否有效。)

(并且,正如其他地方所提到的那样,GC语言的能力在语言历史中已经多次打开和关闭,很可能是某些当前JVM的启动选项。)