一、类的创建
【1】描述:创建过程:类的加载检查->分配内存->初始化零值->设置对象头->执行init方法
(1)类的加载检查:在常量池中定位类的符号引用并确认类是否被加载、解析和初始化过。
(2)分配内存:
1)指针碰撞;
2)空闲列表;
3)线程安全的保证:CAS+失败重试;TLAB(Thread Local Allocation Buffer)[为每一个线 程预先在 Eden 区分配一块儿内存,JVM 在给线程中的对象分配内存时,首先在 TLAB 分配,当对象大于 TLAB 中的剩余内存或 TLAB 的内存已用尽时,再采用上述的 CAS 进 行内存分配]
(3)初始化零值:将分配到的内存空间都初始化为零值;
(4)设置对象头:将对象的哈希码、GC分代年龄等信息存放于对象头中。
(5)执行init方法:init方法一般由程序员的意愿安排业务
二、对象的访问定位
【1】句柄:Java堆中的句柄池reference中存储对象的句柄地址,其中指针包含对象实例数据和类 型数据各自地址信息。
【2】直接指针:reference中存放的是对象的地址,指针指向访问类型数据的相关信息。