2010-11-25 42 views
3

我是一個主要的.NET開發人員,我做了很多基礎性工作與像ESX和Hyper-V的科技股。我覺得很奇怪的是,JVM有VM在它(我一直在一個ESX服務器上坐在形式的虛擬機的思考)。JVM是VM的一種形式嗎?

我是否正確地說JVM是位於操作系統和應用程序之間的特定環中的實際VM(而不是硬件和操作系統之間)?

感謝

回答

4

它以同樣的方式在虛擬機的CLR(.NET的一部分)是一個虛擬機。這是不太一樣的Hyper-V的虛擬機類型......雖然Hyper-V的虛擬化常見的硬件,使得大部分代碼「認爲」它確實直接正常的計算機上運行運行一個完整的操作系統。

JVM或CLR是在稍有不同:

  • 集被虛擬化的指令已被專門設計被虛擬化。雖然有一些「本地Java字節碼」硬件,但這遠遠沒有運行Java的正常方式。通常字節碼和IL是JIT編譯的 - 垃圾收集器是虛擬機器的一部分,當然在Hyper-V中並不是這樣。
  • 虛擬機不運行操作系統本身 - 它運行操作系統,它知道直接和文件系統訪問等使用

這兩種類型的「虛擬機」的運行在虛擬環境中的代碼,但兩者的主要關注點有很大的不同。

+0

您的第一段讓我想起了前幾天我讀到的一個問題,即管理程序如何誘使操作系統認爲大多數代碼是直接運行的(以防止操作系統修改)。好答案。實際上,當我說「一個實際的VM坐在操作系統和應用程序之間的特定環境中」時,我的意思是JVM在OS上運行。這可能是它如何知道它直接我猜... – dotnetdev 2010-11-25 21:49:06

0

是的,JVM獲取字節碼並執行它,並且它能夠對應用程序實施安全限制。

3

的Java語言(.NET,和Python,和鸚鵡......)虛擬機是一個「模擬計算機。」它具有在VM運行的操作系統上相同的指令和行爲,這使得「跨平臺」方面可以工作。虛擬機本身是特定於平臺的,當然,這是爲了消除客戶端代碼的細節。

所以,一切回到Infocom Z-Machine和Knuth的MIX虛擬機實際上都是「虛擬機」。

1

雖然ESX和Hyper-V模擬計算機系統,但JVM僅在受支持的平臺上提供Java字節碼的執行(和優化)。