首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在单CPU系统中使用SerialGC还是G1GC?

我应该在单CPU系统中使用SerialGC还是G1GC?
EN

Stack Overflow用户
提问于 2019-09-13 10:27:55
回答 4查看 1.3K关注 0票数 2

我有一个只限于一个CPU的容器,这是java 11+的默认情况(可能也更旧)--在这种情况下,它是用户SerialGC的。我是应该强制使用线程GC (如G1GC),还是将其留在SerialGC上?

哪个CPU在单个CPU上表现得更好?在这种情况下,我总是认为SerialGC更好,但在某些情况下,我经常看到G1GC被强制使用。

编辑:我要求一般情况,因为我们有许多不同的应用程序运行使用相同的配置,很难测试每一种情况。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-09-13 11:07:13

根据文献资料的说法。

串行收集器使用单个线程执行所有垃圾收集工作,这使得它相对高效,因为线程之间没有通信开销。 它最适合于单处理器机器,因为它不能利用多处理器硬件,尽管它对于具有小数据集(高达100 MB)的应用程序非常有用。

我假设处理器=核心文档(以及您的问题)。虽然文档中说串行收集器对于多核机器来说不是一个好的选择,但它并没有说其他收集器对于一台单核机器是不好的。

不过,其他收集器确实倾向于使用多线程,而且您将无法从单核环境中获得这些线程的全部好处。

那么,你为什么看到G1GC使用?也许除了最新的原因之外没有别的理由。但是,如果有原因,则很可能是G1提供的GC暂停时间更短:

如果响应时间比总体吞吐量更重要,垃圾收集暂停必须保持在大约1秒以内,那么使用-XX:+UseG1GC或-XX:+UseConcMarkSweepGC选择一个主要并发的收集器。

最好的案例场景是,在这些情况下,他们用不同的收集器度量性能,并选择提供最佳结果的性能。

还可以考虑注释中提到的字符串去重复Holger。这是一个特定的内存优化,这可能是使用G1GC的原因。毕竟,如果您只有一个内核,那么您可能也没有太多的内存可供使用。

票数 3
EN

Stack Overflow用户

发布于 2019-09-13 13:16:57

,您想优化什么?,您希望始终能够以极快的速度回答,还是拥有更好的整体性能?在第一种情况下,您应该以更短的GC暂停时间为目标,而在第二种情况下,您应该以所有GC暂停的较低和为目标。

还有其他一些因素--(即重新启动应用程序的频率),所以最好的方法是数据驱动的方法。使用GC易GC查看器分析每个应用程序的性能并采取相应的措施。

请记住,GC调优并不总是必需的,所以如果您不知道您想要实现什么,您可能会过早地进行优化。

一般而言:

  • 使用--串行GC,用于不具有低暂停时间要求且在资源较低的环境中运行的应用程序。
  • 如果您有更多的资源或需要快速回答,请使用G1垃圾收集器(请记住在更改之前和之后测量性能)。
票数 2
EN

Stack Overflow用户

发布于 2019-09-15 16:06:52

作为一个更一般的评论,不要假设因为您只有一个核心/CPU,使一个任务多线程将没有任何好处。根据所涉及的任务(在本例中是GC),很可能会出现一个线程被阻塞(例如等待IO完成)的情况,这允许执行任务另一部分的其他线程使用处理器并完成有用的工作。总体性能提高了,尽管一次只能运行一个线程。

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

https://stackoverflow.com/questions/57921891

复制
相关文章

相似问题

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