JVM堆内存为什么不建议超过32G?

当堆内存设置大于等于32G时。

  1. 指针压缩会关闭。
  2. 使用64位存储指针,浪费内存。
  3. 会浪费主存到缓存的带宽。
  4. 在full GC的时候可能会花费几分钟。

首先,JVM是8字节对齐

JVM在启动的时候可以指定一个参数-XX:ObjectAlignmentInBytes,来指定JVM是几个字节对齐,参数值是8的倍数,默认是8.

其次,JVM默认开启指针压缩

指针压缩默认是开启的-XX:-UseCompressedOops,即使在64位CPU中,JVM也会用32位存储指针,因为用64位存储指针会浪费主存到缓存的带宽,如果不使用指针压缩,32只能存4G的地址,堆的大小最大只能是4G。开启指针压缩之后,JVM每8位(因为是8字节对齐)取一个地址,因为是8字节对齐的地址1,2,3,4,5肯定都是同一个对象。这样32位的空间就能存4G*8=32G的对象。

当堆空间设置的大于或等于32G时,会关闭指针压缩,jvm就会使用64位来存储指针,浪费指针占用更多内存,还会浪费主存到CPU的缓存的带宽。

#Java#
全部评论
学到了感谢楼主分享啊
点赞 回复 分享
发布于 2022-10-12 00:05 山西

相关推荐

不愿透露姓名的神秘牛友
11-21 19:05
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务