指针压缩

1 查看

$ java -XX:+PrintCommandLineFlags -version

 

-XX:-UseCompressedClassPointers -XX:-UseCompressedOops

-XX:+UseCompressedClassPointers -XX:+UseCompressedOops

 

JDK1.8之后默认开启这两个压缩

  • 当堆内存小于4G时,不需要启用指针压缩,jvm会直接去除高32位地址
  • 当堆内存大于32G时,压缩指针会失效,会强制使用64位(即8字节)来对java对象寻址, 那这样的话内存占用较大,会增加GC压力等等

 

3

  1. 对象头信息:64位平台下,原生对象头大小为16字节,压缩后为12字节
  2. 对象的引用类型:64位平台下,引用类型本身大小为8字节,压缩后为4字节
  3. 对象数组类型:64位平台下,数组类型本身大小为24字节(no paddning是20),压缩后16字节

posted on 2024-05-15 14:10  silyvin  阅读(2)  评论(0编辑  收藏  举报