NKR*_*NKR 1 java android garbage-collection jvm
我对GC如何在Java中工作感到困惑.
以下是令我困惑的代码段:
private Data data = new Data();
void main() {
for (int i = 0; i < 100 ; i++) {
MyThread thread = new MyThread(data);
thread.start();
}
System.gc();
// Long running process
}
class MyThread extends Thread {
private Data dataReference;
MyThread(Data data) {
dataReference = data;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,如果在继续进一步继续之前调用gc(//长时间运行进程)
本地线程会被垃圾收集吗?
或GC将迎来他们(MyThread的本地引用)一样活着,因为它拥有的参考全球参考的数据?
该MyThread实例可以被垃圾收集他们做了之后(即他们的run方法做).在for循环结束之后,任何完成MyThread其run方法的实例都可能被垃圾收集(因为没有对它们的引用).
MyThread每个实例都持有Data对未收集垃圾的实例的引用这一事实不会影响MyThread实例符合垃圾收集条件的时间.