趣文网 > 作文大全

Java知识进阶

2020-12-01 20:15:01
相关推荐

一、 Java 对象模型结构

注:本文以HotSpot虚拟机为例

1. Hotspot 虚拟机内部有两组类描述Java的类和对象。

2. OOP(ordinary object pointer)描述对象实例信息。

3. Klass 用来描述Java类,是虚拟机内部Java类型结构相对于的。

1.1 对象头 Header

对象头三部分构成 Mark Word 标记,Klass Word ,j及数组长度

1.1.1 Mark Word 标记

主要作用是标识出当前对象的线程锁状态,GC状态标识。

1.1.1.1 锁标识 和 偏向锁标识

由于正常锁和偏向锁的锁标识都是 01,没办法区分,这里引入一位的偏向锁标识位。

1.1.1.2 age

表示对象被GC的次数,当该次数到达阈值的时候,对象就会转移到老年代。

并行GC次数,默认15次。

并发GC次数,默认6次。

age标识位,只有4位,最大能表示的数字:15 这也是 -XX:MaxTenuringThreshold 这个参数最大只能设置15的原因。

1.1.1.3 unused 1

保留位数,没有使用

1.1.1.4 identity_hashcode

对象的hashcode,运行期间调用System.identityHashCode()来计算,延迟计算,并把结果赋值到这里。

当对象加锁后,计算的结果31位不够表示,在偏向锁,轻量锁,重量锁,hashcode会被转移到Monitor中。

1.1.1.5 thread

偏向锁的线程ID, 当某个线程持有对象的时候,对象这里就会被置为该线程的ID。 在后面的操作中,就无需再进行尝试获取锁的动作。

偏向锁是一种乐观锁。

1.1.1.6 epoch

偏向锁在CAS锁操作过程中,偏向性标识,表示对象更偏向哪个锁。

1.1.1.7 ptr_to_lock_record

轻量级锁状态下,指向栈中锁记录的指针。当锁获取是无竞争的时,JVM使用原子操作而不是OS互斥。这种技术称为轻量级锁定。在轻量级锁定的情况下,JVM通过CAS操作在对象的标题字中设置指向锁记录的指针。

1.1.1.8 ptr_to_heavyweight_monitor

重量级锁状态下,指向对象监视器Monitor的指针。如果两个不同的线程同时在同一个对象上竞争,则必须将轻量级锁定升级到Monitor以管理等待的线程。在重量级锁定的情况下,JVM在对象的ptr_to_heavyweight_monitor设置指向Monitor的指针。

阅读剩余内容
网友评论
显示评论内容(2) 收起评论内容
  1. 2021-11-24 07:50香茶奶昔[西藏网友]IP:3406566163
    Java知识进阶让我感觉自己编程能力更了个台阶推荐给行们!
    顶5踩0
  2. 2020-09-16 10:57蜜柑の幸福[四川省网友]IP:3406113964
    Java知识进阶是我工作中必备技能学习感觉收获很多!
    顶0踩0
相关内容
延伸阅读
小编推荐

大家都在看

初中作文600 英语二作文 作文 选择 什么的什么作文 路上作文 我作文300字 作文《选择》 我的作文600字 作文 狗 作文小猫 回忆的作文 记忆作文 《遇见》作文 作文树 作文奋斗 游戏的作文 作业作文 文化的作文 假如 作文 假如 作文 假如 作文 公园的作文 250作文 作文小狗 让的作文 一起作文 《过年》作文 150作文 自然 作文 玩 作文