Java-jvm學(xué)習(xí)

1:Jvm是什么

Jvm 虛擬機(jī)(Java Virtual Machine)字面意思,Java虛擬的機(jī)器 ,一種Java,用于計(jì)算機(jī)設(shè)備的規(guī)范.

介紹:

Java虛擬機(jī)(JVM)是可運(yùn)行Java代碼的假想計(jì)算機(jī)察郁。只要根據(jù)JVM規(guī)格描述將解釋器移植到特定的計(jì)算機(jī)上擂涛,就能保證經(jīng)過編譯的任何Java代碼能夠在該系統(tǒng)上運(yùn)行。

重點(diǎn):

Jvm 是Java實(shí)現(xiàn)跨平臺(tái)的基礎(chǔ),只要平臺(tái)支持Jvm Java語言寫的項(xiàng)目就能在此平臺(tái)上運(yùn)行.

2:Jvm結(jié)構(gòu)

Jvm結(jié)構(gòu)圖.png

Jvm由 以下幾個(gè)部分組成

  • 類加載器(.class類加載)
  • 運(yùn)行時(shí)數(shù)據(jù)區(qū)(運(yùn)行時(shí)數(shù)據(jù)存儲(chǔ),分為方法區(qū),堆,java棧,本地方法棧,程序計(jì)數(shù)器)
  • 執(zhí)行引擎本(執(zhí)行字節(jié)碼或者執(zhí)行本地方法)
  • JNI(Java Native Interface)本地地方法接口
  • Native Library 本地方法庫(kù) C/C++實(shí)現(xiàn)的一些庫(kù)

3:類加載器

類加載器:
類加載器是Jvm提供的一種類加載的機(jī)制. 類加載器負(fù)責(zé)將class文件加載到內(nèi)存中,轉(zhuǎn)化為可執(zhí)行對(duì)象.所有類都是由類加載器加載的
類加載器還負(fù)責(zé)解析類的依賴關(guān)系,即加載所需的其他類泥技。

類加載器分類
  • Bootstrap Class Loader 啟動(dòng)類加載器又稱跟加載器
  • Extension Class Loader 擴(kuò)展類加載器
  • Application Class Loader 程序類加載器
  • 自定義加載器(處理業(yè)務(wù)需要加密等特殊的加載器)
3.1 Bootstrap Class Loader啟動(dòng)類加載器

Bootstrap Class Loader 啟動(dòng)類加載器,又稱跟加載器,是最頂層的加載器.是由C++實(shí)現(xiàn),負(fù)責(zé)加載Java的核心類,%JAVA_HOME%/lib目錄下的核心jar包和類或者或被 -Xbootclasspath參數(shù)指定的路徑中的所有類,例如:java.lang.Object

3.2 ExtensionClassLoader 擴(kuò)展類加載器:

主要負(fù)責(zé)加載目錄 %JRE_HOME%/lib/ext 目錄下的jar包和類,或被 java.ext.dirs 系統(tǒng)變量所指定的路徑下的jar包唠倦。

3.2 AppClassLoader 應(yīng)用程序類加載器:

面向我們用戶的加載器铃芦,負(fù)責(zé)加載當(dāng)前應(yīng)用classpath下的所有jar包和類。

除了這三個(gè)主要的類加載器左刽,Java還支持自定義類加載器捺信,開發(fā)人員可以根據(jù)需要實(shí)現(xiàn)自己的類加載器。
注意:
除了 BootstrapClassLoader 其他類加載器均由 Java 實(shí)現(xiàn)且全部繼承自java.lang.ClassLoader

3.3 類生命周期

類生命周期.png

一個(gè)類的生命周期,就是類加載器加載到卸載一個(gè)類的過程.
類的生命周期可以分為以下幾個(gè)階段:

  • 加載(Loading)
    根據(jù)類的全限定名(包括包路徑和類名)定位并讀取類文件的字節(jié)碼欠痴。
  • 驗(yàn)證(Verification)
    校驗(yàn)類是否符合jvm規(guī)范
  • 準(zhǔn)備(Preparation)
    為靜態(tài)變量賦予默認(rèn)值,這些內(nèi)存都將在方法區(qū)中分配
    注意:
    靜態(tài)變量復(fù)制,0,null,""等
    final修飾的直接賦值而不是賦予默認(rèn)值
  • 解析(Resolution)
    將常量池中的符號(hào)引用替換為直接引用(內(nèi)存地址)的過程.
    符號(hào)引用就是一組符號(hào)來描述目標(biāo)迄靠,可以是任何字面量。屬于編譯原理方面的概念如:包括類和接口的全限定名喇辽、字段的名稱和描述符掌挚、方法的名稱和描述符。
    直接引用就是直接指向目標(biāo)的指針茵臭、相對(duì)偏移量或一個(gè)間接定位到目標(biāo)的句柄疫诽。如指向方法區(qū)某個(gè)類的一個(gè)指針
    個(gè)人理解就是將常量池中的對(duì)象,通過一個(gè)指針空間地址值對(duì)象化.
  • 初始化(Initialization)執(zhí)行類的初始化代碼舅世,包括靜態(tài)變量的賦值和靜態(tài)塊的執(zhí)行
    為靜態(tài)變量賦值

賦初值兩種方式:
定義靜態(tài)變量時(shí)指定初始值旦委。如 private static String x="123";
在靜態(tài)代碼塊里為靜態(tài)變量賦值。如 static{ x="123"; }
注意:只有對(duì)類的主動(dòng)使用才會(huì)導(dǎo)致類的初始化

  • 使用(Using) 被引用的時(shí)候就是在使用
  • 卸載(Unloading)
    執(zhí)行了System.exit()方法, 程序正常執(zhí)行結(jié)束
    程序在執(zhí)行過程中遇到了異吵牵或錯(cuò)誤而異常終止
    由于操作系統(tǒng)出現(xiàn)錯(cuò)誤而導(dǎo)致Java虛擬機(jī)進(jìn)程終止
3.4 類加載機(jī)制-雙重委派機(jī)制(爹來模式)(重要)

類加載器采用了雙親委派模型(Parent Delegation Model)來加載類缨硝。
即當(dāng)一個(gè)類加載器需要加載類時(shí),自身不會(huì)加載會(huì)首先發(fā)送給父類加載,父類要是還有父類就會(huì)依次向上傳遞,父類不能加載會(huì)返回給子類,子類加載,子類也加載不了會(huì)拋出ClassNotFoundException異常
好處:
確保類只加載一次

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末罢低,一起剝皮案震驚了整個(gè)濱河市查辩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌网持,老刑警劉巖宜岛,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異功舀,居然都是意外死亡萍倡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門辟汰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來列敲,“玉大人阱佛,你說我怎么就攤上這事〈鞫” “怎么了凑术?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)所意。 經(jīng)常有香客問我淮逊,道長(zhǎng),這世上最難降的妖魔是什么扶踊? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任壮莹,我火速辦了婚禮,結(jié)果婚禮上姻檀,老公的妹妹穿的比我還像新娘命满。我一直安慰自己,他們只是感情好绣版,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布胶台。 她就那樣靜靜地躺著,像睡著了一般杂抽。 火紅的嫁衣襯著肌膚如雪诈唬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天缩麸,我揣著相機(jī)與錄音铸磅,去河邊找鬼。 笑死杭朱,一個(gè)胖子當(dāng)著我的面吹牛阅仔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弧械,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼八酒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了刃唐?” 一聲冷哼從身側(cè)響起羞迷,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎画饥,沒想到半個(gè)月后衔瓮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抖甘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年热鞍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碍现,死狀恐怖幅疼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昼接,我是刑警寧澤爽篷,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站慢睡,受9級(jí)特大地震影響逐工,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漂辐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一泪喊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧髓涯,春花似錦袒啼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至包各,卻和暖如春摘仅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背问畅。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工娃属, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人护姆。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓矾端,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親签则。 傳聞我的和親對(duì)象是個(gè)殘疾皇子须床,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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