JVM

一、jvm組成

JVM由4大部分組成:ClassLoader,Runtime Data Area,Execution Engine,Native Interface

二、介紹

2.1 Classloader(類加載器)

ClassLoader(類加載器)是負(fù)責(zé)加載class文件,class文件在文件開頭有特定的文件標(biāo)示,并且ClassLoader只負(fù)責(zé)class文件的加載,至于它是否可以運(yùn)行,則由Execution Engine決定。

Java語言系統(tǒng)自帶有三個(gè)類加載器:

Bootstrap ClassLoader 最頂層的加載類,主要加載核心類庫,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通過啟動(dòng)jvm時(shí)指定-Xbootclasspath和路徑來

改變Bootstrap ClassLoader的加載目錄。比如java -Xbootclasspath/a:path被指定的文件追加到默認(rèn)的bootstrap路徑中。我們可以打開我的電腦,在上面的目錄下查看,看看這些jar包是不是存在于這個(gè)目錄。

Extention ClassLoader 擴(kuò)展的類加載器,加載目錄%JRE_HOME%\lib\ext目錄下的jar包和class文件。還可以加載-D java.ext.dirs選項(xiàng)指定的目錄。

Appclass Loader也稱為SystemAppClass 加載當(dāng)前應(yīng)用的classpath的所有類。

加載器執(zhí)行順序 :1.Bootstrap CLassloder? 2.Extention ClassLoader 3.AppClassLoader

雙親委派模型:

類是在運(yùn)行期間第一次使用時(shí)動(dòng)態(tài)加載的,而不是一次性加載。因?yàn)槿绻淮涡约虞d,那么會(huì)占用很多的內(nèi)存。

類的生命周期:

?包括以下 7 個(gè)階段:

加載(Loading)

驗(yàn)證(Verification)

準(zhǔn)備(Preparation)

解析(Resolution)

初始化(Initialization)

使用(Using)

卸載(Unloading)

2.2 Native Interface

Native Interface是負(fù)責(zé)調(diào)用本地接口的。他的作用是調(diào)用不同語言的接口給JAVA用,他會(huì)在Native Method Stack中記錄對(duì)應(yīng)的本地方法,然后調(diào)用該方法時(shí)就通過Execution Engine加載對(duì)應(yīng)的本地lib。原本多于用一些專業(yè)領(lǐng)域,如JAVA驅(qū)動(dòng),地圖制作引擎等,現(xiàn)在關(guān)于這種本地方法接口的調(diào)用已經(jīng)被類似于Socket通信,WebService等方式取代。

2.3?Execution Engine

?Execution Engine是執(zhí)行引擎,也叫Interpreter。Class文件被加載后,會(huì)把指令和數(shù)據(jù)信息放入內(nèi)存中,Execution Engine則負(fù)責(zé)把這些命令解釋給操作系統(tǒng)。

2.4?Runtime Data Area

Runtime Data Area則是存放數(shù)據(jù)的,分為五部分:Stack,Heap,Method Area,PC Register,Native Method Stack。幾乎所有的關(guān)于java內(nèi)存方面的問題,都是集中在這塊

java虛擬機(jī)棧: 每個(gè) Java 方法在執(zhí)行的同時(shí)會(huì)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量表、操作數(shù)棧、常量池引用等信息。從方法調(diào)用直至執(zhí)行完成的過程,就對(duì)應(yīng)著一個(gè)棧幀在 Java 虛擬機(jī)棧中入棧和出棧的過程。通過-Xss來設(shè)置其大小

堆: 所有對(duì)象都在這里分配內(nèi)存,是垃圾收集的主要區(qū)域("GC 堆")。分為Young Generation和Old Generation(也叫Tenured?Generation)兩大部分。Young Generation分為Eden和Survivor,Survivor又分為From Space和 ToSpace。通過-Xms和-Xmx來指定最小值和最大值

三、垃圾回收?

?判斷一個(gè)對(duì)象是否可被回收?

?(1)引用計(jì)數(shù)算法

?(2)可達(dá)性算法 :以 GC Roots 為起始點(diǎn)進(jìn)行搜索,可達(dá)的對(duì)象都是存活的,不可達(dá)的對(duì)象可被回收。(java虛擬機(jī)使用)

? ? ? GC Roots 一般包含以下內(nèi)容:

虛擬機(jī)棧中局部變量表中引用的對(duì)象

本地方法棧中 JNI 中引用的對(duì)象

方法區(qū)中類靜態(tài)屬性引用的對(duì)象

方法區(qū)中的常量引用的對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 早上有個(gè)學(xué)習(xí)講座,聯(lián)系了幾個(gè)同事,她們都說不去。我也不想去,又怕去的人少了,負(fù)責(zé)人一生氣要點(diǎn)名,所以還是勉...
    愛與感賞閱讀 340評(píng)論 0 5
  • 這前幾個(gè)星期是我奶奶的生日,我已經(jīng)盼了很長時(shí)間了,在剛進(jìn)入初一就開始盼望過上奶奶的生日,我可算盼來了奶奶的,...
    五班賈文慧閱讀 634評(píng)論 1 3
  • 前情回顧:來寶不聲不響地收拾好行李,并帶上八百塊錢在天蒙蒙亮的時(shí)候悄悄去車站了。 上一章 不辭而別 第一百三十一...
    顯山露水閱讀 2,336評(píng)論 24 34
  • 天還未黑透,暮靄不很深沉,站在六川河觀景臺(tái)放眼望去,遠(yuǎn)處的山頭像很多個(gè)饅頭一樣一個(gè)連著一個(gè),擠擠挨挨重重疊疊。她叫...
    七月紫蘇閱讀 322評(píng)論 0 0

友情鏈接更多精彩內(nèi)容