是否符合 GC 条件的暂留常量



引用此页面:

这里有多少对象符合 GC 的条件?

String s = "hello";
Character ch1 = 1;
Character ch2 = 1;
ch1 = null;
s = null; 

我相信答案是1。

我想了解它在Java 6中是如何工作的。

我目前的理解:

字符串将进入池。后来,没有提到它。所以,根据这个答案(我不明白关于类加载器的那部分,你能澄清一下吗?),字符串池很可能不会被垃圾回收......

好的,角色。Java 中有这种优化会导致ch1ch2指向同一对象。所以,这个小角色也要去一些游泳池。但是,尽管ch1 null,我们仍然可以访问1 ch2参考。

所以,我现在的答案是0。

我每一步都对吗?如果没有,请纠正我。您能否解释一下它是如何工作的?

你的答案"什么都没有被收集"是正确的,至少只要定义字符串的类就在身边。

"hello"是一个字符串文本,它出现在其中的类引用它。只要类是可访问的,文字就会保留。

类也可以是GC'd。但是每个类都引用其类加载器并被它引用。通常,您不关心类加载器,因为您使用默认的类加载器,并且它(以及所有类)一直保留到最后。

某些应用程序(例如

,Web服务器)需要能够动态地加载和卸载某些代码(例如,servlet)。这就是使用类加载器的地方。

最新更新