Java 垃圾收集符合条件的对象

Java 垃圾收集符合条件的对象,java,performance,garbage-collection,Java,Performance,Garbage Collection,我有6个独立的java类A、B、C、D、E和F Class A创建Class B的对象,并调用Class B中的方法 Class B方法创建Class C的对象,并调用Class C中的方法 Class C方法创建D、E、F类的对象并调用它们的方法 最后,当控件返回到类A时,如果我将类B的对象引用设为null,这是否会使迄今为止创建的类B、C、D、E、F的所有对象都符合垃圾收集的条件?是。会的。由于父类现在被引用为null并且是孤立的,因此它下面的所有引用对象都将符合GC的条件 当不再存在对对象

我有6个独立的java
类A、B、C、D、E和F

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

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

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


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

是。会的。由于父类现在被引用为null并且是孤立的,因此它下面的所有引用对象都将符合GC的条件

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


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

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

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


因此,如果b不再被引用,它就有资格被gc引用。当它依次被收集时,c没有更多的参考文献,因此c成为合格的,故事就这样继续下去。

通常是的,但没有更多的信息,我们无法确定。

最好的例子是,假设C在一个存储在http会话或EJB事务(或直接存储一个引用)中的集合中放置对它创建的D实例的引用。如果发生这种情况,这些引用将阻止D的相关实例以及它们保留引用的所有内容被垃圾收集。

同时检查以下链接:B类的对象引用是单个本地对象。这是否会使C、D、E、F类的所有对象都符合gc条件?不,您应该知道基本规则。对于每个对象,所有实例变量都有不同的副本。因此,如果将null赋值给B的一个对象,则只在该对象内部进行复制(即C、D、E、F对象)将被垃圾收集。搜索这些基本的东西,你会得到很多东西来阅读。我的类使用集合,但不使用httpsession或ejb相关的东西。它们现在合格吗?@user1929905,这取决于。只要引用存在于集合中,并且该集合本身不符合垃圾收集的条件,则引用指向的实例也不符合条件。因此,如果类中有一个调用a的集合,该集合被传递到a上的一个方法中,该方法向该集合添加了对B的引用,那么B将一直保留在该集合中,除非该集合本身被删除。我猜您指的是上述图中的所有对象。不是给定类的所有对象。如果上述类型的对象已在其他地方构造,则不会对其进行GC'ed