2014-03-02 40 views
0

我瞭解到:「每個對象都有與之相關的固有鎖定。我也瞭解到,在Linux上,JVM內部使用POSIX api來實現多線程功能。Linux JVM上對象的內部鎖定

JVM用於爲類的每個對象實例提供(創建)內部鎖的POSIX api的名稱是什麼?

+2

爲什麼?你想知道如何在非JVM語言/運行時執行此操作嗎?簡單的好奇心?意向知識將有助於指導一個答案。 –

+2

我問「爲什麼」的原因是JVM的實現非常複雜,比爲大多數其他目的而構建的東西要複雜得多。它不是POSIX調用的簡單包裝。 –

回答

2

JVM用於實現​​的鎖不是操作系統鎖,而是在JVM內部實現的。

這是爲了速度的原因,以及他們鎖定了不同的東西。操作系統對Java對象沒有特別的理解(與文件,內存等相對),所以JVM有專門爲此設計的鎖定機制。

我們付出了很多努力,使其變得非常快速。

+0

我瞭解到互斥鎖(pthread_mutex_t)是使用原子機器語言操作(在所有線程都可見的內存位​​置上執行的)執行的,並且只有在鎖爭用的情況下才需要系統調用。所以我想知道,當我們說同步獲取類的實例的內部鎖定時,jvm在做什麼。 – overexchange

+0

我在使用通知過程的java中看到Object.wait()/ Object.notify()的相同目的,因爲pthread_cond_wait()pthread_cond_signal()也運行在相同的通知構思上。 – overexchange

+0

實際的實現取決於JVM設計者,並且隨着時間的推移在Oracle JVM中發生了變化,因爲找到了更快的方法。你可以看看openjdk中的熱點來源,看看它是如何完成的。更簡單的源可能是jamvm,它是一個非常小但完整的JVM –