一、 结论
- maven
- 测试
二、对象内存布局
- MarkWord:对象头,8字节。包括了对象的hashCode、对象的分代年龄、锁标志位等。结构如下图所示:
1.hashcode 2.GC标记 3,锁标记位 - classPointer:对象指向它的类元素的指针。在不开启对象指针压缩的情况下是8字节。压缩后变为4字节,默认压缩。
padding :用于对象在内存中占用的字节数不能被8整除的情况下,进行补充。
三、Object o = new Object()在内存中占了多少字节
markword 8字节,因为java默认使用了calssPointer压缩,classpointer 4字节,padding 4字节 因此是16字节
如果没开启classpointer默认压缩,markword 8字节,classpointer 8字节,padding 0字节 也是16字节
四、User (int id,String name) User u = new User(1,‘张三’);占用多少字节
markword 8字节,开启classPointer压缩 ,classpointer 4字节,instance data int 4字节,开启普通对象指针压缩 String 4字节 padding 4 一共24字节