JVM

JVM

幫助指令代碼(字節(jié)碼)與底層進行(操作系統(tǒng)平臺和執(zhí)行指令并管理資源的硬件體系結(jié)構(gòu))交互。對于字節(jié)碼來說,它能夠模擬機器的寄存器弦追、堆棧等等裙椭,它是“一個真實機器有效躏哩、獨立的復制品。

jvm
  • 輸入:類文件格式的文件揉燃,即 *.class文件
  • 輸出:底層平臺可以執(zhí)行的最終指令扫尺,如,二進制文件
  • JDK炊汤、JRE:JRE是我們安裝運行Java程序的最基本軟件正驻。它和Java類庫以及運行Java程序所需要的其他組件一起夠成了JVM的一個實現(xiàn)弊攘。JDK(Java開發(fā)工具)是JRE的超集。
java

類加載器

每一個在JRE上運行的Java程序都會創(chuàng)建一個JVM實例姑曙。編譯后的Java類文件和其他被依賴的類文件會被加載到運行環(huán)境中襟交。這一步由類加載器協(xié)助完成。

類加載器

當運行一個JVM示例時伤靠,系統(tǒng)將分配給它一塊內(nèi)存區(qū)域(這塊內(nèi)存區(qū)域的大小可以設置的)捣域,這一內(nèi)存區(qū)域由JVM自己來管理。


runtime data areas

分出來的這一塊就稱為運行數(shù)據(jù)區(qū)域宴合。運行數(shù)據(jù)區(qū)域可以劃分為6大塊:Java棧焕梅、程序計數(shù)寄存器(PC寄存器)、本地方法棧(Native Method Stack)卦洽、Java堆贞言、方法區(qū)域、運行常量池(Runtime Constant Pool)阀蒂。前面3各區(qū)域(PC寄存器该窗、Java棧、本地方法棧)是每個線程獨自擁有的脂新,后三者則是整個JVM實例中的所有線程共有的挪捕。

  • PC計數(shù)器:每一個線程都擁有一個PC計數(shù)器,當線程啟動(start)時争便,PC計數(shù)器被創(chuàng)建级零,這個計數(shù)器存放當前正在被執(zhí)行的字節(jié)碼指令(JVM指令)的地址。
  • Java棧:同樣的滞乙,Java棧也是每個線程單獨擁有奏纪,線程啟動時創(chuàng)建。這個棧中存放著一系列的棧幀(Stack Frame)斩启,JVM只能進行壓入(Push)和彈出(Pop)棧幀這兩種操作序调。每當調(diào)用一個方法時,JVM就往棧里壓入一個棧幀兔簇,方法結(jié)束返回時彈出棧幀发绢。基本類型的實例int a 等在這里垄琐,int[] a在這里的指向堆實例的引用边酒。
java stack

每個棧幀包含三個部分:本地變量數(shù)組,操作數(shù)棧狸窘,方法所屬類的常量池引用墩朦。


方法調(diào)用時的stack
  • 本地方法棧:當程序通過JNI(Java Native Interface)調(diào)用本地方法(如C或者C++代碼)時,就根據(jù)本地方法的語言類型建立相應的棧翻擒。
    本地方法棧
  • 方法區(qū)域:方法區(qū)域是一個JVM實例中的所有線程共享的氓涣,當啟動一個JVM實例時牛哺,方法區(qū)域被創(chuàng)建。它用于存運行放常量池劳吠、有關(guān)域和方法的信息引润、靜態(tài)變量、類和方法的字節(jié)碼赴背。
  • 運行常量池:這個區(qū)域存放類和接口的常量椰拒,除此之外,它還存放方法和域的所有引用凰荚。當一個方法或者域被引用的時候,JVM就通過運行常量池中的這些引用來查找方法和域在內(nèi)存中的的實際地址褒脯。
    方法區(qū)域和運行常量池
  • :堆中存放的是程序創(chuàng)建的對象或者實例便瑟。這個區(qū)域?qū)VM的性能影響很大。垃圾回收機制處理的正是這一塊內(nèi)存區(qū)域番川。

執(zhí)行引擎

類加載器將字節(jié)碼載入內(nèi)存之后到涂,執(zhí)行引擎以Java 字節(jié)碼指令為單元,讀取Java字節(jié)碼颁督。將字節(jié)碼轉(zhuǎn)化成平臺相關(guān)的機器碼践啄。這個過程可以由解釋器來執(zhí)行,也可以由即時編譯器(JIT Compiler)來完成沉御。

JIT

總結(jié)

JVM
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屿讽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吠裆,更是在濱河造成了極大的恐慌伐谈,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件试疙,死亡現(xiàn)場離奇詭異诵棵,居然都是意外死亡,警方通過查閱死者的電腦和手機祝旷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門履澳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怀跛,你說我怎么就攤上這事距贷。” “怎么了敌完?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵储耐,是天一觀的道長。 經(jīng)常有香客問我滨溉,道長什湘,這世上最難降的妖魔是什么长赞? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮闽撤,結(jié)果婚禮上得哆,老公的妹妹穿的比我還像新娘。我一直安慰自己哟旗,他們只是感情好贩据,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著闸餐,像睡著了一般饱亮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舍沙,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天近上,我揣著相機與錄音,去河邊找鬼拂铡。 笑死壹无,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的感帅。 我是一名探鬼主播斗锭,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼失球!你這毒婦竟也來了岖是?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤她倘,失蹤者是張志新(化名)和其女友劉穎璧微,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硬梁,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡前硫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荧止。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屹电。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖跃巡,靈堂內(nèi)的尸體忽然破棺而出危号,到底是詐尸還是另有隱情,我是刑警寧澤素邪,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布外莲,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏偷线。R本人自食惡果不足惜磨确,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一姆怪、第九天 我趴在偏房一處隱蔽的房頂上張望身隐。 院中可真熱鬧,春花似錦登渣、人聲如沸亥曹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳瞪。三九已至骗炉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間材失,已是汗流浹背痕鳍。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留龙巨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓熊响,卻偏偏與公主長得像旨别,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子汗茄,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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