首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G1GC:如何使用所有空闲内存?

G1GC:如何使用所有空闲内存?
EN

Stack Overflow用户
提问于 2016-03-06 08:08:17
回答 1查看 5.9K关注 0票数 2

我尝试在我的程序中使用G1GC。程序在不同内存大小的机器上使用: 1Gb内存的VPS (最小),8Gb内存的桌面,32 1Gb内存的DS (最大)。我注意到,即使有大量空闲内存,G1GC也不会保留更多内存(例如,G1GC在我的机器上保留的内存不超过3Gb,总容量为8Gb / 4Gb )。

我想要一个通用的解决方案。我不能为每种类型的机器创建单独的版本或单独的运行脚本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-06 11:25:18

我认为你选择了错误的垃圾收集算法。Java 8文档提供了这个指导:

选择收集器 除非应用程序有相当严格的暂停时间要求,否则首先运行应用程序并允许VM选择收集器。如果有必要,调整堆大小以提高性能。如果性能仍然不符合您的目标,那么使用以下准则作为选择收集器的起点。

  • 如果应用程序有一个很小的数据集(最多可达100 MB),那么选择带有-XX:+UseSerialGC选项的串行收集器。
  • 如果应用程序将在单个处理器上运行,并且不需要暂停时间,那么让VM选择收集器,或者选择带有选项-XX:+UseSerialGC的串行收集器。
  • 如果(a)峰值应用程序性能是第一优先级,并且(b)不需要暂停时间或暂停1秒或更长时间是可以接受的,那么让VM选择收集器,或者使用-XX:+UseParallelGC选择并行收集器。
  • 如果响应时间比总体吞吐量更重要,垃圾收集暂停必须保持在大约1秒以内,那么使用-XX:+UseConcMarkSweepGC-XX:+UseG1GC选择并发收集器。

来源:选择收集器

根据您的评论,您的目标似乎是获得最佳性能,即尽量减少用于GC和相关管理费用的总时间。

这意味着你最好的选择是:

  • 设置一些性能目标,让JVM来决定哪个收集器是最好的。有关性能目标机制的详细信息,请参阅基于行为的调谐材料。
  • 如果只有一个核心,则选择Serial。
  • 如果有多个核心,则选择并行GC。

如果您想要一个适合所有脚本的脚本,而不管硬件如何工作,那么性能目标方法是最好的,尽管这意味着您将无法使用特定于平台的设置来(潜在地)改进JVM的决策。

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

https://stackoverflow.com/questions/35824572

复制
相关文章

相似问题

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