首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G1 GC分配的内存大于堆大小。

G1 GC分配的内存大于堆大小。
EN

Stack Overflow用户
提问于 2022-01-20 18:31:40
回答 1查看 748关注 0票数 2

我为应用服务器更改GC。现在我使用G1 GC。我有30 GB内存。对于初始测试,我只将Xms和Xmx值设置为相同的23040 mb。

我使用的设置:

代码语言:javascript
复制
 -Xms23040m -Xmx23040m  -XX:+UseG1GC -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1536m 

如果我使用GCEasy GC,我有有趣的G1度量。

代码语言:javascript
复制
   Generation         | Allocated | Peak
   Young Gen          | 13.38     | 3.37
   Old Gen            | 21.17     | 485mb
   Meta Space         | 1.5       | n/a
   Young + old + Meta | 23.78     | 13.61

总计是36.05 GB的怎么回事?GCEasy图林克在这里。

我不明白为什么分配的内存大于最大堆大小?

GC初始日志:

代码语言:javascript
复制
OpenJDK 64-Bit Server VM (25.282-b08) for linux-amd64 JRE (1.8.0_282-b08), built on Jan 20 2021 11:56:52 by "jenkins" with gcc 7.5.0
Memory: 4k page, physical 31389860k(23816948k free), swap 0k(0k free)
CommandLine flags: -XX:GCLogFileSize=3145728 -XX:InitialHeapSize=23923261440 -XX:MaxHeapSize=23923261440 -XX:MaxMetaspaceSize=1610612736 -XX:MetaspaceSize=536870912 -XX:NumberOfGCLogFiles=5 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:+UseGCLogFileRotation

GC暂停日志:

代码语言:javascript
复制
    2022-01-19T08:18:40.340-0500: 45739.624: [GC pause (G1 Evacuation Pause) (young), 0.0675291 secs]
   [Parallel Time: 42.0 ms, GC Workers: 1]
      [GC Worker Start (ms):  45739624.2]
      [Ext Root Scanning (ms):  10.8]
      [Update RS (ms):  5.1]
         [Processed Buffers:  76]
      [Scan RS (ms):  2.1]
      [Code Root Scanning (ms):  2.9]
      [Object Copy (ms):  21.0]
      [Termination (ms):  0.0]
         [Termination Attempts:  1]
      [GC Worker Other (ms):  0.0]
      [GC Worker Total (ms):  41.9]
      [GC Worker End (ms):  45739666.1]
   [Code Root Fixup: 0.0 ms]
   [Code Root Purge: 0.0 ms]
   [Clear CT: 5.8 ms]
   [Other: 19.7 ms]
      [Choose CSet: 0.0 ms]
      [Ref Proc: 16.8 ms]
      [Ref Enq: 0.1 ms]
      [Redirty Cards: 0.1 ms]
      [Humongous Register: 0.1 ms]
      [Humongous Reclaim: 0.0 ms]
      [Free CSet: 2.3 ms]
   [Eden: 13632.0M(13632.0M)->0.0B(13632.0M) Survivors: 57344.0K->57344.0K Heap: 13933.2M(22816.0M)->307.2M(22816.0M)]
 [Times: user=0.07 sys=0.00, real=0.07 secs] 

这是否意味着GCEasy.io有错误来显示正确的度量标准?当我使用并行GC时,没有类似的问题。(分配的内存是,而不是,大于Xmx)

EN

回答 1

Stack Overflow用户

发布于 2022-01-20 19:27:29

该表中列出的分配大小包括梅斯帕斯。Metaspace是与java对象堆分离的内存池。因此,堆和元空间的总和可以超过最大堆大小。

->0.0B(13632.0M)幸存者: 57344.0K->57344.0K堆: 13933.2M(22816.0M)->307.2M(22816.0M)

这表明总的堆大小(所有代)为22 at,在最大堆限制内。也许gceasy把堆的总大小误认为是老一代?

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

https://stackoverflow.com/questions/70791598

复制
相关文章

相似问题

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