Java对象


2022-02-26 Java

# 对象在内存中的布局

image-20220226151322769

java对象分为4个部分

  • mark word (占8个字节)
    • 锁信息
    • hashcode
    • gc信息
  • 类型指针 (占4个字节)
  • 实例数据
  • 对齐 (让大小能被8整除)

对象头是指markwork和类型指针占12字节,一个对象没有任何实例数据,最小占用16kb空间

对象头会记录锁类型信息,第一次调用hashcode方法后会将hashcode值也记录到对象头中

数组对象会有数据长度部分

# 对象怎么定位

image-20220226151716921

  • 直接方式

    优点: 直接访问,速度快

    缺点: GC需要移动对象的时候稍麻烦

  • 句柄方式

    优点: 对象小,垃圾回收时不用频繁重新定位

    缺点: 两次访问