首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用G1 GC定期触发主要GC

使用G1 GC定期触发主要GC
EN

Stack Overflow用户
提问于 2018-08-23 08:10:03
回答 1查看 2.6K关注 0票数 1

我正在使用一个带有G1 GC的应用程序。当旧的gen使用率超过一定水平时,是否有触发主要GC的参数?现在,我的堆使用情况如下所示

代码语言:javascript
复制
Heap Usage:
G1 Heap:
   regions  = 1504
   capacity = 1577058304 (1504.0MB)
   used     = 1183184896 (1128.373046875MB)
   free     = 393873408 (375.626953125MB)
   75.02480364860372% used
G1 Young Generation:
Eden Space:
   regions  = 540
   capacity = 823132160 (785.0MB)
   used     = 566231040 (540.0MB)
   free     = 256901120 (245.0MB)
   68.78980891719745% used
Survivor Space:
   regions  = 15
   capacity = 15728640 (15.0MB)
   used     = 15728640 (15.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 580
   capacity = 738197504 (704.0MB)
   used     = 600176640 (572.373046875MB)
   free     = 138020864 (131.626953125MB)
   81.30298961292614% used

虽然旧的gen利用率在80%以上,但不会触发主要GC。如果我运行以下命令,就会触发一个主要的GC,并收集我的旧gen中的大多数对象。有没有办法周期性地触发这样的主要GC?

代码语言:javascript
复制
jmap -histo:live <pid>

JVM启动时提供的GC相关选项

代码语言:javascript
复制
-server -Xms1503m -Xmx1503m -Xss512k -XX:ReservedCodeCacheSize=240m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=2000 -XX:+UseStringDeduplication -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=30
EN

回答 1

Stack Overflow用户

发布于 2018-08-23 15:21:44

对于G1,初始标记阶段由占用率触发,即堆有多满。默认情况下,初始占用份额是45%,但这是整个堆的份额,而不是旧的gen。

您可以使用-XX:InitiatingHeapOccupancyPercent标志更改它,并将其设置为小于45的值。你看到的是老一代,这似乎有点奇怪。80%是满的。由于G1与应用程序线程并发地执行某些阶段,因此您提升的速度可能会使堆填满的速度快于G1回收的速度,但这似乎不太可能。

还有一个实验性的标志,-XX:G1MixedGCLiveThresholdPercent,您可能想要看看。这里有更多信息:

https://www.oracle.com/technetwork/articles/java/g1gc-1984535.html

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

https://stackoverflow.com/questions/51976739

复制
相关文章

相似问题

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