JAVA體系結(jié)構(gòu)-java虛擬機概述
最初,Sun公司為java體系定義了4個規(guī)范:
java語言;=》規(guī)范了源文件
class文件格式;
java API;
java 虛擬機;
編譯期,java編譯器(javac)將java源文件編譯成class文件;運行期用戶的class文件和java API的class文件在java虛擬機上協(xié)同工作。
java虛擬機最主要的2個作用是裝載class文件和執(zhí)行這些class文件所包含的字節(jié)碼(bytecode)。
這決定了java虛擬機的主要2個部件是:
類裝載器 class loader;
執(zhí)行引擎 execution engine;
顧名思義,類裝載器就是把用戶程序的class和java API里的class裝載到執(zhí)行引擎,但是它僅僅只選擇真正被用到的class進行裝載。
執(zhí)行引擎的任務(wù)則是執(zhí)行class文件中的字節(jié)碼。由于class文件格式都遵循一種規(guī)范,所以執(zhí)行引擎是可以有多種不同的方式來實現(xiàn)的。比如它可以是一個解釋器,讀一句字節(jié)碼,生成一句機器碼,然后執(zhí)行之,這是典型的解釋器行為; 它也可以在第一次執(zhí)行某個方法時,將該方法編譯成機器碼,并緩存起來,下次該方法再被調(diào)用時它直接執(zhí)行緩存的機器碼,這其實是編譯行為。所以必須記住,并不是所有的java虛擬機都是解釋器(interpreter)。
關(guān)于JNI(java native interface)
通過JNI,java允許你的程序調(diào)用任何其他語言寫的方法。然而這樣也將使你失去java平臺無關(guān)的優(yōu)勢。建議只用java實現(xiàn)方法或只調(diào)用java API提供的native方法。
最初,Sun公司為java體系定義了4個規(guī)范:
java語言;=》規(guī)范了源文件
class文件格式;
java API;
java 虛擬機;
編譯期,java編譯器(javac)將java源文件編譯成class文件;運行期用戶的class文件和java API的class文件在java虛擬機上協(xié)同工作。
java虛擬機最主要的2個作用是裝載class文件和執(zhí)行這些class文件所包含的字節(jié)碼(bytecode)。
這決定了java虛擬機的主要2個部件是:
類裝載器 class loader;
執(zhí)行引擎 execution engine;
顧名思義,類裝載器就是把用戶程序的class和java API里的class裝載到執(zhí)行引擎,但是它僅僅只選擇真正被用到的class進行裝載。
執(zhí)行引擎的任務(wù)則是執(zhí)行class文件中的字節(jié)碼。由于class文件格式都遵循一種規(guī)范,所以執(zhí)行引擎是可以有多種不同的方式來實現(xiàn)的。比如它可以是一個解釋器,讀一句字節(jié)碼,生成一句機器碼,然后執(zhí)行之,這是典型的解釋器行為; 它也可以在第一次執(zhí)行某個方法時,將該方法編譯成機器碼,并緩存起來,下次該方法再被調(diào)用時它直接執(zhí)行緩存的機器碼,這其實是編譯行為。所以必須記住,并不是所有的java虛擬機都是解釋器(
關(guān)于JNI(java native interface)
通過JNI,java允許你的程序調(diào)用任何其他語言寫的方法。然而這樣也將使你失去java平臺無關(guān)的優(yōu)勢。建議只用java實現(xiàn)方法或只調(diào)用java API提供的native方法。