java虛擬機(jī)可能是下面三個(gè)中的一個(gè)
1:抽象規(guī)范
2:一個(gè)具體實(shí)現(xiàn)
3:一個(gè)虛擬機(jī)實(shí)例
java虛擬機(jī)的生命周期
java虛擬機(jī)的天職就是:運(yùn)行一個(gè)java程序.當(dāng)一個(gè)java程序運(yùn)行開始運(yùn)行時(shí),一個(gè)虛擬機(jī)實(shí)例就產(chǎn)生了.當(dāng)一個(gè)計(jì)算機(jī)上同時(shí)運(yùn)行三個(gè)java程序.則將產(chǎn)生三個(gè)java虛擬機(jī)實(shí)例.每個(gè)程序運(yùn)行在自己的虛擬機(jī)里面,不會(huì)干擾.當(dāng)程序運(yùn)行完畢時(shí),虛擬機(jī)將自動(dòng)退出.
java虛擬機(jī)里面有兩種線程,守護(hù)線程和非守護(hù)線程.守護(hù)線程是說java虛擬機(jī)自己的線程,如垃圾收集線程.而非守護(hù)線程則是java中運(yùn)行的程序線程.當(dāng)非守護(hù)線程都運(yùn)行完了.java虛擬機(jī)將退出.
一個(gè)java虛擬機(jī)主要包括了:類轉(zhuǎn)載子系統(tǒng),運(yùn)行時(shí)數(shù)據(jù)區(qū),執(zhí)行引擎,內(nèi)存區(qū)等等.
運(yùn)行時(shí)數(shù)據(jù)區(qū)------主要是:1 堆 2? 方法區(qū) 3 java棧
堆和方法區(qū)對(duì)虛擬機(jī)實(shí)例中所有的對(duì)象都是共享的.而java棧區(qū),是對(duì)每個(gè)線程都是獨(dú)立的. 當(dāng)一個(gè)class被載入到 classloader中時(shí),會(huì)解析它的類型信息.把這些類型信息放到方法區(qū),而把程序中運(yùn)行的對(duì)象,放到堆區(qū).當(dāng)一個(gè)新線程被創(chuàng)建,就分配一個(gè)新的java棧.java棧中保存的,是方法中的一些變量,狀態(tài).java棧是由很多的java棧幀組成的.一個(gè)棧幀包含了一個(gè)方法運(yùn)行的狀態(tài).當(dāng)一個(gè)方法被執(zhí)行的時(shí)候,就壓入一個(gè)新的java棧幀到j(luò)ava棧中,方法返回的時(shí)候,就把棧幀彈出來,拋棄掉.
方法區(qū)
在java虛擬機(jī)中,被裝載的類的類型信息和類的靜態(tài)變量被存儲(chǔ)在方法區(qū)這樣的內(nèi)存里面.java程序運(yùn)行時(shí),會(huì)查找這些個(gè)信息.方法區(qū)的大小,是動(dòng)態(tài)的.也可以不是連續(xù)的.可自由在堆中分配.也可以由用戶或者程序員指定.方法區(qū)可被垃圾收集.
方法區(qū)可以保存以下信息
這個(gè)類型的全限定名
直接超類的全限定名
是類類型還是接口
類型的訪問修飾符
任何直接超類接口的全限定名的有序列表.
該類型的常量池
字段信息 類中聲明的每個(gè)字段及其順序 如字段名,類型.修飾符號(hào).
方法信息:如方法名,返回類型.參數(shù)表列.修飾符號(hào).字節(jié)碼.操作數(shù)棧和棧幀中局部變量區(qū)大小等等
類靜態(tài)變量
一個(gè)到類classloader的引用
一個(gè)到class類的引用
堆
用來存儲(chǔ)運(yùn)行時(shí)的對(duì)象實(shí)例
java棧
每啟動(dòng)一個(gè)新的線程.就會(huì)分配到一個(gè)java棧.java棧以幀為單位保存線程的運(yùn)行狀態(tài).它有兩種操作.入棧,出棧.
當(dāng)一個(gè)方法被調(diào)用時(shí),入棧,當(dāng)一個(gè)方法返回時(shí),出棧,或者當(dāng)方法出現(xiàn)異常.也出棧.
棧幀
組成部分 局部變量區(qū),操作數(shù)棧,幀數(shù)據(jù)區(qū).
posted on 2006-04-05 18:25
dodoma 閱讀(376)
評(píng)論(1) 編輯 收藏 所屬分類:
java基礎(chǔ)