JAVA虚拟机学习记录数据(四)对象
对象
创建对象的方式:
1、new
2、反序列化

对象创建的步骤:
1、new,类加载器加载Object类到方法区


2、创建对象于堆空间,为对象分配内存,对象此时能确定大小,比如int4个字节、long8个字节;分配的方式,一,如果内存规整,采用指针碰撞,二,如果内存不规整,占用的内存和未用的内存相互交错,采用空闲列表法,虚拟机会维护一份空闲列表,记录哪些是占用的,哪些是未用的,分配时找未用的,然后再更新列表。
采用哪种方式由java堆内存是否规整而定,而是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。
指针碰撞,蓝色为占用了的,红色是未用的,new出来后的对象占用红色的(变为蓝色的),然后指针往右移

3、处理并发问题,一、cas,二、TLAB
4、默认初始化,即所有属性设置默认值
5、设置对象的对象头
6、执行init方法初始化,即显式初始化或代码块初始化或构造器初始化。
对象的内存布局,即new出来的对象在堆内存里,由哪些结构。
哈希值:对象在堆空间的首地址值。
类型指针:就是obj.getClass()方法获得的信息,即所属的类是哪个。并不是所有的对象会有类型指针。

内存布局图示举例



对象访问定位:句柄池,有个好处,体现在标记整理算法,还有S0、S1来回移动上



浙公网安备 33010602011771号