2013-10-26 48 views
4

我看到它一直被稱爲Java-Memory-Model,但我至今本能地認爲它適用於整個JVM生態系統。Java內存模型只是Java範圍的還是實際上JVM範圍的?

它僅適用於Java創建的應用程序之間,還是任何字節碼JVM兼容的可執行文件也享受其保證?

我查閱了「內存模型」的JVM規範,並且找不到太多內容。在另一方面,Java規範詳盡地介紹了,留給我的印象是內存模型就是Java具體..

感謝

+0

無法提供深入的技術解釋,但我的理解是,任何生成的字節碼都將在JVM中運行,所有這一切意味着參考抽象,類型安全性,沙箱... – Tarik

+0

公平地說,有參考文獻到整個JVM規範中的JLS(Java語言規範),所以您所說的可能就是這種情況。 –

+3

內存模型的大部分保證必須由JVM提供。但有些需要編譯器進行合作 - 有一些不能做的優化(例如重新排序操作)。但是任何針對JVM的理智語言都應該提供相當於Java內存模型的保證。 –

回答

4

技術上Java存儲模型只針對Java和指Java構造(同步,易變,最後...)。但是通過特定的字節碼指令將JMM的執行委託給JVM。

例如,同步塊轉換爲monitorenter/monitorexit字節碼指令。因此,任何JVM兼容語言在理論上都可以定義一個特定的內存模型(只要它可以基於JMM描述)併產生適當的字節碼。

實際上,有一些直接的等價,如斯卡拉的@volatile或Clojure的volatile-mutable