Java对象创建过程

1.    用户new一个对象。

2.    JVM检查常量池,看是否可定位到一个类(所对应的符号引用),并检查该类是否已经加载,解析和初始化。若没有,则执行类加载过程。

3.    类加载检查通过,JVM为新对象分配内存。由于类已经加载完成,所以内存大小是可以确定的。分配过程就是从Java堆中划分一块内存出来。JVM维护了一个空闲内存列表,记录了所有可用的内存块。分配时划分一块足够大的内存出来。这称为“空闲列表”。

实际上,每个线程在Java堆上都是会预先分配一小块内存的,称为本地线程分配缓冲(TLAB)。当该线程需要分配内存时,优先使用TLAB。只有当TLAB用完并分配新的TLAB时,才需要同步锁定。

4.    内存分配完成后,JVM将分配的内存空间进行初始化为零值(不包括对象头)。若使用TLAB,这一步会提前到TLAB分配时进行。故对象实例的字段可以不赋初值就可直接使用。

5.    JVM对对象进行必要设置,并将各种设置信息放在对象头之中。完成之后,一个新对象产生了。

6.    执行对象的int方法。一个真正可用的对象产生。

猜你喜欢

转载自blog.csdn.net/fyyyr/article/details/79373059