1.加载类
传送门:Java类加载过程之流程图分解
2.为对象分配内存
- 对象所需内存的大小在类加载完成后便可完全确定。
- 相当于把一块确定大小的内存从Java堆中划分出来。
指针碰撞(Bump the Pointer)
假设将堆划分为两部分,左边为已使用内存,右边为空闲内存。(堆内存规整)
在左边和右边的中间放一个指针作为指示器,这样将指针右移与对象大小相同的距离,给对象分配内存的方式就叫做指针碰撞。
空闲列表(Free List)
假设已使用内存和空间内存是相互交错的(类似于Windows的碎片整理的进度图示),那就没办法直接使用指针碰撞了。
虚拟机必须维护一个列表,用来记录哪些内存块是空闲的。在分配内存的时候,从列表中选择一块足够大的内存划分给对象实例,并更新列表上的记录。这种分配方式称为空闲列表。
3.对象初始化
参考
《深入理解Java虚拟机》第2版
---转载本站文章请注明作者和出处 二进制之路(binarylife.icu),请勿用于任何商业用途---