Java基礎(chǔ)(2)——JVM原理

Java for Android的基礎(chǔ)知識(shí)

一.JVM的結(jié)構(gòu)

每個(gè)JVM都包括:

1.類加載子系統(tǒng):裝載具有適合名稱的類或者接口姻成。

2.內(nèi)存空間:方法區(qū)也祠,Java堆昙楚,Java棧,本地方法區(qū)诈嘿。

3.垃圾收集器(GC)堪旧。

4.計(jì)數(shù)器以及寄存器。

5.執(zhí)行引擎:負(fù)責(zé)執(zhí)行包含在已裝載的類或接口的指令奖亚。

6.本地方法接口和本地方法庫(kù)淳梦。

二.JVM編譯和執(zhí)行過(guò)程

粗略流程在前篇已經(jīng)介紹過(guò)來(lái),這里主要注意這個(gè)過(guò)程中的三個(gè)重要機(jī)制:源代碼編譯機(jī)制遂蛀,類加載機(jī)制谭跨,類執(zhí)行機(jī)制。

1.源代碼的編譯機(jī)制:

(1)分析和輸入符號(hào)表

(2)注解處理

(3)語(yǔ)義分析和生成class文件

最后生存的class文件由以下部分組成:

(1)結(jié)構(gòu)信息:包含class文件格式李滴,版本號(hào)以及各個(gè)部分的數(shù)量大小的信息螃宙。

(2)元數(shù)據(jù):對(duì)應(yīng)Java源碼中聲明和常量的信息。包含類/繼承的超類/實(shí)現(xiàn)的接口的聲明信息所坯,域與方法聲明信息和常量池谆扎。

(3)方法信息:對(duì)應(yīng)源碼中語(yǔ)句和表達(dá)式。包含字節(jié)碼芹助,異常處理表堂湖,求值棧與局部變量區(qū)大小,求值棧類型記錄状土,調(diào)試符號(hào)信息无蜂。

2.類加載機(jī)制

JVM的類加載是通過(guò)ClassLoader以及其子類來(lái)完成的。

(1)Bootstrap ClassLoader:負(fù)責(zé)加載環(huán)境變量中JAVA_HOME中jre/lib/rt.jar里所有的Class蒙谓,由C++實(shí)現(xiàn)斥季,不是ClassLoader子類。

(2)Extension ClassLoader:負(fù)責(zé)加載Java平臺(tái)擴(kuò)展功能的一些jar包累驮,包括JAVA_HOME中jre/lib/*.jar或者-Djava.ext.dirs指定目錄下的jar包酣倾。

(3)App ClassLoader:負(fù)責(zé)加載Classpath中指定的jar包以及目錄中的class文件。

(4)Custom Classloader:屬于應(yīng)用程序根據(jù)自身需要自定義的ClassLoader谤专,例如tomcat躁锡、jboss都會(huì)根據(jù)j2ee規(guī)范自行實(shí)現(xiàn)ClassLoader。

加載過(guò)程會(huì)檢查類是否已經(jīng)被加載置侍,檢查順序從CustomClassLoader到BootStrapClassLoader逐層檢查映之,只要某個(gè)ClassLoader已加載則視為加載拦焚。而加載順序與檢查順序相反。

3.類執(zhí)行機(jī)制

JVM是基于堆棧的虛擬機(jī)惕医。JVM為每個(gè)新創(chuàng)建的線程都分配一個(gè)堆棧耕漱。

一個(gè)Java程序的運(yùn)行就是通過(guò)堆棧的操作來(lái)完成的算色。堆棧以幀為單位保存線程的狀態(tài)抬伺。JVM只對(duì)堆棧進(jìn)行兩種操作:以幀為單位的壓棧和出棧。

JVM執(zhí)行class字節(jié)碼灾梦,創(chuàng)建線程后峡钓,都會(huì)產(chǎn)生程序計(jì)數(shù)器(PC)和棧(stack),計(jì)數(shù)器存放下一條要執(zhí)行的指令在方法內(nèi)的偏移量若河,棧中存放一個(gè)個(gè)幀棧能岩,每個(gè)幀棧對(duì)應(yīng)每個(gè)方法的每次調(diào)用,而幀棧又由局部變量區(qū)和操作數(shù)棧兩部分組成萧福,局部變量區(qū)用于存放方法中的局部變量和參數(shù)拉鹃,操作數(shù)棧中存放執(zhí)行過(guò)程中產(chǎn)生的中間結(jié)果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鲫忍,一起剝皮案震驚了整個(gè)濱河市膏燕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悟民,老刑警劉巖坝辫,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異射亏,居然都是意外死亡近忙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門智润,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)及舍,“玉大人,你說(shuō)我怎么就攤上這事窟绷【饴辏” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵钾麸,是天一觀的道長(zhǎng)更振。 經(jīng)常有香客問(wèn)我,道長(zhǎng)饭尝,這世上最難降的妖魔是什么肯腕? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮钥平,結(jié)果婚禮上实撒,老公的妹妹穿的比我還像新娘姊途。我一直安慰自己,他們只是感情好知态,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布捷兰。 她就那樣靜靜地躺著,像睡著了一般负敏。 火紅的嫁衣襯著肌膚如雪贡茅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天其做,我揣著相機(jī)與錄音顶考,去河邊找鬼。 笑死妖泄,一個(gè)胖子當(dāng)著我的面吹牛驹沿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹈胡,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渊季,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了罚渐?” 一聲冷哼從身側(cè)響起却汉,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搅轿,沒(méi)想到半個(gè)月后病涨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡璧坟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年既穆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雀鹃。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幻工,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出黎茎,到底是詐尸還是另有隱情囊颅,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布傅瞻,位于F島的核電站踢代,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嗅骄。R本人自食惡果不足惜胳挎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溺森。 院中可真熱鬧慕爬,春花似錦窑眯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至姥卢,卻和暖如春卷要,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隔显。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工却妨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饵逐,地道東北人括眠。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像倍权,于是被迫代替她去往敵國(guó)和親掷豺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 從三月份找實(shí)習(xí)到現(xiàn)在薄声,面了一些公司当船,掛了不少,但最終還是拿到小米默辨、百度德频、阿里、京東缩幸、新浪壹置、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,209評(píng)論 11 349
  • 作為一名Java使用者表谊,掌握J(rèn)VM的體系結(jié)構(gòu)也是必須的钞护。說(shuō)起Java,人們首先想到的是Java編程語(yǔ)言爆办,然而事實(shí)上...
    Android看海閱讀 675評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評(píng)論 25 707
  • 俗話說(shuō)难咕,沒(méi)有不透風(fēng)的墻,尤其在中國(guó)這個(gè)人際關(guān)系錯(cuò)綜復(fù)雜的地方距辆,幾乎沒(méi)有什么秘密能守得住余佃。 廳里決定要成立一個(gè)新電視...
    山外客閱讀 193評(píng)論 0 0
  • 今天看到一個(gè)算法題,感覺(jué)應(yīng)該很簡(jiǎn)單就能搞定跨算,但是想了很久還是沒(méi)想到爆土,囧。最后還是網(wǎng)上查了別人的解法漂彤,跟大家分享一下...
    破東風(fēng)CAFEBABY閱讀 1,296評(píng)論 4 10