Java語言比較特殊,由Java語言編寫的程序需要編譯步驟,但這個編譯步驟並不會生成特定平臺的機器碼,而是生成一種與平臺無關的字節碼(也就是*.class文件)。當然,這種字節碼不是可執行性的,必須使用Java解釋器來解釋執行。因此可以認爲:Java語言既是編譯型語言,也是解釋型語言。或者說,Java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。Java程序的執行過程必須經過先編譯,後解釋兩個步驟。----《瘋狂java講義》
如圖,Java語言是跨平臺語言,每個平臺有不同的JVM(Java虛擬機),JVM的作用是將編譯後的字節碼文件(*.class文件)解釋成特定平臺的機器執行碼。
oracle公司爲了實現Java程序平臺無關性,制定JVM的統一規範標準:
1. 指令器
2. 寄存器
3. 類文件格式
4. 棧
5. 垃圾回收堆
6. 存儲區