gpt4 book ai didi

java - 当对象持有对正在运行的线程的引用时,该对象是否有资格进行垃圾回收?

转载 作者:行者123 更新时间:2023-12-02 09:22:14 25 4
gpt4 key购买 nike

1)实际上问题出在代码中。持有对正在运行的线程的引用会阻止对象有资格进行垃圾回收吗?

class SomeClass {

Thread mThread = new Thread(new MyRunnable());

public SomeClass() {
mThread.start();
}

public static void main(String[] args) {
SomeClass sc = new SomeClass();
sc = null;
// Will the sc be eligible to gc here?
...
}

private static class MyRunnable implements Runnable {
@Override
public void run() {
while (true) {}
}
}
}

2)如果我们使用WeakReference to Thread而不是Thread,是否符合条件?

已更新

更新了代码以强调最困扰我的问题。

我想了解的是,实例运行线程是否会阻止对象被收集?

最佳答案

是否有资格进行垃圾收集取决于谁拥有对您的引用,而不是您拥有对谁的引用。因此,是的,如果一个对象的实例变量包含对正在运行的线程的引用,那么如果该对象本身无法从任何 Activity 线程访问,则该对象可以进行垃圾回收。事实上,在您的示例中,您标记的行处就是这种情况。

如果收集了这样的对象,则不会对相关线程产生任何影响。特别是,VM 本身持有对每个 Activity Thread 的引用(即使它当前没有运行),因此不需要对 Thread 进行其他引用来阻止它正在收集中。

当然,持有对线程的弱引用也不会阻止对象被垃圾收集。

关于java - 当对象持有对正在运行的线程的引用时,该对象是否有资格进行垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32467035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com