java对象在多个线程之间共享,何时垃圾收集?

标签 java multithreading garbage-collection

正在处理一个存在巨大内存问题的程序。 该程序由两个线程组成。线程 1 从队列中获取数据,处理它们,创建各种对象并将它们传递给线程 2 进行处理并存储在数据库中。 使用的堆大小不断攀升,直到发生 OutOfMemory 错误。

我仅使用一个线程解决了内存问题,因为据我所知,对象最终保持 Activity 状态,因此不会被 GC 处理,因为对它们的引用在整个线程 2 和数据库存储过程中仍然存在。

我还有一个问题:线程 1 中创建的对象什么时候会被 GC 回收?线程1什么时候退出?当线程 2(将使用它们进行进一步处理)退出时?

最佳答案

when would the objects created in thread 1 be expected to be GC-ed?

只要 GC 愿意,只要它们可以 Collection 即可。也许永远不会。

when thread 1 exits ? when thread 2, which would use them for further processing, would exit ?

以上都不是。当它们无法访问时,即当对它们的所有引用都超出了范围,或者包含的对象变得无法访问时,它们就变得可收集。线程在执行时始终可达。

关于java对象在多个线程之间共享,何时垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32172911/

相关文章:

java - Gson序列化到特定字段即使为null

java - 错误: Given final block not properly padded

c - 多线程tcp服务器的并发连接数

WPF:无法使用命令绑定(bind)和线程控制按钮的启用/禁用状态

java - PreparedStatement 导致 OOM 错误

java - 二维数组空指针异常错误

java - 如何检索 OWLapi 中专用类的子类?

java - 一个事务可以有多个线程吗?

image - Go GC 似乎没有收集我未引用的图像加载指针?

java - Java 8 中的 MetaSpace 有什么用?