首页 > 解决方案 > JVM(热点)中的“监视器”是什么,一个特定的对象?

问题描述

Java Language Spec, Section 17.1: Synchronization中,它说

Java 中的每个对象都与一个监视器相关联,线程可以锁定或解锁监视器。

第 17.2 节:

每个对象除了有一个关联的监视器之外,还有一个关联的等待集。等待集是一组线程。

首次创建对象时,其等待集为空。将线程添加到等待集中和从等待集中删除线程的基本操作是原子的。等待集仅通过方法Object.waitObject.notify和进行操作Object.notifyAll

这里的一个问题是,什么是monitor,似乎它是一个包含等待集的对象?

我看过一个类似的问题What's a monitor in Java? 在stackoverflow上,但答案并不那么清楚。

监视器是控制对对象的并发访问的机制。

监视器是一个同时拥有锁和等待集的实体。在 Java 中,任何对象都可以用作监视器。

我获得了有关Hotspot 运行时概述的更多信息

每个对象的同步状态被编码在the so-called mark wordVM 对象表示的第一个字 ( ) 中。对于几个状态,标记字被多路复用以指向额外的同步元数据。( As an aside, in addition, the mark word is also multiplexed to contain GC age data, and the object's identity hashCode value.) 状态是:

我猜如果 amonitor是一个objectmonitor结构?但objectmonitor一开始不创建,仅在由于争用而使用重量级锁时使用。

标签: javamultithreadingjvm-hotspot

解决方案


监视器是一个概念,您可以在其上执行某些操作。任何实现监视器概念的抽象操作的东西都是一个很好的实现。

该概念在 HotSpot 中的标记词以及您引用的关于标记词的文本中描述的所有内容中实现。它不是一个单一的数据结构。


推荐阅读