当前位置: 首页 > 知识库问答 >
问题:

NMT 类提交与 Jstat 压缩类空间

东郭弘
2023-03-14

我正在调查OutOfMemoryError:压缩类空间问题。我想,我找到了它的根本原因和解决方案(JAXBContext.new由HiberNate Validator方法调用的实例:用户提交的每个操作后的构建验证工厂),但在我的研究中,我注意到一件令人困惑的事情。

我尝试运行jcmd VM.native_memory和jstat -gc来跟踪类提交的大小和CCSU(压缩的类空间使用):

d:\experiments>jcmd 59692 VM.native_memory summary
Native 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     GCT
21504,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中的“Class committed”度量和jstat中的CCSU没有太大区别,但jstat显示的已用内存仅为1.72 MB,而Class committed超过24 MB。所以我生成了GC。class_stats统计,它显示KlassBytes大约为1738616 B-

那么剩下的在哪里呢?NMT给出的数字是多少?

共有1个答案

家西岭
2023-03-14

“Native Memory Tracking”报告中的部分显示了元空间和压缩类空间的聚合数字。这里解释了元空间和压缩类空间之间的区别。

Java进程演示的内存足迹幻灯片

jstat度量MCMUCCSCCCSU代表

  • 元空间容量
  • 使用的元空间
  • 压缩类空间容量
  • 使用的压缩类空间

本回答中解释了promise、能力和已用之间的关系。

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

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

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

从JDK 10开始,本机内存跟踪报告显示< code >类部分的详细细分:

-     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%)
 类似资料:
  • 我们正在Java-8-Oracle上运行。 我们在六个月前转移到java8。 在过去的几天里,我们得到了一个OOME不时,我们没有能够识别或再现的问题。 当我们执行对服务器(tomcat)的调用时,我们会在StackTrace上得到以下错误: 重新启动服务器解决了问题。对其他服务器的相同调用可以工作,对同一服务器的另一种类型的调用也可以工作。 查看GC日志时,我们会看到: 返回: 我在jstat日

  • 主要内容:压缩提交的步骤当您获取合并请求时,压缩是将所有提交合并为一个的一种方式。 压缩提交的步骤 步骤(1): 转到您的项目目录,使用命令检出名为的新分支: 标志表示新的分支名称。 步骤(2): 现在,创建一个包含两个提交的新文件,将该文件添加到工作目录,并将更改与提交消息一起存储到存储库中,如下所示: 然后,再次操作 - 步骤(3): 现在,使用以下命令将上述两个提交压缩到一个提交中: 这里,命令用于从一个分支集成到

  • RAR 与 ZIP 对比 支持其它压缩文件格式 固实压缩文件 自解压文件 (SFX) 分割压缩文件 (多卷) 恢复卷 加密 压缩文件注释 保护压缩文件防止损坏 锁定压缩文件 怎样选择优化的压缩设置

  • 本文向大家介绍C#实现的文件压缩和解压缩类,包括了C#实现的文件压缩和解压缩类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现的文件压缩和解压缩类。分享给大家供大家参考。具体分析如下: 这个C#代码包含了几个类,封装了文件压缩和解压缩常用的方法,包括直接通过代码进行压缩,也有调用winrar对文件进行压缩的 希望本文所述对大家的C#程序设计有所帮助。

  • 使用的字符串: string='hello'+'\r\n'+'world' Java中的预期输出: out.getValue() f.write(Base64.b64Encode(Out.getValue())) F.Close() ByteArrayInputStream(压缩)); InputStreamReader(gis,“UTF-8”));

  • 本文向大家介绍java图片压缩工具类,包括了java图片压缩工具类的使用技巧和注意事项,需要的朋友参考一下 直接上java图片压缩code: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。