Min*_*ang 8 java garbage-collection inner-classes
我已阅读内部课程教程并且不了解一件事.据说内部类隐藏了对外类的引用,所以我通过这个普通类提出了几个问题:
public class OuterClass {
public void doSomething() {
JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们有一个本地内部类,它位于方法内部doSomething(),我有一些问题.
这个本地内部类是否持有对OuterClass的引用,因为它是本地的?
在方法doSomething()终止后,此本地内部类是否保留内存?
是否有任何OuterClass符合GC条件的情况,但本地内部类仍然被其他类引用?会发生什么?
是的,内部类具有对OuterClass实例的引用.
您可以通过访问OuterClass.this方法来验证.
是的,在方法终止后,内部类实例将继续存在.
离开该方法不会影响对象的生命周期.正如所有其他对象一样,一旦没有对它的引用,它将符合GC的条件.由于JButton将保留对它的引用,它将保留在内存中.
只要内部类实例可访问,OuterClass实例就不能符合GC的条件.
原因是#1:内部类实例具有对外部类实例的引用,这意味着只要内部类不符合条件,外部类就不能符合GC的条件(即两者都是不再可达).
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |