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 山西

相关推荐

04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
马上要带我人生中的第一个实习生了,想问问大家都喜欢什么的mentor?好让我有个努力的目标
拒绝996的劳伦斯很勇敢:看得见目标且护犊子的 具体就是明确告诉组员要干什么,然后当别的组甩dirty work时能护的组自家新人
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务