【笔记】深入理解 java 虚拟机---虚拟机对象探秘

对象在堆上创建。

对象的创建包括以下几步:

1 分配内存 。包括两种方式,指针碰撞(Bump the Point ),空闲列表(Free List)。如果 虚拟机自己支持 压缩内存的话,分配方式是 指针碰撞。为了保证线程安全,先预先给线程分配空间。称为TLAB(Thread local Allocation Buffer)。

2 初始化为零值(便于Java代码中不赋予初始值就可以使用)

3虚拟机设置对象头给对象(元数据,对象的哈希码,分配的GC年龄) 

4执行方法。

对象在内存中的布局分布

  1 对象头。存jvm需要的对象的信息。

2 实例数据。就是代码产生象信息。

3 占位符。jvm 要求起始地址必须是8的整数倍。

对象的访问定位

  1 句柄访问。 reference 到 句柄 到 对象。 句柄里放对象地址。

  2 直接访问。 reference 到 对象。

句柄,如果对象地址改动,不用更改reference 的值,只改变句柄里的值。这里 改变句柄里的代价 肯定要远小于改变reference的代价。不然没必要。

 


你可能感兴趣的:(【笔记】深入理解 java 虚拟机---虚拟机对象探秘)