实习常数是否符合GC要求?

时间:2014-12-03 22:37:38

标签: java garbage-collection java-6 scjp

引用this页面:

  

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

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

我相信答案是1。

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

我现在的理解:

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

好的,角色。 Java中有this优化,会导致ch1ch2指向同一个对象。所以,这个小角色也会进入一些游泳池。但是,尽管ch1null,我们仍然可以通过1引用来访问ch2

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

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

1 个答案:

答案 0 :(得分:3)

您的答案"没有收集任何内容"是对的,至少只要定义字符串的类就在那里。

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

课程也可以是GC。但是每个类都引用它的类加载器并由它引用。通常情况下,您不关心类加载器,因为您使用默认类加载器并且它(以及所有类)一直保持到最后。

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