首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java GC在实践中遇到了线程瓶颈?

Java GC在实践中遇到了线程瓶颈?
EN

Stack Overflow用户
提问于 2010-08-03 02:13:03
回答 4查看 795关注 0票数 4

Java的并行收集GC对于多线程环境的优化程度如何?我编写了一些多线程Jython代码,它们将大部分时间花在调用Java库上。根据我运行程序所使用的选项,库调用要么在引擎盖下执行大量的分配,要么几乎什么也不做。当我使用需要大量堆分配的选项时,我无法让代码扩展到超过6个核心。当我使用不需要大量分配的选项时,它会扩展到至少20个。考虑到我使用常用的Sun VM、并行GC和Jython作为粘合语言,这与GC瓶颈有关的可能性有多大?

编辑:为了清楚起见,我不会去想那些对Java老手来说很明显的东西,因为我几乎从不使用Java/JVM语言。我的大部分编程都是在D和Python的旗舰CPython实现中进行的。我正在使用JVM和Jython进行一个小型的一次性项目b/c,我需要访问一个Java库。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-03 05:44:25

对我来说,GC和多线程的问题是非常真实的。我并不是说JVM不好,只是问题本身很难处理。

在我们的一个项目中,我们有两个应用程序在单个JVM (app.服务器)。当单独给他们施加压力时,这是很好的,但当两个人一起承受压力时,表现会以一种奇怪的方式下降。我们最终拆分了应用程序。在两个JVM中,性能恢复正常(当然比只使用一个应用程序时要慢,但也是合理的)。

调优GC是非常困难的。情况可以改善5分钟,然后主要的收集将阻塞,等等。您可能决定在操作中是否需要高吞吐量或低延迟。高吞吐量适用于批量处理,低延迟适用于交互应用。最终,JVM的默认参数对我们来说是提供最佳结果的参数!

这不是一个真正的答案,而是一个经验回报,但是的,对我来说GC和多线程可能是一个问题。

票数 2
EN

Stack Overflow用户

发布于 2010-08-03 02:42:58

由于您的问题是关于GC瓶颈的:您可以通过打开GC日志记录并检查日志来消除这种可能性-如果有大量带有大量暂停的GC事件,您可以确认/否认这一理论。(但是,在您描述的场景中,我猜这不是GC问题)。

票数 3
EN

Stack Overflow用户

发布于 2010-08-03 05:10:56

Java GC是代际的。第一代的集合是用来处理短期对象的,预计会频繁运行。如果存在许多短暂的分配,则每秒运行几次短时间间隔是预期行为。(这应该是一个评论,而不是答案-我没有代表,对不起)。

此外,根据您使用的VM,您可以在GC算法之间进行选择。根据您使用的VM的版本和供应商,这些选项会有所不同。

一些(旧的)信息在这里:http://java.sun.com/developer/technicalArticles/Programming/turbo/#The_new_GC

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

https://stackoverflow.com/questions/3390531

复制
相关文章

相似问题

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