java虛擬機實(shí)例的生命周期:
java虛擬機的職責是負責運行一個(gè)java程序。
當啟動(dòng)一個(gè)java虛擬機時(shí),一個(gè)虛擬機實(shí)例便誕生了。
當該程序關(guān)閉退出時(shí),這個(gè)虛擬機實(shí)例也隨之退出。
如果一臺主機上同時(shí)運行3個(gè)java程序,就會(huì )產(chǎn)生3個(gè)java虛擬機實(shí)例。
java虛擬機通過(guò)調用某個(gè)初始類(lèi)的main方法來(lái)運行一個(gè)java程序。
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}}java虛擬機規范中,一個(gè)虛擬機的行為是分別按照子系統,內存區,數據類(lèi)型以及指令這幾部份組成的。
當java虛擬機運行一個(gè)程序時(shí),它需要內存來(lái)存儲許多東西,例如,字節碼,從已裝載的class文件中得到的其他信息,程序創(chuàng )建的對象,傳遞給方法的參數,返回值,局部變量,以及運行的中間結果。i每個(gè)java虛擬機都有一個(gè)方法區和一個(gè)堆,它們是由所有線(xiàn)程共享的。
當每個(gè)新線(xiàn)程被創(chuàng )建時(shí),它都會(huì )得到自己的pc寄存器以及一個(gè)java棧。如果線(xiàn)程正在執行的是一個(gè)java方法,那么寄存器大的值總是指向下下一條將被執行的指令,而它的java??偸谴鎯υ摼€(xiàn)程中的java方法調用的狀態(tài)--包括它的局部變量,被調用時(shí)傳遞過(guò)來(lái)的參數,它的返回值,以及運算的中間結果。
java棧是由許多棧幀組成,一個(gè)棧幀包括一個(gè)java調用的狀態(tài)。當線(xiàn)程調用一個(gè)java方法時(shí),虛擬機壓入一個(gè)新的棧幀到該線(xiàn)程的java棧中;當該方法返回時(shí),這個(gè)棧幀被從java棧中彈出并拋棄。
java虛擬機沒(méi)有寄存器,其指令使用java棧來(lái)存儲中間數據。這樣設計是為了使得java虛擬機的指令集盡量緊湊。
數據類(lèi)型
java虛擬機的數據類(lèi)型包括
基本類(lèi)型:數值類(lèi)型,boolean,returnAddress
引用類(lèi)型:類(lèi)類(lèi)型,接口類(lèi)型,數組類(lèi)型
java虛擬機為每個(gè)載入的類(lèi)型存儲以下信息,
該類(lèi)型的基本信息
該類(lèi)型的常量池
字段類(lèi)型
方法信息
除了常量之外的所有類(lèi)(靜態(tài))變量
一個(gè)到類(lèi)classloader的引用
一個(gè)到class類(lèi)的引用
聯(lián)系客服