版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄uJava虛擬機(jī) 1.java虛擬機(jī)的生命周期 2.java虛擬機(jī)的體系結(jié)構(gòu)uJava class文件 1.magic(魔數(shù)) 2.minor_version和major_version 3.constant_pool_count和constant_pool 第1頁(yè)/共34頁(yè)u類(lèi)型的生命周期 1.類(lèi)型的裝載、連接和初始化 2.對(duì)象的生命周期 3.卸載類(lèi)型u連接模型 動(dòng)態(tài)連接和解析u垃圾收集第2頁(yè)/共34頁(yè)Java虛擬機(jī)生命周期第3頁(yè)/共34頁(yè) 每運(yùn)行一個(gè)java程序,便得到JAVA虛擬機(jī)的實(shí)例 每個(gè)Java程序都運(yùn)行于它自己的Java虛擬機(jī)實(shí)例中 當(dāng)程序關(guān)閉退出,這個(gè)虛擬機(jī)實(shí)例也就隨之消亡
2、 程序本身也能夠通過(guò)調(diào)用Runtime類(lèi)或者System類(lèi)的exit()方法退出。 第4頁(yè)/共34頁(yè)Java虛擬機(jī)體系結(jié)構(gòu)第5頁(yè)/共34頁(yè) 在Java假虛擬機(jī)規(guī)范中,一個(gè)虛擬機(jī)實(shí)例的行為時(shí)分別按照子系統(tǒng)、內(nèi)存區(qū)、數(shù)據(jù)類(lèi)型以及指令這幾個(gè)術(shù)語(yǔ)來(lái)描述的。這些組成部分一起展示了抽象的虛擬機(jī)的內(nèi)部抽象體系結(jié)構(gòu)。 第6頁(yè)/共34頁(yè)第7頁(yè)/共34頁(yè)1)所有的線程都共享方法區(qū),方法區(qū)必須被設(shè)計(jì)為線程安全的,方法區(qū)大小不固定2)方法區(qū) 存儲(chǔ)以下類(lèi)型信息: 類(lèi)的全限定名 超類(lèi)的全限定名 是接口還是類(lèi) 類(lèi)的訪問(wèn)修飾修飾符 該類(lèi)的【常量池】 字段信息 方法信息 類(lèi)(靜態(tài))變量 :類(lèi)變量是由所有類(lèi)實(shí)例共享的,即使沒(méi)有類(lèi)
3、實(shí)例,也可以訪問(wèn) 一個(gè)到類(lèi)ClassLoader引用 一個(gè)到類(lèi)的引用3)方法表運(yùn)行時(shí)數(shù)據(jù)區(qū)-方法區(qū)第8頁(yè)/共34頁(yè)堆1)同一個(gè)java應(yīng)用所有的線程共享堆空間(由于每一個(gè)java程序獨(dú)占一個(gè)java虛擬機(jī)實(shí)例,因面每個(gè)java程序都有它自己的堆空間)堆空間可以分為三部分:一個(gè)Eden區(qū),Survivor區(qū)和 truned區(qū) 2)由new操作符創(chuàng)建的對(duì)象均位于堆中運(yùn)行時(shí)數(shù)據(jù)區(qū)java中的堆第9頁(yè)/共34頁(yè)運(yùn)行時(shí)數(shù)據(jù)區(qū)-Java中的棧 u每啟動(dòng)一個(gè)新的線程,java虛擬機(jī)都會(huì)為它分配一個(gè)java棧,java棧上的都是此線程私有的u每當(dāng)啟用一個(gè)線程時(shí),JVM就為他分配一個(gè)Java棧,棧是以幀為單位保
4、存當(dāng)前線程的運(yùn)行狀態(tài)?!井?dāng)前方法,當(dāng)前幀,當(dāng)前類(lèi),當(dāng)前常量池】u每當(dāng)線程調(diào)用一個(gè)Java方法時(shí),JVM就會(huì)在該線程對(duì)應(yīng)的棧中壓入一個(gè)幀,這個(gè)幀自然就成了當(dāng)前幀。當(dāng)執(zhí)行這個(gè)方法時(shí),它使用這個(gè)幀來(lái)存儲(chǔ)參數(shù)、局部變量、中間運(yùn)算結(jié)果等等。uJava棧上的所有數(shù)據(jù)都是私有的。任何線程都不能訪問(wèn)另一個(gè)線程的棧數(shù)據(jù)。uJava棧和幀在內(nèi)存中也不必是連續(xù)的,幀可以分布在連續(xù)的棧里,也可以分布在堆里第10頁(yè)/共34頁(yè)棧幀 棧幀由三部分組成:局部變量區(qū)、操作數(shù)棧和幀數(shù)據(jù)區(qū)第11頁(yè)/共34頁(yè)Java 的class文件第12頁(yè)/共34頁(yè)Class文件的內(nèi)容 在class文件中,可變長(zhǎng)度項(xiàng)的大小和長(zhǎng)度位于其實(shí)際數(shù)據(jù)之前
5、,這個(gè)特性使得class文件數(shù)據(jù)流可以被順序解析,首先讀出項(xiàng)的大小,然后讀出項(xiàng)數(shù)據(jù) 1.magic(魔數(shù)) 4個(gè)字節(jié) 2.minor_version和major_version 4個(gè)字節(jié) 3.constant_pool_count 和 constant_pool 4.access_flags 2個(gè)字節(jié) 5.this_class 2個(gè)字節(jié)第13頁(yè)/共34頁(yè)6.super_class 2個(gè)字節(jié)7.interfaces_count 和interfaces8.fields_count 和 fields9.methods_count 和 fields10.attributes_count 和 attri
6、butes第14頁(yè)/共34頁(yè)Java代碼編譯和執(zhí)行的整個(gè)過(guò)程包含了以下三個(gè)重要的機(jī)制: 1.Java源碼編譯機(jī)制 2.類(lèi)加載機(jī)制 3.類(lèi)執(zhí)行機(jī)制 Java代碼編譯是由Java源碼編譯器來(lái)完成,流程圖如下所示:第15頁(yè)/共34頁(yè)Java字節(jié)碼的執(zhí)行是由JVM執(zhí)行引擎來(lái)完成,流程圖如下所示:第16頁(yè)/共34頁(yè) class文件由以下部分組成: 1.1.結(jié)構(gòu)信息 包括class文件格式版本號(hào)及各部分的數(shù)量與大小的信息 2.2.元數(shù)據(jù) 對(duì)應(yīng)于Java源碼中聲明與常量的信息。包含類(lèi)/繼承的超類(lèi)/實(shí)現(xiàn)的接口的聲明信息、域與方法聲明信息和常量池 3.3.方法信息。 對(duì)應(yīng)Java源碼中語(yǔ)句和表達(dá)式對(duì)應(yīng)的信息。包
7、含字節(jié)碼、 異常處理器表、求值棧與局部變量區(qū)大小、求值棧的類(lèi)型記錄、調(diào)試符號(hào)信息 第17頁(yè)/共34頁(yè)第18頁(yè)/共34頁(yè)Java中的類(lèi)加載機(jī)制 JVM的類(lèi)加載是通過(guò)ClassLoader及其子類(lèi)來(lái)完成的,類(lèi)的層次關(guān)系和加載順序可以由下圖來(lái)描述:第19頁(yè)/共34頁(yè)第20頁(yè)/共34頁(yè)uBootstrap ClassLoader /啟動(dòng)類(lèi)加載器$JAVA_HOME中jre/lib/rt.jar里所有的class,由C+實(shí)現(xiàn),不是ClassLoader子類(lèi)uExtension ClassLoader/擴(kuò)展類(lèi)加載器 負(fù)責(zé)加載java平臺(tái)中擴(kuò)展功能的一些jar包,包括$JAVA_HOME中jre/lib/*
8、.jar或-Djava.ext.dirs指定目錄下的jar包uApp ClassLoader/ 系統(tǒng)類(lèi)加載器 負(fù)責(zé)加載classpath中指定的jar包及目錄中classuCustom ClassLoader/用戶(hù)自定義類(lèi)加載器(java.lang. ClassLoader的子類(lèi))u屬于應(yīng)用程序根據(jù)自身需要自定義的ClassLoader,如tomcat、jboss都會(huì)根據(jù)j2ee規(guī)范自行實(shí)現(xiàn)ClassLoader第21頁(yè)/共34頁(yè)Java中的類(lèi)加載雙親委派機(jī)制 JVM在加載類(lèi)時(shí)默認(rèn)采用的是【雙親委派機(jī)制】。通俗的講,就是某個(gè)特定的類(lèi)加載器在接到加載類(lèi)的請(qǐng)求時(shí),首先將加載任務(wù)委托給父類(lèi)加載器,依
9、次遞歸,如果父類(lèi)加載器可以完成類(lèi)加載任務(wù),就成功返回;只有父類(lèi)加載器無(wú)法完成此加載任務(wù)時(shí),才自己去加載。第22頁(yè)/共34頁(yè) java中的類(lèi)執(zhí)行機(jī)制 JVM是基于棧的體系結(jié)構(gòu)來(lái)執(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é)果。第23頁(yè)/共34頁(yè)java類(lèi)的生命周期 第24頁(yè)/共34頁(yè)卸載類(lèi)型裝載連接驗(yàn)證準(zhǔn)備解析初始化類(lèi)實(shí)例化垃圾回
10、收和對(duì)象終結(jié)裝載:就是把二進(jìn)制形式的java類(lèi)型讀入java虛擬機(jī)中驗(yàn)證:準(zhǔn)備:為類(lèi)變量分配內(nèi)存,設(shè)置默認(rèn)值。但是在到達(dá)初始化 之前,類(lèi)變量都沒(méi)有初始化為真正的初始值解析:解析過(guò)程就是在類(lèi)型的常量池中尋找類(lèi)、接口、字段 和方法的符號(hào)引用,把這些符號(hào)引用替換成直接引用 的過(guò)程在符號(hào)引用被程序首次使用之前,連接這個(gè)步驟 都是可選的初始化: 為類(lèi)變量賦予正確的初始值類(lèi)實(shí)例化:為新的對(duì)象分配內(nèi)存為實(shí)例變量賦默認(rèn)值為實(shí)例變量賦正確的初始值java編譯 器為它編譯的每一個(gè)類(lèi)都至少生成一個(gè)實(shí)例初始化方法,在java的class文件中,這個(gè)實(shí)例初始化方法被稱(chēng)為”“。針對(duì)源代碼中每一個(gè)類(lèi)的構(gòu)造方法,java編譯
11、器都產(chǎn)生一個(gè)方法第25頁(yè)/共34頁(yè)JVM內(nèi)存回收第26頁(yè)/共34頁(yè)JVM內(nèi)存回收根集(root set): 所謂根集就是正在執(zhí)行的Java程序可以訪問(wèn)的引用變量的集合(包括局部變量、參數(shù)、類(lèi)變量),程序可以使用引用變量訪問(wèn)對(duì)象的屬性和調(diào)用對(duì)象的方法。垃圾收集首選需要確定從根開(kāi)始哪些是可達(dá)的和哪些是不可達(dá)的,從根集可達(dá)的對(duì)象都是活動(dòng)對(duì)象,它們不能作為垃圾被回收,這也包括從根集間接可達(dá)的對(duì)象。而根集通過(guò)任意路徑不可達(dá)的對(duì)象符合垃圾收集的條件,應(yīng)該被回收第27頁(yè)/共34頁(yè)常用的算法:1、 引用計(jì)數(shù)法(Reference Counting ollector) 2、tracing算法(Tracing C
12、ollector) 3、compacting算法(Compacting Collector)4、copying算法(Coping Collector) 5、generation算法(Generational Collector)6、adaptive算法(Adaptive Collector) 第28頁(yè)/共34頁(yè)Sun的JVMGenerationalCollecting算法Sun的JVMGenerationalCollecting(垃圾回收)原理是這樣的:把對(duì)象分為年青代(Young)、年老代(Tenured)、持久代(Perm),對(duì)不同生命周期的對(duì)象使用不同的算法。(基于對(duì)對(duì)象生命周期分析)第
13、29頁(yè)/共34頁(yè)第30頁(yè)/共34頁(yè)1.Young(年輕代) 年輕代分三個(gè)區(qū)。一個(gè)Eden區(qū),兩個(gè)Survivor區(qū)。大部分對(duì)象在Eden區(qū)中生成。當(dāng)Eden區(qū)滿時(shí),還存活的對(duì)象將被復(fù)制到Survivor區(qū)(兩個(gè)中的一個(gè)),當(dāng)這個(gè)Survivor區(qū)滿時(shí),此區(qū)的存活對(duì)象將被復(fù)制到另外一個(gè)Survivor區(qū),當(dāng)這個(gè)Survivor去也滿了的時(shí)候,從第一個(gè)Survivor區(qū)復(fù)制過(guò)來(lái)的并且此時(shí)還存活的對(duì)象,將被復(fù)制年老區(qū)(Tenured。需要注意,Survivor的兩個(gè)區(qū)是對(duì)稱(chēng)的,沒(méi)先后關(guān)系,所以同一個(gè)區(qū)中可能同時(shí)存在從Eden復(fù)制過(guò)來(lái)對(duì)象,和從前一個(gè)Survivor復(fù)制過(guò)來(lái)的對(duì)象,而復(fù)制到年老區(qū)的只有從第一個(gè)Survivor去過(guò)來(lái)的對(duì)象
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遙感影像解譯與空間信息提取-洞察分析
- 藥物篩選與高通量技術(shù)-洞察分析
- 《網(wǎng)絡(luò)是把雙刃劍》課件
- 2024年柳州華僑醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2025年粵教新版九年級(jí)歷史下冊(cè)階段測(cè)試試卷
- 養(yǎng)殖場(chǎng)糞污處理合同(2篇)
- 2024年05月山西山西銀行社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 中位線定理課件
- 2024年05月山東中國(guó)民生銀行濟(jì)南分行社會(huì)招考(512)筆試歷年參考題庫(kù)附帶答案詳解
- 2025年人教新起點(diǎn)高二化學(xué)上冊(cè)月考試卷含答案
- 少年宮管理制度多篇培訓(xùn)
- 銷(xiāo)售秒殺方案
- 第1課+古代亞非(教學(xué)設(shè)計(jì))【中職專(zhuān)用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 山西省呂梁市孝義市2023-2024學(xué)年八年級(jí)上學(xué)期期末道德與法治試題
- 新生兒出生后的注意事項(xiàng)課件
- 2024年6月廣東省高中學(xué)業(yè)水平考試物理試卷(附答案)
- 親近母語(yǔ)“西游智慧數(shù)學(xué)”系列
- 國(guó)家開(kāi)放大學(xué)電大本科《古代小說(shuō)戲曲專(zhuān)題》2024期末試題及答案(試卷號(hào):1340)
- 高考英語(yǔ)復(fù)習(xí)備考:語(yǔ)篇銜接連貫的“七選五”教學(xué)設(shè)計(jì)
- 貴州省銅仁市2022-2023學(xué)年高二上學(xué)期1月期末質(zhì)量監(jiān)測(cè)數(shù)學(xué)試題(含答案詳解)
- 正常分娩產(chǎn)婦護(hù)理查房
評(píng)論
0/150
提交評(píng)論