引用this页面:
How many objects will be eligible for GC here?
String s = "hello"; Character ch1 = 1; Character ch2 = 1; ch1 = null; s = null;
I believe the answer is 1.
我想了解它在 Java 6 中的工作原理。
我目前的理解:
字符串将进入池。后来就没有再提及了。所以,根据this回答(我不明白关于类加载器的部分,你能澄清一下吗?),字符串池很可能不会被垃圾收集......
好的,人物。有this Java 中的优化将导致 ch1
和 ch2
指向同一个对象。所以,这个小人物也要去一些池子里。但是,尽管 ch1
为 null
,我们仍然可以通过 ch2
引用访问 1
。
所以,我现在的答案是 0。
我的每一步都正确吗?如果不是,请纠正我。您能否解释一下它到底是如何工作的?
最佳答案
您的答案“没有收集任何内容”是正确的,至少只要定义字符串的类存在即可。
"hello"
是一个字符串文字,它出现的类引用它。只要该类可访问,文字就会保留。
类也可以被 GC 回收。但是每个类都会引用它的类加载器并被它引用。通常,您不关心类加载器,因为您使用默认的类加载器,并且它(以及您的所有类)会一直保留到最后。
某些应用程序(例如 Web 服务器)需要能够动态加载和卸载某些代码(例如 servlet)。这就是使用类加载器的地方。
关于java - 内部常量是否符合 GC 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283005/