深入java虛擬機(jī)
- 作者:新網(wǎng)
- 來(lái)源:新網(wǎng)
- 瀏覽:100
- 2018-05-07 11:23:45
java虛擬機(jī)實(shí)例的生命周期:java虛擬機(jī)的職責(zé)是負(fù)責(zé)運(yùn)行一個(gè)java程序。當(dāng)啟動(dòng)一個(gè)java虛擬機(jī)時(shí),一個(gè)虛擬機(jī)實(shí)例便誕生了。當(dāng)該程序關(guān)閉退出時(shí),這個(gè)虛擬機(jī)實(shí)例也隨之退出。
java虛擬機(jī)實(shí)例的生命周期:java虛擬機(jī)的職責(zé)是負(fù)責(zé)運(yùn)行一個(gè)java程序。當(dāng)啟動(dòng)一個(gè)java虛擬機(jī)時(shí),一個(gè)虛擬機(jī)實(shí)例便誕生了。當(dāng)該程序關(guān)閉退出時(shí),這個(gè)虛擬機(jī)實(shí)例也隨之退出。
<
div> 如果一臺(tái)
主機(jī)上同時(shí)運(yùn)行3個(gè)java程序,就會(huì)產(chǎn)生3個(gè)java虛擬機(jī)實(shí)例。
java虛擬機(jī)通過調(diào)用某個(gè)初始類的main方法來(lái)運(yùn)行一個(gè)java程序。
Java代碼
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
java虛擬機(jī)規(guī)范中,一個(gè)虛擬機(jī)的行為是分別按照子系統(tǒng),內(nèi)存區(qū),數(shù)據(jù)類型以及指令這幾部份組成的。
當(dāng)java虛擬機(jī)運(yùn)行一個(gè)程序時(shí),它需要內(nèi)存來(lái)存儲(chǔ)許多東西,例如,字節(jié)碼,從已裝載的class文件中得到的其他信息,程序創(chuàng)建的對(duì)象,傳遞給方法的參數(shù),返回值,局部變量,以及運(yùn)行的中間結(jié)果。i每個(gè)java虛擬機(jī)都有一個(gè)方法區(qū)和一個(gè)堆,它們是由所有線程共享的。
當(dāng)每個(gè)新線程被創(chuàng)建時(shí),它都會(huì)得到自己的pc寄存器以及一個(gè)java棧。如果線程正在執(zhí)行的是一個(gè)java方法,那么寄存器大的值總是指向下下一條將被執(zhí)行的指令,而它的java??偸谴鎯?chǔ)該線程中的java方法調(diào)用的狀態(tài)--包括它的局部變量,被調(diào)用時(shí)傳遞過來(lái)的參數(shù),它的返回值,以及運(yùn)算的中間結(jié)果。
java棧是由許多棧幀組成,一個(gè)棧幀包括一個(gè)java調(diào)用的狀態(tài)。當(dāng)線程調(diào)用一個(gè)java方法時(shí),虛擬機(jī)壓入一個(gè)新的棧幀到該線程的java棧中;當(dāng)該方法返回時(shí),這個(gè)棧幀被從java棧中彈出并拋棄。
java虛擬機(jī)沒有寄存器,其指令使用java棧來(lái)存儲(chǔ)中間數(shù)據(jù)。這樣設(shè)計(jì)是為了使得java虛擬機(jī)的指令集盡量緊湊。
數(shù)據(jù)類型
java虛擬機(jī)的數(shù)據(jù)類型包括
基本類型:數(shù)值類型,boolean,returnAddress
引用類型:類類型,接口類型,數(shù)組類型
java虛擬機(jī)為每個(gè)載入的類型存儲(chǔ)以下信息,
該類型的基本信息、該類型的常量池、字段類型、方法信息?!〕顺A恐獾乃蓄?靜態(tài))變量, 一個(gè)到類cla
ssloader的引用,一個(gè)到class類的引用。
以上就是小編今天介紹的全部?jī)?nèi)容。