Java NMT类提交vs Jstat压缩类空间
我正在调查OutOfMemoryError:压缩类空间问题。我认为,我找到了它的根本原因和解决方案(由Hibernate Validator方法调用的JAXBContext.newInstance():在用户提交的每个操作之后构建ValidatorFactory),但在我的研究中,我注意到了一件令人困惑的事情 我尝试运行jcmd VM.native_memory和jstat-gc来跟踪类提交大小和CCSU(压缩类空间使用): 及 我预计NMT中的“类提交”度量和jstat中的CCSU之间没有重大区别,但jstat显示,相对于超过24MB的类提交,仅使用了约1,72MB的内存。因此,我生成了GC.class_统计数据,它显示KlassBytes大约为1738616b->1739mb-因此它与CCSU中显示的jstat值几乎相同。我还发现其余的元数据(如方法、常量等)占用了大约14,44MB(这与mmap:committed=14720KB中的值几乎相同,但我不知道这个数字是多少)Java NMT类提交vs Jstat压缩类空间,java,memory-management,jvm,jstat,jcmd,Java,Memory Management,Jvm,Jstat,Jcmd,我正在调查OutOfMemoryError:压缩类空间问题。我认为,我找到了它的根本原因和解决方案(由Hibernate Validator方法调用的JAXBContext.newInstance():在用户提交的每个操作之后构建ValidatorFactory),但在我的研究中,我注意到了一件令人困惑的事情 我尝试运行jcmd VM.native_memory和jstat-gc来跟踪类提交大小和CCSU(压缩类空间使用): 及 我预计NMT中的“类提交”度量和jstat中的CCSU之间没有重大
那么剩下的部分呢?NMT显示的数字到底是多少?
Class
部分显示了元空间和压缩类空间的合计数字。解释了元空间和压缩类空间之间的区别
演示文稿中的幻灯片
jstat度量标准
MC
,MU
,CCSC
和CCSU
代表
- 元空间容量
- 使用的元空间
- 压缩类空间容量
- 使用的压缩类空间
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%)
Class Committed >= MC + CCSC >= MU + CCSU
- 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%)