当前位置: 首页 > 网络应用技术

热点虚拟机对象探索

时间:2023-03-08 01:01:49 网络应用技术

  在热点虚拟机中,对象的内存布局分为以下3个区域:

  对象头记录对象在操作过程中需要使用的一些数据:

  对象头可能包含一个类型指针,该指针可以通过此指针确定对象属于哪个类别。如果对象是数组,则对象头还将包含数组长度。

  实例数据部分是成员变量的值,包括本类中的父成员变量和成员变量。

  确保对象的总长度是8个字节的整数倍数。

  热点VM的自动内存管理系统的大小必须是8个字节的整数倍数。标题部分正是8个字节的倍数(1次或2次)。因此,当对象实例的数据部分不对齐时,有必要通过对齐方式填充它。

  对齐填充不一定存在,也没有特殊的含义。它仅在占用一点中发挥作用。

  当虚拟机分析文件时,如果遇到新指令,首先将检查常数池中是否有符号参考,并检查是否已加载,解析和初始化此符号参考的类如果不是,则必须先执行相应的类加载过程。

  加载类后,可以完全确定对象所需的内存大小。接下来,将相应大小的一段记忆空间从堆到新对象分开。有两种方法可以在堆栈中分配中文记忆:

  分配内存后,将初始值给予对象中的成员变量,设置对象标头信息,然后调用对象的构造方法进行初始化。

  此时,整个对象的创建过程已完成。

  所有对象的存储空间都分配在堆中,但是该对象的引用分配在堆栈中。堆栈中分配的内存只是该堆对象的指针(引用)。然后根据不同类型的地址类型具有不同的访问方法。

  堆中有一个称为“手柄池”的内存空间。该句柄包含对象实例数据和类型数据的特定地址信息。

  参考类型变量存储对象的句柄地址。当访问对象时,首先通过变量参考类型找到对象的句柄,然后根据句柄中对象的地址找到对象。

  参考类型变量直接存储对象的地址,因此不需要手柄池,并且可以通过参考直接访问对象。对象的类信息。

  应该注意的是,热点采用第二种方法,即访问对象的直接指针方法,仅需要一个地址操作,因此性能比句柄访问方法加倍。但是如上所述,它需要附加将信息类型存储在方法区域中的策略。