Java普通对象创建之流程图分解

1.加载类

传送门:Java类加载过程之流程图分解

2.为对象分配内存

  • 对象所需内存的大小在类加载完成后便可完全确定。
  • 相当于把一块确定大小的内存从Java堆中划分出来。

指针碰撞(Bump the Pointer)

假设将堆划分为两部分,左边为已使用内存,右边为空闲内存。(堆内存规整)

在左边和右边的中间放一个指针作为指示器,这样将指针右移与对象大小相同的距离,给对象分配内存的方式就叫做指针碰撞。

空闲列表(Free List)

假设已使用内存和空间内存是相互交错的(类似于Windows的碎片整理的进度图示),那就没办法直接使用指针碰撞了。

虚拟机必须维护一个列表,用来记录哪些内存块是空闲的。在分配内存的时候,从列表中选择一块足够大的内存划分给对象实例,并更新列表上的记录。这种分配方式称为空闲列表。

3.对象初始化

参考

《深入理解Java虚拟机》第2版


---转载本站文章请注明作者和出处 二进制之路(binarylife.icu),请勿用于任何商业用途---

留下评论