JVM基本上模擬了Java程序的CPU。正如CPU在硬件上本地執行組裝好的操作碼,JVM執行Java操作碼,但嚴格執行軟件。
這究竟意味着什麼?是字節碼是ISA的JVM和JVM 輪流支持處理器的ISA。
ISA(指令集架構)指定了適用於編寫直接在CPU上運行的低級軟件的整套規程和技術。它包含一組操作碼,它們是不可歸屬的直接CPU命令。 JVM識別它自己的一組字節碼(即8位操作碼),它們指示JVM執行解釋器原語指令。所以,是的,字節碼規範構成了JVM的ISA的一部分。
JVM利用其自己的內存 逐個遍歷執行它們的操作碼列表來模擬硬件組件(例如堆棧,寄存器,主存儲器)並使用基本算術和邏輯操作來模擬ALU。這些模擬組件也構成了JVM的ISA。這是任何口譯員的基本結構。但是,爲了改善Java應用程序的運行時間,JVM將「熱點」編譯爲機器特定的代碼以獲得最佳性能。熱點是頻繁運行的代碼的一部分。這就是所謂的「即時」編譯,可以在程序執行時完成。這種技術使Java的性能更接近於編譯語言的性能。 JIT也在.NET框架中使用。
每個操作系統都有自己的JVM實現,這也可能因設備的ISA而異。例如,您可能有一個爲Linux-Arm,Linux-x86或Windows-x86編寫的JVM。 JVM本身可以用像C這樣的獨立於平臺的語言(類似於C語言)編寫,但其JIT編譯器必須支持編譯到設備的指令集。
+1選擇圖。 –
我不會在JVM組件下面放置「Java API」,因爲大多數Java API都是用Java實現的,並且與應用程序代碼通過相同的鏈。 – Holger