0

我有 6 个单独的 java Classes A,B,C,D,E and F

Class A创建 的对象Class B并调用 中的方法Class B

Class B方法创建一个对象class C并调用一个方法class C

Class C方法创建D,E,F类的对象并调用它们的方法。

当最终控制权最后回到A类时,如果我将对象引用Class B设为null,这是否会使class B,C,D,E,F迄今为止创建的所有对象都符合垃圾回收条件?

4

4 回答 4

0

是的。它会。由于父类现在被引用为 null 并且是孤立的,因此它下面的所有引用对象都可以进行 GC。

当不再存在对它的强引用时,对象进入不可访问状态。当一个对象不可达时,它是收集的候选对象

http://192.9.162.55 /docs/books/performance/1st_edition/html/JPAppGC.fm.html

于 2013-03-07T06:20:15.353 回答
0

通常是的,但如果没有更多信息,我们不能肯定地说。
最好的例子是,如果说 C 将一个对它创建的 D 实例的引用放在一个 Collection 中,该 Collection 存储在 http 会话或 EJB 事务中(或直接在那里存储一个引用)。如果发生这种情况,这些引用将阻止 D 的相关实例被垃圾收集,以及它们保留引用的所有内容。

于 2013-03-07T06:52:05.103 回答
0

是的。“当不再引用该对象时,该对象有资格进行垃圾回收。”

所以如果 b 不再被引用,它就符合 gc 的条件。反过来,当它被收集时,不再有 c 的引用,因此 c 成为合格的,所以故事继续。

于 2013-03-07T06:45:37.757 回答
0

是的,如果它们是在方法内部创建的,即在本地创建它们,那么它们将有资格进行垃圾收集,如果它们是实例变量对象,那么只有设置为 null 的该对象的副本才有资格进行 gc。

于 2013-03-07T06:27:34.190 回答