前言
new
openjdk
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>
对象分布
- 首先我们得明确一个Java对象在内存中是什么样的结构。这里有人可能会说能有啥结构。就是内存数据二进制存储呗。这样的回答好像说了又好像没说。
- 这里我们通过一个demo案例来具体讲解。首先我们系统中存在这么一个对象
@Data
public class User {
private int age;
}
- 一个
User
对象仅有一个Int类型的属性。他在内存中不仅仅是表述int类型的数据。图中应为kclass point
![](https://i-blog.csdnimg.cn/blog_migrate/b44e6fb284490e1748a312bc8ffbafad.png)
- 对于一个普通的Java对象就是上述的数据结构存储在内存中的。在64位系统中markword站8字节;klass point在不开启指针压缩的前提下占8字节,否则占位4字节;这里的内容就是我们对象中的属性,因为Java中属性都是有类型的而每种类型占位也是不一样的,比如上面我们int类型是占位4字节;至于补齐字节是啥意思呢?在64位中要求一个对象在内存中所占字节必须是8的倍数。