首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:线程执行后的内存清理

Java:线程执行后的内存清理
EN

Stack Overflow用户
提问于 2014-08-28 21:30:21
回答 4查看 2.3K关注 0票数 1

我们有一个处理大量数据的Java批处理程序。

在处理完这些数据之后,为什么JVM不立即清除垃圾,而是等待下一次执行呢?

根据我所观察到的,前一次运行的数据保持不变,直到我手动关闭JVM或下一次计划的运行开始。

我希望JVM立即清除数据,这样在下一次计划的运行时,它就不必在运行期间并行清除垃圾,希望运行得更快。

感谢你的帮助。

编辑:

非常感谢你的快速回复。

由于内存中存在这种垃圾,我并没有真正看到对我的进程有显著的性能影响。但是,它一直在蚕食系统RAM,并影响此JVM之外的其他程序的内存可用性。

我遇到的另一个问题是,在开发和调试这个程序期间,当程序运行时,我让它运行,但一旦完成,为了分析结果,我必须打开一些其他应用程序,这些应用程序显然需要一些RAM,但JVM不会释放RAM空间,除非我停止它,这会影响其他程序的可用性和性能。

EN

回答 4

Stack Overflow用户

发布于 2014-08-28 21:38:55

JVM的GC是非常高效的,要让它变得“更高效”并不容易。除非你有严重的性能问题,否则我不会尝试做任何事情。

如果你有严重的性能问题,你应该考虑其他的可能性,主要是你的代码。它几乎不是GC。

话虽如此,我的实际建议是看看是否有什么东西保留了对数据的引用。如果引用只是在下一次运行时被清除,这就解释了症状。你是否有线程与GC的资格没有任何关系。最重要的是你是否拥有对数据的实时引用。

票数 2
EN

Stack Overflow用户

发布于 2014-08-28 21:35:30

您不能强制垃圾回收器运行。您几乎不能建议JVM使用System.gc()运行它。此外,最近的JVM已经针对内存管理进行了很好的优化,所以在您自己调用System.gc()之后,不要期望有任何大的改进。

票数 1
EN

Stack Overflow用户

发布于 2014-08-28 21:39:46

JVM使用gc策略运行垃圾收集器。几乎所有GC都是在分配失败时发生的。您可以调用System.gc();但不推荐使用这种方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25550036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档