Java Linux JVM上对象的内在锁

Java Linux JVM上对象的内在锁,java,jvm,posix-api,Java,Jvm,Posix Api,我了解到:“每个对象都有一个与之关联的内在锁。” 我还了解到,在linux上,JVM在内部使用POSIXAPI实现多线程功能 JVM用来为类的每个对象实例提供(创建)内在锁的POSIX api的名称是什么?JVM用来实现同步的锁不是操作系统锁,而是在JVM内部实现的 这是出于速度的原因,同时它们锁定了一些不同的东西。操作系统对Java对象(相对于文件、内存等)没有特殊的理解,因此JVM有自己专门为此设计的锁定机制 为了快速实现这一点,我们付出了很多努力。为什么?您想知道如何在非JVM语言/运行时

我了解到:“每个对象都有一个与之关联的内在锁。”

我还了解到,在linux上,JVM在内部使用POSIXAPI实现多线程功能


JVM用来为类的每个对象实例提供(创建)内在锁的POSIX api的名称是什么?

JVM用来实现
同步的
锁不是操作系统锁,而是在JVM内部实现的

这是出于速度的原因,同时它们锁定了一些不同的东西。操作系统对Java对象(相对于文件、内存等)没有特殊的理解,因此JVM有自己专门为此设计的锁定机制


为了快速实现这一点,我们付出了很多努力。

为什么?您想知道如何在非JVM语言/运行时中做到这一点吗?单纯的好奇心?了解意图将有助于指导答案。我之所以问“为什么”,是因为JVM的实现比为大多数其他目的构建的东西要复杂得多。它不是POSIX调用的薄包装器。我了解到互斥(pthread_mutex_t)是使用原子机器语言操作(在所有线程可见的内存位置上执行)实现的,并且仅在锁冲突的情况下才需要系统调用。所以我想知道,当我们说synchronized来获取类实例的内在锁时,jvm在做什么。我看到了在使用通知过程的java中Object.wait()/Object.notify()的相同用途,因为pthread_cond_wait()pthread_cond_signal()实际的实现取决于JVM设计人员,并且随着时间的推移,随着更快的方法的发现,在oracle JVM中已经发生了变化。您可以查看openjdk中的热点源代码,了解它是如何实现的。一组更简单的源代码可能是jamvm,它是一个非常小但完整的JVM