Java 在哪里调用垃圾收集器的可能性最大?
我无法跟踪正在调用垃圾收集器的位置。plz帮助Java 在哪里调用垃圾收集器的可能性最大?,java,garbage,Java,Garbage,我无法跟踪正在调用垃圾收集器的位置。plz帮助 class Garbage01 { public static void main(String args[]) { Garbage01 h = new Garbage01(); h.methodA(); /* Line 6 */ } Object methodA() { Object obj1 = new Object(); Object [] obj2 = new Object[1]; ob
class Garbage01
{
public static void main(String args[])
{
Garbage01 h = new Garbage01();
h.methodA(); /* Line 6 */
}
Object methodA()
{
Object obj1 = new Object();
Object [] obj2 = new Object[1];
obj2[0] = obj1;
obj1 = null;
return obj2[0];
}
}
methodA()中从未调用垃圾收集器
因为垃圾收集是在方法返回对对象的引用之后进行的。方法返回到第6行,没有用于存储返回值的引用。所以垃圾收集发生在第6行之后。java中的垃圾收集被自动调用,它收集符合垃圾收集条件的对象 如果无法从任何活动线程或任何静态引用访问对象,则该对象有资格进行垃圾收集或GC。换句话说,如果对象的所有引用都为null,则可以说该对象有资格进行垃圾收集 循环依赖项不算作引用,因此如果对象A引用了对象B,而对象B引用了对象A,并且它们没有任何其他活动引用,则
对象A
和B
都有资格进行垃圾收集
因此,无法检查何时调用/调用垃圾收集器。无法跟踪垃圾收集器被调用的位置。垃圾收集器将在它想要运行时运行。可以保证它会在某些情况下运行(在抛出OutOfMemoryError之前),但除此之外,您无法知道它何时运行,也无法强制它运行。调用垃圾回收器的最大机会在哪里完成main()
@NoobUnChainedC:\Users\JohnChen\Desktop>java-verbose:gc-Garbage01
\n
C:\Users\JohnChen\Desktop>
不,最有可能的是垃圾收集器不会被调用@Sandeep vashisth:但是为什么在跟踪垃圾收集器的调用位置时需要帮助呢?也许您需要为您的问题添加更多的上下文—您正试图证明/解决的是什么。您可能可以说什么时候不会发生,但您肯定不能肯定地说什么时候会发生。此处不会调用垃圾收集器,因为在obj2[0]中维护并返回了对该对象的引用您可以说引用不会被垃圾回收,但我的观点是,您不能确切地说垃圾回收器何时运行。