2009-12-30 99 views

回答

11

JVM與VirtualBox或VMWare虛擬機的意義不同。它是一個實現Java字節碼的「機器」,而不是實際硬件的虛擬化版本。

術語的最先進的「虛擬機」是創造了一個很長的時間以前對於以下情形:

  1. 彌補了一臺電腦,像Knuth的MIX。
  2. 編寫一個實現化妝計算機的計算機程序。
  3. 運行程序

當這個虛擬機上運行,​​這是一個完全的普通程序,在用戶模式下運行完全。它不需要硬件或操作系統的特殊幫助就能很好地工作。 JVM尤其如此,因爲Java字節碼不涉及低級硬件I/O或其他難以模擬的事物。從歷史上看,(選擇特定實例)IBM發明了VM/370。 VM/370使用術語「虛擬機」的另一種含義。在此後的意義上,硬件和操作系統協作以允許單個物理機器託管多個(或多或少)相同的虛擬實例,其中整個操作系統的多個副本被寫入,就好像它們正在運行一樣在更多或更少的裸機上。後來,X86的功能設計便於實現。

所以,是的,任何虛擬機都在使用一些物理硬件,除非你在桌子周圍傳遞紙張(速度約翰·塞爾)。但是當虛擬機與運行的機器不相似時,則不需要操作系統和硬件的特殊幫助,也不需要像VM/370或VMware那樣複雜的任何東西。

+0

但是我們可以從Java訪問硬件,所以JVM必須虛擬化硬件 – Xinus 2009-12-30 03:05:18

+3

不,JVM能夠訪問硬件,因爲JVM運行的操作系統允許它。 – paxdiablo 2009-12-30 03:11:38

+0

紙和表是硬件= P – naiad 2011-06-07 16:54:29

1

JVM是一個虛擬機,但它不需要操作系統的任何額外支持。它不是爲特定的CPU虛擬化指令,而是執行java字節碼。

1

JVM是運行Java的虛擬機,換句話說,它模擬了一臺能夠運行java的機器。這是一個令人困惑的名稱選擇,但它來自「機器」的一般含義,而不是來自更常見的虛擬機的含義。

JVM與常規VM一樣模擬指令的執行,但在JVM中,被仿真的指令是Java指令,而在VM的情況下,它們是硬件指令,將由OS執行運行在相同的硬件上。

1

是的,JVM不會訪問硬件,但這就是您安裝MAC或WINDOWS JVM的原因,因爲這些指令由JVM翻譯並根據JVM的安裝進行操作,例如,在mac上打開文件對話框打開mac對話框和windows JVM打開窗口對話框。

所以它沒有被系統虛擬化,但字節碼正在被您安裝的JVM虛擬化。它基本上就像一個應用程序,它讀取一些東西(字節碼)並執行某些操作(訪問硬件或其他東西)。

2

如果硬件支持虛擬化是必須的,...

讓我阻止你在那裏:-)

有一個在JVM(軟件虛擬化)之間的概念差別和(例如)VMWare VM(硬件輔助虛擬化)。

JVM(以及其他基於軟件的VMM,例如允許在Solaris硬件上模擬x86的應用程序 - 我認爲Bochs和可能的DosBox屬於此類別)與任何其他應用程序一樣運行,使用操作系統獲得訪問硬件或純粹用軟件模擬自己的硬件。

VMWare和爲速度優化的其他VMM依賴於硬件支持。換句話說,他們在硬件上運行,就好像他們可以完全訪問硬件一樣,只有當他們試圖做某些事情時,他們不應該讓操作系統捕獲這些企圖並僞造它。

這就是爲什麼VMWare比純軟件模擬器運行速度快得多的原因。這是因爲在絕大多數時候,它實際上是在真正的硬件上運行的。

0

應該指出的是,沒有任何規定JVM確實需要而不是(必須)具有硬件虛擬化訪問權限。有一些值得注意的例外,但回答的海報暗示了其中的幾個CP,它們本身就運行Java字節碼。也許有一天,一個Java字節碼HAL或TIMI將常見於將JVM放入與正式硬件虛擬化相同的類中?

相關問題