对象分配过程

对象初始化过程,当一个类被new出来时候执行的顺序。
new->父类静态属性
->父类静态代码块
->子类静态属性
->子类静态代码块
->父类非静态成员变量
->父类初始化方法
->父类构造器方法
->子类非静态成员变量
->子类初始化方法
->子类构造器方法

类分配过程
图片.png

new对象,开启内存逃逸分析,得出结果类不会逃离本方法域,进行一个栈上分配 成功:对象分配成功。
失败:会进行TLAB分配,
TLAB分配失败:进行新生代分配对象,
新生代分配失败进行一个老年代的分配,老年代如果没有足够内存进行fullgc,再次分配

TLAB(Thread Local Allocation Buffer)

本地线程分配池,每个线程都会在内存申请一个小块的内存,如果new出来的对象大小 线程申请的小内存可以分配,这样就快速分配对象,在线程创建之初就已经申请内存了。当申请的内存使用完进行一个同步再次申请一小块内存

对象分配方法

指针碰撞空闲列表,区别在于内存是否规整,指针碰撞指的是把指针指向一块与对象对等的区域,空闲列表指的是堆内存维护一个内存空闲列表,对象进行分配时候从空闲列表中找一块能够放的下此对象的内存,分配完之后更新空闲列表,选择何种分配方法取决于gc回收器。

你可能感兴趣的:(对象分配过程)