Java对象头及Monitor
2022/3/7 20:15:50
本文主要是介绍Java对象头及Monitor,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java 对象头
以32位虚拟机为例
普通对象:Object Header(64bits)
Mark Word(32bits) Klass Word(32bits)
数组对象:Object Header(96bits)
Mark Word(32bits) Klass Word(32bits)array length(32bits)
MarkWord结构为:
Mark Word(32bits) | State |
---|---|
hashcode:25 | age:4 | biased_lock:0 | 01 | Normal |
thread:23 | epoch:2 | age:4 | biased_lock:1 | 01 | Biased |
ptr_to_lock_record:30 | 00 | Lightweight Locked |
ptr_to_heavyweight_monitor:30 | 10 | Heavyweight Locked |
| 11 | marked for GC |
Mark Word(64bits) | State |
---|---|
unused:25 | hashcode:31 | unused:1 | age:4 | biased_lock:0 | 01 | Normal |
thread:54 | epoch:2 | unused:1 | age:4 | biased_lock:1 | 01 | Biased |
ptr_to_lock_record:62 | 00 | Lightweight Locked |
ptr_to_heavyweight_monitor:62 | 10 | Heavyweight Locked |
| 11 | marked for GC |
epoch 批量重定向,批量撤销偏向锁时用的。
当撤销偏向锁阈值超过20次后,会进行批量重偏向。
当撤销偏向锁阈值超过40次后,整个类的所有对象都会变为不可偏向的,新建的对象也是不可偏向的。
hashcode 默认为0 调用了才会赋值
object.hashcode() 会撤销这个对象的偏向锁
当有其他线程使用偏向锁时,会将偏向锁升级为轻量级锁
wait()/notify() 只有重量级锁才有
Monitor
Monitor 被翻译为监视器或管程
每个Java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向Monitor 对象的指针
Monitor结构(操作系统):Owner,EntryList,WaitSet
monitorenter 将lock对象MarkWord置为Monitor指针
monitorexit 将lock对象MarkWord重置,唤醒EntryList
这篇关于Java对象头及Monitor的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?