[Java] Java虛擬機(jī)組成部分

每個Java程序都運(yùn)行于某個具體的Java虛擬機(jī)實(shí)現(xiàn)的實(shí)例上大审。
當(dāng)啟動一個Java程序時余掖,一個虛擬機(jī)實(shí)例就誕生了,當(dāng)該程序關(guān)閉退出替废,這個虛擬機(jī)實(shí)例就隨之消亡。如果同一臺計(jì)算機(jī)上同時運(yùn)行3個Java程序泊柬,將得到3個Java虛擬機(jī)實(shí)例椎镣。每個程序都運(yùn)行于它自己的Java虛擬機(jī)實(shí)例中

Java虛擬機(jī)實(shí)例通過調(diào)用某個初始類的main方法來運(yùn)行一個Java程序兽赁。這個main方法必須是public状答,static,接受String[]作為參數(shù)刀崖,返回void惊科。任何擁有這樣一個main方法的類都可以作為Java程序運(yùn)行的起點(diǎn)。

class Test{
    public static void main(String[] args){
        //
    }
}

告訴Java虛擬機(jī)要運(yùn)行的Java程序中初始類的名字后亮钦,整個程序?qū)乃膍ain方法開始執(zhí)行馆截。

java Test Hello world

args[0]="Hello"args[1]="world"
main方法是程序初始線程的起點(diǎn)蜂莉,任何其他線程都是由這個初始線程啟動的孙咪。

Java虛擬機(jī)內(nèi)部有兩種線程,非守護(hù)線程守護(hù)線程巡语。
從main開始的初始線程是非守護(hù)線程翎蹈,只要還有任何非守護(hù)線程在運(yùn)行,這個Java程序就繼續(xù)運(yùn)行男公。當(dāng)程序中所有的非守護(hù)線程都終止時荤堪,虛擬機(jī)實(shí)例將自動退出合陵。
守護(hù)線程通常是由虛擬機(jī)自己使用,比如執(zhí)行垃圾收集任務(wù)的線程澄阳。Java程序也可以把它創(chuàng)建的任何線程標(biāo)記為守護(hù)線程拥知。

Java虛擬機(jī)體系結(jié)構(gòu)由4部分構(gòu)成:子系統(tǒng),內(nèi)存區(qū)碎赢,數(shù)據(jù)類型低剔,指令
每個Java虛擬機(jī)都有一個類裝載器子系統(tǒng)肮塞,它根據(jù)給定的全限定名來裝入類型襟齿。
每個Java虛擬機(jī)都有一個執(zhí)行引擎,它負(fù)責(zé)執(zhí)行那些包含在被裝載的方法中的指令枕赵。

某些運(yùn)行時數(shù)據(jù)是由程序中的所有線程共享的猜欺,還有一些則只能由一個線程擁有。
方法區(qū)拷窜,是由該虛擬機(jī)實(shí)例中所有線程共享的开皿。
虛擬機(jī)會從裝載的二進(jìn)制文件中解析類型信息放到方法區(qū)中,把該程序運(yùn)行時創(chuàng)建的對象都放到中篮昧。

每一個新線程被創(chuàng)建時赋荆,都將得到它自己的程序指針寄存器(PC)以及一個Java棧
如果線程正在執(zhí)行的是一個Java方法(非本地方法)懊昨,那么PC指向下一條被執(zhí)行的指令窄潭,而Java棧總是存儲該線程中Java方法的調(diào)用狀態(tài)。
本地方法調(diào)用狀態(tài)疚颊,則是以某種依賴于具體實(shí)現(xiàn)的方式存儲在本地方法棧中狈孔,也可能是寄存器或者其他特定實(shí)現(xiàn)相關(guān)的內(nèi)存區(qū)中信认。

Java棧由許多幀(frame)組成材义,幀中包含了Java方法的調(diào)用狀態(tài)。當(dāng)線程調(diào)用一個Java方法時嫁赏,虛擬機(jī)壓入一個新的frame到該線程的Java棧中其掂,該方法返回時,這個frame從Java棧中彈出并拋棄潦蝇。

Java虛擬機(jī)為每一個線程創(chuàng)建的內(nèi)存區(qū)是私有的款熬,任何線程都不能訪問其他線程的PC或Java棧。


線程1攘乒,2正在執(zhí)行Java方法贤牛,它們的PC分別指向下一條將被執(zhí)行的指令。
線程3正在執(zhí)行一個本地方法则酝,它的PC值是不確定的殉簸。

Java虛擬機(jī)中的數(shù)據(jù)類型分為兩種:基本類型引用類型
基本類型的變量持有原始值,而引用類型的變量持有引用值般卑。

關(guān)于基本類型boolean武鲁,當(dāng)編譯器把Java源碼編譯為字節(jié)碼時,會用int或byte表示boolean蝠检。在Java虛擬機(jī)中沐鼠,false是用整數(shù)0來表示的,所有非零整數(shù)都是true叹谁。涉及boolean的操作則會使用int饲梭,boolean數(shù)組是當(dāng)做byte數(shù)組訪問的。

基本類型returnAddress本慕,是只在虛擬機(jī)內(nèi)部使用的基本類型排拷,用來實(shí)現(xiàn)Java程序中的finally字句。

其他基本類型都是數(shù)值類型锅尘,包括整數(shù)類型监氢,浮點(diǎn)數(shù)類型。

注:
基本類型的數(shù)據(jù)不能看作對象藤违,存放在中浪腐。基本類型都對應(yīng)有包裝類顿乒,包裝類就是對象了议街,分配在中,棧中保存的是堆內(nèi)對象的引用璧榄。引入包裝類的目的是為了讓這些數(shù)據(jù)具有對象性質(zhì)特漩,可以調(diào)用對象的方法

引用類型有3種:類類型骨杂,接口類型涂身,數(shù)組類型,還有一種特殊的引用值null搓蚪。

類裝載器子系統(tǒng)蛤售,負(fù)責(zé)查找并裝載類型。
Java虛擬機(jī)有兩種類裝載器:啟動類裝載器用戶自定義類裝載器妒潭。前者是Java虛擬機(jī)實(shí)現(xiàn)的一部分悴能,后者是一個普通的Java對象。
由不同的類裝載器裝載的類雳灾,會放在虛擬機(jī)內(nèi)部的不同命名空間中漠酿。

對于每一個被裝載的類型,Java虛擬機(jī)都會在內(nèi)存中為它創(chuàng)建一個java.lang.Class類的實(shí)例來代表該類型谎亩,而裝載的類型信息則都位于方法區(qū)炒嘲。

每個類裝載器都有自己的命名空間谈竿,其中維護(hù)著由它裝載的類型。所以摸吠,一個Java程序可以多次裝載具有同一個全限定名的類型误算,類型的全限定名不足以確定它在Java虛擬機(jī)中的唯一性胸墙。對于每一個被裝載的類型龟再,Java虛擬機(jī)都會記錄裝載它的類型裝載器印衔。

當(dāng)虛擬機(jī)裝載某個類型時,先使用類裝載器定位并讀取相應(yīng)的字節(jié)碼文件啼止,然后提取其中的類型信息道逗,將這些類型信息類的靜態(tài)變量存儲到方法區(qū)中。

由于所有線程都共享方法區(qū)献烦,因此方法區(qū)中的數(shù)據(jù)訪問必須被設(shè)計(jì)為線程安全的滓窍。假設(shè)同時有兩個線程來訪問一個類,而這個類還沒有被裝載巩那,那么吏夯,只應(yīng)該有一個線程去裝載它,另一個線程等待即横。

在Java源碼中噪生,全限定名由類所屬的包的名稱加一個“.”再加上類名組成。
一個Java程序獨(dú)占一個Java虛擬機(jī)實(shí)例东囚,每個Java虛擬機(jī)實(shí)例都有自己的堆空間跺嗽,堆空間由Java程序的各線程共享。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末页藻,一起剝皮案震驚了整個濱河市桨嫁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌份帐,老刑警劉巖璃吧,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弥鹦,居然都是意外死亡肚逸,警方通過查閱死者的電腦和手機(jī)爷辙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門彬坏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膝晾,你說我怎么就攤上這事栓始。” “怎么了血当?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵幻赚,是天一觀的道長禀忆。 經(jīng)常有香客問我,道長落恼,這世上最難降的妖魔是什么箩退? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮佳谦,結(jié)果婚禮上戴涝,老公的妹妹穿的比我還像新娘。我一直安慰自己钻蔑,他們只是感情好啥刻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咪笑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窗怒。 梳的紋絲不亂的頭發(fā)上映跟,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音扬虚,去河邊找鬼申窘。 笑死,一個胖子當(dāng)著我的面吹牛孔轴,可吹牛的內(nèi)容都是我干的剃法。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼路鹰,長吁一口氣:“原來是場噩夢啊……” “哼贷洲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晋柱,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤优构,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雁竞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钦椭,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年碑诉,在試婚紗的時候發(fā)現(xiàn)自己被綠了彪腔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡进栽,死狀恐怖德挣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情快毛,我是刑警寧澤格嗅,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布番挺,位于F島的核電站,受9級特大地震影響屯掖,放射性物質(zhì)發(fā)生泄漏玄柏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一贴铜、第九天 我趴在偏房一處隱蔽的房頂上張望禁荸。 院中可真熱鬧,春花似錦阀湿、人聲如沸赶熟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽映砖。三九已至,卻和暖如春灾挨,著一層夾襖步出監(jiān)牢的瞬間邑退,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工劳澄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留地技,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓秒拔,卻偏偏與公主長得像莫矗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砂缩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • JAVA虛擬機(jī)的生命周期 一個運(yùn)行時的Java虛擬機(jī)實(shí)例的天職是:負(fù)責(zé)運(yùn)行一個java程序作谚。當(dāng)啟動一個Java程序...
    Solang閱讀 1,169評論 0 19
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,087評論 0 62
  • 今天是5月15號庵芭,離2018考研還有222天妹懒。 如果仔細(xì)來分析一下: 1:一本專八詞匯 需要120天的復(fù)習(xí)時間。(...
    浮光掠影59閱讀 246評論 0 0
  • 暗戀一個人 你從此便是精神病患者 時常自問自答 易喜易愁 無端嫉妒 偶爾口無遮攔 間歇性失語 愛用假設(shè)性的詞語造句...
    周不懂閱讀 668評論 16 10
  • 16日双吆,記者接到一通電話眨唬,打來電話的男子自稱是長春某大學(xué)繼續(xù)教育學(xué)院大一新生,通過校園內(nèi)的借貸廣告好乐,借了一萬塊錢匾竿,...
    力量時評閱讀 520評論 1 5