【发布时间】:2012-08-26 09:14:40
【问题描述】:
考虑以下场景:
- 对象
myObj在某个函数myFunc中本地实例化。 -
myObj启动一个线程someThread,它运行一些后台任务,例如从套接字读取。 -
myFunc然后返回,导致myObj被取消引用。
在正常情况下,JVM 只会垃圾收集myObj。但是,如果someThread 还在运行,还会是这样吗?
我知道someThread 本身不会被 GC,只要它仍在运行,但在我的代码中它还需要访问存储在myObj,所以我确保 myObj 在它仍在运行时仍然存在是很重要的。
【问题讨论】:
-
Java 虚拟机规范不保证 anything 被垃圾回收。您使用的是什么特定的 JVM?
-
@veer 我打算在 Linux 上的 Oracle JVM 上运行完成的代码。我想问
myObj是否仍然有 在线程运行时被垃圾收集更合适。在这种情况下,我需要确保某些东西不会得到 GC,而不是相反。 -
@Positronized 如果你的线程以某种方式可以访问一个对象,它必须有一个对它的引用。如果你有一个对象的引用,它就不能被垃圾回收。
标签: java multithreading garbage-collection