考虑以下场景:
一个物体 myObj
在某个函数中本地示例化 myFunc
. myObj
开始一个线程 someThread
它运行一些后台任务,例如从套接字读取。 myFunc
然后返回,导致 myObj
取消引用。
在正常情况下,jvm只会进行垃圾收集 myObj
. 但是,如果 someThread
仍在运行,是否仍会是这种情况?
我明白 someThread
只要它还在运行,它本身就不会是gc的,但在我的代码中,它还需要访问存储在中的值 myObj
所以我要确保 myObj
在它仍在运行时仍然存在。
1条答案
按热度按时间sy5wg1nm1#
对象只有在没有引用的情况下才有资格进行垃圾收集。你这么说
someThread
需要访问存储在中的值myObj
,这意味着它必须引用myObj
. 这意味着myObj
除非someThread
也符合条件。你可以保证一个对象永远不会从你下面被垃圾收集,例如,这是非常安全的:
void foo() {
new ThreadStartingObject("I'm alive!");
}
class ThreadStartingObject {
private String message;
}