hotspot 与 openJDK 是 JVM 的具体实现,JVM 相当于一种规范。
new 一个对象
申请内存——初始化默认值——构造方法,设置值——建立关联
class T{
int m = 8;
}
T t = new T();
汇编代码
new #2
dup 复制一份
invokespecial #3
astore_1 将t与内存中的T对象建立关联
return
对象在内存中的存储布局
普通对象 new XX()
markword 标记字,class pointer 类型指针,instance data 实例对象,padding 对齐
其中 markword 和 class point 一起称为对象头
如果前三个一个没有满足 8 个字节,用 padding 补齐
数组
int[] a = new int[4]
T[] a = new T[5]
markword,class poniter,length(数组长度 4 字节) ,instance data 实例对象,padding
对象头主要包括的就是锁的信息,现在的 synchronized 是一个锁升级的过程
先上偏向锁,自旋锁(无锁,轻量级锁),重量级锁,
偏向锁:坑上贴个名片,如果你来就可以直接进入
当发生竞争时,使用 CAS 算法往坑上贴名片。
对象是怎么定位的?
句柄方式,直接指针
转载 https://www.yuque.com/jykss/jykss/qaomdf