JVM 基礎概念

我妻禮彌發表於2019-05-03

在講JVM之前,首先讓我們瞭解一些概念。

什麼是虛擬機器?

字面意思就是一臺虛擬的計算機,這臺計算機的硬體都是通過軟體模擬出來的。用過 vmware 的人 應該就對 虛擬機器 這個概念很熟悉了。

什麼是機器碼?

機器碼,學名機器語言指令,有時也被稱為原生碼(Native Code),是CPU可直接執行的程式碼。

什麼是JVM 和 Java虛擬機器有什麼關係?

JVM

JVM 是一種虛擬機器規範,任何遵守JVM規範的虛擬機器都可以稱之為JVM虛擬機器。

注意上面說的是JVM虛擬機器而不是java虛擬機器,因為,jvm發展到現在已經不單單是java一家再用了,而是慢慢形成了一個生態。比如Jython、jRuby、Scala、 Groovy、 Clojure 都在使用jvm虛擬機器。

Java虛擬機器

我們平常使用的Oracal JDK中的 java虛擬機器,名字叫做 HotSpot,它是JVM 的一個實現。

關係

JVM 和 Java虛擬機器 是規範與實現的關係

JVM虛擬機器與普通計算機有何不同?

JVM虛擬機器

上面講到

  • JVM 是一種虛擬機器規範
  • JVM虛擬機器是遵守了 JVM規範的虛擬機器

不同之處

JVM虛擬機器和普通計算機的不同之處在於

  • jvm虛擬機器的 機器碼 是 .class位元組碼(想想這句話是什麼意思。)

jvm實體機

既然有jvm虛擬機器,那對應的也有 “jvm實體機”

jvm實體機是一組實現了jvm規範的硬體,它可以直接執行.class位元組碼,並且效率極快! 因為在jvm實體機中.class位元組碼字不需要再被轉換成機器碼在執行,此時它就是機器碼。

什麼是.class位元組碼?

可以簡單理解為

  • jvm平臺(jvm虛擬機器和jvm實體機) 中,.class位元組碼就是機器碼。
  • 在非jvm平臺中,由於.class位元組碼是另外一個平臺(jvm平臺)的機器碼, 故不能以機器碼相稱,乾脆取名叫位元組碼,以示區分。這就是位元組碼的由來(我個人理解的)。

相關文章