一些收藏

java对象在内存中如何分布 | java上锁原来就是内存占位,

2022-07-13  本文已影响0人  让我来搞这个bug

前言

 <dependency>
     <groupId>org.openjdk.jol</groupId>
     <artifactId>jol-core</artifactId>
     <version>0.9</version>  
 </dependency>

对象分布

 @Data
 public class User {
     private int age;
 }

image.png image.png image.png image.png image.png image.png

markword

image.png image.png image.png image.png image.png image.png

指针压缩

在32位到64位的转变中,我们能够直观地感受到内存容量的变化。在一个32位的系统中,内存地址的宽度就是32位,这就意味着,我们最大能获取的内存空间是232(也就是4G)字节。这个容量明显不够用!在一个64位的机器中,理论上,我们能获取到的内存容量是264字节,接下来,我们就谈谈compressed oops能帮我们做什么

如果GC堆大小在 4G以下,直接砍掉高32位,避免了编码解码过程; 如果GC堆大小在 4G以上32G以下,则启用 UseCompressedOop; 如果GC堆大小 大于32G,压指失效,使用原来的64位(所以说服务器内存太大不好......)

原文链接:
https://juejin.cn/post/7117060955175026695

上一篇 下一篇

猜你喜欢

热点阅读