有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调优G1GC年轻收集频率

我有一个应用程序,它使用一个堆外字节数组从中读取数据,并将其推入一个基于原语(键和值)堆的Hashmap。我已经为我的应用程序分配了4G,运行10分钟可以显示14MB的最大堆使用量,但在这10分钟内,我看到一些年轻的集合开始出现。这些集合仅适用于少数地区(6-8)。我对它进行了分析,以查看我的应用程序正在生成多少垃圾,但10分钟内垃圾量小于40MB

有没有办法,我可以告诉G1GC不要踢年轻的GC,因为还有很多堆。也许,在1GB或年轻一代使用量的50%之后收集它,我知道我的应用程序永远不会达到这个目标?我尝试了以下方法:

  1. 将XX:G1NewSizePercent增加到50%,确实产生了影响,但还不够。因此,我得到的不是10张专辑,而是5张专辑。但对我来说,5还是太多了
  2. 将暂停时间减少到1ms-XX:maxgcpausemilis
  3. 通过XX:congcthreads将并发线程增加到与我的核心相同的数量

GC日志示例:

101.211: [GC pause (G1 Evacuation Pause) (young) 101.211: [G1Ergonomics (CSet Construction) start choosing CSet, _pending_cards: 1030, predicted base time: 3.04 ms, remaining time: 46.96 ms, target pause time: 50.00 ms] 101.211: [G1Ergonomics (CSet Construction) add young regions to CSet, eden: 3 regions, survivors: 1 regions, predicted young region time: 1.03 ms] 101.211: [G1Ergonomics (CSet Construction) finish choosing CSet, eden: 3 regions, survivors: 1 regions, old: 0 regions, predicted pause time: 4.07 ms, target pause time: 50.00 ms] , 0.0010747 secs] [Parallel Time: 0.6 ms, GC Workers: 8] [GC Worker Start (ms): Min: 101210.9, Avg: 101211.0, Max: 101211.1, Diff: 0.1] [Ext Root Scanning (ms): Min: 0.2, Avg: 0.2, Max: 0.3, Diff: 0.2, Sum: 1.7] [Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.3] [Processed Buffers: Min: 0, Avg: 1.0, Max: 2, Diff: 2, Sum: 8] [Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0] [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.2, Diff: 0.2, Sum: 0.2] [Object Copy (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.6] [Termination (ms): Min: 0.0, Avg: 0.1, Max: 0.1, Diff: 0.1, Sum: 0.7] [Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 8] [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1] [GC Worker Total (ms): Min: 0.4, Avg: 0.4, Max: 0.5, Diff: 0.1, Sum: 3.5] [GC Worker End (ms): Min: 101211.4, Avg: 101211.5, Max: 101211.5, Diff: 0.0]


共 (0) 个答案