美文网首页
java对象头实现

java对象头实现

作者: SinX竟然被占用了 | 来源:发表于2017-09-26 10:18 被阅读0次

转载:http://www.jianshu.com/p/9c19eb0ea4d8

HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。

对象头

对象头包括两部分:Mark Word 和 类型指针。

Mark Word

Mark Word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,占用内存大小与虚拟机位长一致。

类型指针

类型指针指向对象的类元数据,虚拟机通过这个指针确定该对象是哪个类的实例。

markOop实现

HotSpot通过markOop类型实现Mark Word,具体实现位于markOop.hpp
文件中。由于对象需要存储的运行时数据很多,考虑到虚拟机的内存使用,markOop被设计成一个非固定的数据结构,以便在极小的空间存储尽量多的数据,根据对象的状态复用自己的存储空间,32位虚拟机的markOop实现如下:


hash: 保存对象的哈希码age: 保存对象的分代年龄biased_lock: 偏向锁标识位lock: 锁状态标识位JavaThread* 保存持有偏向锁的线程IDepoch: 保存偏向时间戳

markOop中不同的锁标识位,代表着不同的锁状态:


不同的锁状态,存储着不同的数据:


markOop中提供了大量方法用于查看当前对象头的状态,以及更新对象头的数据,为synchronized锁的实现提供了基础。

相关文章

  • JVM对Synchronized关键字的优化

    Java对象头和Monitor是实现synchronized关键字的基础。 对象头 对象头在内存中的布局: 对象头...

  • java对象头实现

    转载:http://www.jianshu.com/p/9c19eb0ea4d8 HotSpot虚拟机中,对象在内...

  • 锁在Java虚拟机中的实现和优化

    理解锁在Java虚拟机中的实现和优化之前,我们需要知道对象头和锁的关系。在Java虚拟机的实现中每个对象都有一个对...

  • Java锁的原理

    引子 上锁就是改变对象的对象头?什么是对象头?----Java对象的布局----Java对象由什么组成----对象...

  • 偏向锁、轻量锁、重量级锁

    synchronized的偏向锁、轻量级锁以及重量级锁是通过Java对象头实现的。博主在Java对象大小内幕浅析中...

  • Java Concurrent 偏向锁&轻量级锁&重量级锁

    对象头 再说偏向锁之前先来看一下Java 对象头,Java 对象是分为 对象头、实例数据、对齐填充三部分,创建一个...

  • 【java基础】JAVA对象头相关

    一、java对象在内存中的结构 对象头实例数据对齐填充字节 二、 java对象头的结构 Mark Word(存放h...

  • 【JAVA】synchronized

    synchronized锁的底层实现 monitor对象存在于每个Java对象的对象头中,当线程持有这个monit...

  • 总结-3-java

    Java: 1、java对象头: 如果对象是数组类型,则虚拟机用3个Word(字宽)存储对象头。 如果对象是非数组...

  • JVM源码分析之Java对象头实现

    ​“365篇原创计划”第十一篇。 今天呢!灯塔君跟大家讲: JVM源码分析之Java对象头实现 HotSpot虚拟...

网友评论

      本文标题:java对象头实现

      本文链接:https://www.haomeiwen.com/subject/xdxsextx.html