gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:31:21 25 4
gpt4 key购买 nike

正在处理一个存在巨大内存问题的程序。该程序由两个线程组成。线程 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/

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