HotSpot虚拟机对象探秘

简介: HotSpot虚拟机对象探秘

1. 对象的创建

对象创建的步骤

我们知道在Java中,创建一个对象仅仅需要一个new关键字,而在虚拟机中的创建优势怎样的呢?

  1. 当虚拟机遇到一条字节码new指令时,首先检查这条指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经加载,如果没有,必须先执行类加载过程。
  2. 分配内存
  • 指针碰撞 相关收集器:Serial、ParNew
  • 空闲列表 相关收集器:CMS
  1. 设置对象头信息
  2. 对象初始化

2. 对象的内存布局

  1. 对象头
  1. 运行时数据、哈希码(25 bit)、GC分代年龄(4 bit)、锁状态标志(2 bit)、线程持有的锁、偏向县城ID、偏向时间戳等。 (其中1 bit 固定为0)
  2. 类型指针(虚拟机通过这个指针确定该对象是哪个类的实例)
  1. 实例数据
    存放对象的有效信息,即我们代码里定义的各种字段。
  2. 对齐填充
    由于HotSpot虚拟机的自动内存管理系统要求任何对象的大小都必须8字节的整数倍,对象头部分已经是了,所以如果实例数据部分没有对齐的话,就需要对齐填充来补全。

3. 对象的访问定位

  1. 句柄访问
    reference 中存储的是对象的句柄地址,句柄地址中包含了对象实例数据与类型数据的地址信息
  • 优点:对象被移动时只会改变句柄中的实例数据指针,而reference本身不需要被修改。
  1. 直接访问(HotSpot的使用方式)
    reference 中存储的直接就是对象地址
  • 优点:减少一次指针定位的时间开销,速度更快。
目录
相关文章
|
6月前
|
存储 安全 Java
JavaSE高级篇:HotSpot虚拟机对象探秘
JavaSE高级篇:HotSpot虚拟机对象探秘
|
存储 缓存 算法
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
231 0
|
1月前
|
存储 缓存 Java
深度解密 Python 虚拟机的执行环境:栈帧对象
深度解密 Python 虚拟机的执行环境:栈帧对象
60 13
|
1月前
|
存储 Python
解密虚拟机的执行环境:栈帧对象
解密虚拟机的执行环境:栈帧对象
24 0
|
5月前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
71 3
|
6月前
|
存储 缓存 安全
深入浅出JVM(三)之HotSpot虚拟机类加载机制
深入浅出JVM(三)之HotSpot虚拟机类加载机制
|
6月前
|
存储 缓存 算法
深入浅出JVM(一)之Hotspot虚拟机中的对象
深入浅出JVM(一)之Hotspot虚拟机中的对象
|
6月前
|
存储 缓存 算法
HotSpot 虚拟机对象存储逻辑
HotSpot 虚拟机对象存储逻辑
60 0
|
Ubuntu Java Unix
《HotSpot实战》—— 1.2 动手编译虚拟机
由于开发环境各不相同,每个人遇到的问题可能都不尽相同;即使遇到相同的问题,在不同的平台上解决的方式可能也有所不同。当然,对于相同的问题,也会有多种办法解决。限于篇幅,在这里不能对所有错误信息和解决办法都列举出来。
5253 1
|
9天前
|
存储 SQL 数据库
虚拟化数据恢复—Vmware虚拟机误还原快照的数据恢复案例
虚拟化数据恢复环境: 一台虚拟机从物理机迁移到ESXI虚拟化平台,迁移完成后做了一个快照。虚拟机上运行了一个SQL Server数据库,记录了数年的数据。 ESXI虚拟化平台上有数十台虚拟机,EXSI虚拟化平台连接了一台EVA存储,所有的虚拟机都存放在EVA存储上。 虚拟化故障: 工组人员误操作将数年前迁移完成后做的快照还原了,也就意味着虚拟机状态还原到数年前,近几年数据都被删除了。 还原快照相当于删除数据,意味着部分存储空间会被释放。为了不让这部分释放的空间被重用,需要将连接到这台存储的所有虚拟机都关掉,需要将不能长时间宕机的虚拟机迁移到别的EXSI虚拟化平台上。
85 50

热门文章

最新文章