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 中存储的直接就是对象地址
  • 优点:减少一次指针定位的时间开销,速度更快。
目录
相关文章
|
7月前
|
存储 安全 Java
JavaSE高级篇:HotSpot虚拟机对象探秘
JavaSE高级篇:HotSpot虚拟机对象探秘
|
存储 缓存 算法
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
246 0
|
2月前
|
存储 缓存 Java
深度解密 Python 虚拟机的执行环境:栈帧对象
深度解密 Python 虚拟机的执行环境:栈帧对象
73 13
|
2月前
|
存储 Python
解密虚拟机的执行环境:栈帧对象
解密虚拟机的执行环境:栈帧对象
27 0
|
6月前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
74 3
|
7月前
|
存储 缓存 安全
深入浅出JVM(三)之HotSpot虚拟机类加载机制
深入浅出JVM(三)之HotSpot虚拟机类加载机制
|
7月前
|
存储 缓存 算法
深入浅出JVM(一)之Hotspot虚拟机中的对象
深入浅出JVM(一)之Hotspot虚拟机中的对象
|
7月前
|
存储 缓存 算法
HotSpot 虚拟机对象存储逻辑
HotSpot 虚拟机对象存储逻辑
64 0
|
Ubuntu Java Unix
《HotSpot实战》—— 1.2 动手编译虚拟机
由于开发环境各不相同,每个人遇到的问题可能都不尽相同;即使遇到相同的问题,在不同的平台上解决的方式可能也有所不同。当然,对于相同的问题,也会有多种办法解决。限于篇幅,在这里不能对所有错误信息和解决办法都列举出来。
5268 1
|
1月前
|
Ubuntu 网络安全 虚拟化
VMware虚拟机ping不通原因排查及分析
下面以 VMware 虚拟机为例进行介绍。
599 3