GC什么时候回收垃圾

GC什么时候回收垃圾


关于方法区中需要回收的是一些废弃的常量和无用的类。

  1. 废弃的常量的回收。这里看引用计数就可以了。没有对象引用该常量就可以放心的回收了。
  2. 无用的类的回收。

什么是无用的类呢?

  1. 该类所有的实例都已经被回收。也就是Java堆中不存在该类的任何实例;
  2. 加载该类的ClassLoader已经被回收;
  3. 该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法。

结论

  • 对于堆中的对象,主要用可达性分析判断一个对象是否还存在引用,如果该对象没有任何引用就应该被回收。而根据我们实际对引用的不同需求,又分成了4中引用,每种引用的回收机制也是不同的。
  • 对于方法区中的常量和类,当一个常量没有任何对象引用它,它就可以被回收了。而对于类,如果可以判定它为无用类,就可以被回收了。
Donate comment here