目录

 

对象实例化的几种方式

对象创建的六个步骤

对象的内存布局

对象的访问定位


对象实例化的几种方式

java 查看bitSet占用内存空间_java 查看bitSet占用内存空间

对象创建的六个步骤

  • 第4步的初始化指的是对成员变量进行初始化,比如 有一个成员变量int i;这个默认就会赋个初值0,对象引用就是默认null,如果是方法中的局部变量不手动赋初值是会报错的。
  • 第6步的初始化才是我们所熟悉的初始化,构造器的方式、代码块的方式对属性进行初始化。

java 查看bitSet占用内存空间_对象创建_02

  • 还有一个<cinit>是对类中静态属性的一个初始化,属于是类构造器的方法,理解为类初始化;<init>只能算类的构造器对应的方法,理解为实例初始化
  • 总结一下:代码Object object = new Object() 在这句代码中,new就相当于生活中,你画美少女的时候,你已经把轮廓,大概的样子都画完了,但是眼睛啊、颜色啊还没有画上去,这个时候可以说已经有了这个美少女,但是不全面,对应1、2、3、4、5步;Object()初始化就相当于是把眼睛、颜色都画了上去,这时候美少女才是全面的,真正意义上画好了,对应第6步,对象创建就大概是这个例子的意思。

对象的内存布局

  • 对象头参考《深入了解java虚拟机》53页
  • 对象头范围大的来看就是分为 运行时元数据(Mark Word)和 类型指针(指向元空间中该类的类型信息)

java 查看bitSet占用内存空间_java_03

java 查看bitSet占用内存空间_java 查看bitSet占用内存空间_04

对象的访问定位

java 查看bitSet占用内存空间_java 查看bitSet占用内存空间_05

  • 句柄访问缺点:空间上需要开辟一块专门记录对象实例数据的指针;时间访问对象实例还得先访问指针再访问到实例数据,比较慢
  • 句柄访问优点:对象发生移动,只需要更改实例数据指针,而不需要全部更改

 

java 查看bitSet占用内存空间_对象创建_06

  • 直接指针就是速度快,而且不用开辟空间专门放个指针 我们默认就是用的这个

java 查看bitSet占用内存空间_java_07