在講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平臺)的機器碼, 故不能以機器碼相稱,乾脆取名叫位元組碼,以示區分。這就是位元組碼的由來(我個人理解的)。