聊聊jvm的CompressedClassSpace

本文详细探讨了Java 8中JVM的CompressedClassSpace,包括其在元空间(Metaspace)中的作用和配置选项。内容涉及CompressedClassSpace的内存限制、如何查看使用情况,以及通过JCMD、JMX和Spring Boot应用进行监控的方法。通过阅读,读者将了解CompressedClassSpace如何与UseCompressedOops和UseCompressedClassPointers配合工作,以及如何调整相关参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文主要研究一下jvm的CompressedClassSpace

CompressedClassSpace
java8移除了permanent generation,然后class metadata存储在native memory中,其大小默认是不受限的,可以通过-XX:MaxMetaspaceSize来限制
如果开启了-XX:+UseCompressedOops及-XX:+UseCompressedClassesPointers(默认是开启),则UseCompressedOops会使用32-bit的offset来代表java object的引用,而UseCompressedClassPointers则使用32-bit的offset来代表64-bit进程中的class pointer;可以使用CompressedClassSpaceSize来设置这块的空间大小
如果开启了指针压缩,则CompressedClassSpace分配在MaxMetaspaceSize里头,即MaxMetaspaceSize=Compressed Class Space Size + Metaspace area (excluding the Compressed Class Space) Size
查看CompressedClassSpace大小
jcmd pid GC.heap_info
/ # jcmd 1 GC.heap_info
1:
Shenandoah Heap
524288K total, 144896K committed, 77232K used
2048 x 256K regions
Status: not cancelled
Reserved region:
- [0x00000000e0000000, 0x0000000100000000)

Metaspace used 45675K, capacity 46867K, committed 47104K, reserved 1091584K
class space used 5406K, capacity 5838K, committed 5888K, reserved 1048576K
可以看到整个metaspace使用了45675K,其中class space使用了5406K,而Metaspace area (excluding the Compressed Class Space)使用了45675K-5406K=40269K;整个metaspace的reserved大小为1091584K,其中class space的reserved大小为1048576K

jcmd pid VM.native_memory
/ # jcmd 1 VM.native_memory
1:

Native Memory Tracking:

Total: reserved=2224403KB, committed=238187KB
- Java Heap (reserved=524288KB, committed=144896KB)
(mmap: reserved=524288KB, committed=144896KB)

- Class (reserved=1092940KB, committed=48460KB)
(classes #8563)
( instance cl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值