内存布局

image.png

面试题 User user = new User()在内存中占几个字节?
  1. public class User{
  2. private String name;
  3. private int id;
  4. public void main(){
  5. User user = new User();
  6. }
  7. }
size(byte)
MarkWord
- 对象Hash值
- gc年龄
- 锁信息
8
classPointer 4或者8 指向永久代 ?.class 类信息
使用-XX:+UseCompressClassPointer指令后,压缩为4字节
Instance data int id
String name
对象数据 int4
String在开启压缩是引用占4个字段
padding 对齐,不能被8整除时,加空字节。

在开启指针压缩时:8+4+4+4=20+4=24
在没开启指针压缩时:8+8+4+8=28+4=32