什么时候静态嵌套类被垃圾收集?

时间:2013-07-09 16:15:04

标签: java

我知道静态变量或方法在程序结束之前永远不会被垃圾收集,但静态嵌套类如何工作? 我在oracle网站上找到了这个引用,我知道顶级类不能是静态的,所以嵌套的静态类将表现为非静态类。但它并不能确保我是否也会以同样的方式收集垃圾。

  

静态嵌套类与其外部的实例成员进行交互   类(和其他类)就像任何其他顶级类一样。在   效果,静态嵌套类在行为上是一个顶级类   已经嵌套在另一个顶级类中以方便包装。

1 个答案:

答案 0 :(得分:8)

当没有仍然引用它的GC根时,静态嵌套类的实例将有资格进行垃圾回收 - 就像任何其他对象一样。

当加载它的类加载器有资格进行垃圾收集时,类本身将有资格进行垃圾收集 - 就像任何其他类一样。

甚至内部类的行为方式相同 - 隐式引用是内部类实例一个封闭类的实例...所以内部的一个实例class可以“秘密地”防止封闭类的实例被垃圾收集,但不能反过来。 (显然,封闭类的实例可以引用内部类的实例,但只能显式引用。)