突然想到一个问题:
下面的这段代码是非常非常危险,会导致内存泄漏。当退出该 Activity 时,由于匿名内部类 Thread 持有外部类(这里的 MainActivity)的引用,导致 MainActivity 的实例对象无法被回收,从而发生内存泄漏。
我的疑问是:
JVM 的 GC 规则是看从 GC roots 能不能到达某个对象,不能到达就会在下一次 GC 时被回收,可是这里的 Thread 对象并没有显示地指向它的引用,它为什么不被回收呢?难道是有什么隐式引用存在吗?
注:由于本人水平有限,我的提问中可能本身就有不对的地方,如有不对的地方,请见谅啦~
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conten);
new Thread(){
@Override
public void run() {
try {
Thread.sleep(100 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}