为了账号安全,请及时绑定邮箱和手机立即绑定

NMT 类提交与 Jstat 压缩类空间

NMT 类提交与 Jstat 压缩类空间

翻阅古今 2023-11-10 17:03:47
我正在调查 OutOfMemoryError:压缩类空间问题。我认为,我找到了根本原因和解决方案(Hibernate Validator 方法调用 JAXBContext.newInstance():用户每次提交操作后的 buildValidatorFactory),但在我的研究过程中,我注意到一件令人困惑的事情。我尝试运行 jcmd VM.native_memory 和 jstat -gc 来跟踪类提交大小和 CCSU(压缩类空间使用情况):d:\experiments>jcmd 59692 VM.native_memory summaryNative Memory Tracking:Total: reserved=10039335KB, committed=889895KB-                 Java Heap (reserved=8353792KB, committed=522240KB)                            (mmap: reserved=8353792KB, committed=522240KB)-                     Class (reserved=1072460KB, **committed=24268KB**)                            (classes #2518)                            (malloc=9548KB #2393)                            (mmap: reserved=1062912KB, committed=14720KB)和d:\experiments>jstat -gc 59692 2s S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT21504,0 21504,0  0,0    0,0   131072,0 56218,7   139264,0    7755,5   14976,0 14318,5 1920,0 1721,7      2    0,012   1      0,036   -          -    0,048我预计 NMT 中的“类提交”指标和 jstat 中的 CCSU 指标之间没有重大差异,但 jstat 显示大约仅 1,72 MB 的已用内存,而类提交的已使用内存超过 24 MB。因此,我生成了 GC.class_stats 统计数据,它显示 KlassBytes 约为 1738616 B -> 1,739 MB - 因此它与 CCSU 中 jstat 显示的值大致相同。我还发现其余的元数据(如方法、常量等)占用了大约 14,44 MB(这与 mmap 中的值大致相同:commited=14720KB - 但我不知道这个数字是多少)。那么剩下的部分在哪里呢?NMT给出的数字到底是多少?
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

Class本机内存跟踪报告中的部分显示了元空间压缩类空间的聚合数量。


https://img1.sycdn.imooc.com/654df2270001018b06490318.jpg

Java 进程的内存占用演示文稿中的幻灯片


jstat 指标MCMU,CCSCCCSU代表

  • 元空间容量

  • 使用的元空间

  • 压缩类空间容量

  • 已使用的压缩类空间


因此,本机内存跟踪显示的提交与 jstat 指标相关,具有以下不等式:

Class Committed >= MC + CCSC >= MU + CCSU

然而,它们之间的差异可以是任意大的。


从 JDK 10 开始,本机内存跟踪报告显示了以下部分的详细细分Class

-     Class (reserved=1073841KB, committed=28593KB)
            (classes #3967)
            (  instance classes #3694, array classes #273)
            (malloc=689KB #9228) 
            (mmap: reserved=1073152KB, committed=27904KB) 
            (  Metadata:   )
            (    reserved=24576KB, committed=24576KB)
            (    used=24131KB)
            (    free=445KB)
            (    waste=0KB =0.00%)
            (  Class space:)
            (    reserved=1048576KB, committed=3328KB)
            (    used=3003KB)
            (    free=325KB)
            (    waste=0KB =0.00%)



查看完整回答
反对 回复 2023-11-10
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信