引用此页面:
这里有多少对象符合 GC 的条件?
String s = "hello"; Character ch1 = 1; Character ch2 = 1; ch1 = null; s = null;
我相信答案是1。
我想了解它在Java 6中是如何工作的。
我目前的理解:
字符串将进入池。后来,没有提到它。所以,根据这个答案(我不明白关于类加载器的那部分,你能澄清一下吗?),字符串池很可能不会被垃圾回收......
好的,角色。Java 中有这种优化会导致ch1
和ch2
指向同一对象。所以,这个小角色也要去一些游泳池。但是,尽管ch1
null
,我们仍然可以访问1
ch2
参考。
所以,我现在的答案是0。
我每一步都对吗?如果没有,请纠正我。您能否解释一下它是如何工作的?
你的答案"什么都没有被收集"是正确的,至少只要定义字符串的类就在身边。
"hello"
是一个字符串文本,它出现在其中的类引用它。只要类是可访问的,文字就会保留。
类也可以是GC'd。但是每个类都引用其类加载器并被它引用。通常,您不关心类加载器,因为您使用默认的类加载器,并且它(以及所有类)一直保留到最后。
某些应用程序(例如,Web服务器)需要能够动态地加载和卸载某些代码(例如,servlet)。这就是使用类加载器的地方。