Java學(xué)習(xí)之虛擬機(jī)運(yùn)行時(shí).ppt_第1頁
Java學(xué)習(xí)之虛擬機(jī)運(yùn)行時(shí).ppt_第2頁
Java學(xué)習(xí)之虛擬機(jī)運(yùn)行時(shí).ppt_第3頁
Java學(xué)習(xí)之虛擬機(jī)運(yùn)行時(shí).ppt_第4頁
Java學(xué)習(xí)之虛擬機(jī)運(yùn)行時(shí).ppt_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

,Java學(xué)習(xí)之- 虛擬機(jī)運(yùn)行時(shí),戎碼一生,2019/7/11,大綱,虛擬機(jī)內(nèi)部體系結(jié)構(gòu) 運(yùn)行時(shí)基本流程 方法表 堆 程序計(jì)數(shù)器 Java棧 執(zhí)行引擎,2019/7/11,虛擬機(jī)內(nèi)部體系結(jié)構(gòu),方法區(qū),堆,棧,本地方法棧,PC寄存器,類裝在子系統(tǒng),class文件,執(zhí)行引擎,運(yùn)行時(shí)數(shù)據(jù)區(qū),2019/7/11,開始,裝載,驗(yàn)證,準(zhǔn)備,解析,初始化,執(zhí)行方法,結(jié)束,垃圾回收,2019/7/11,運(yùn)行時(shí)的流程-裝載,讀取二進(jìn)制流 解析二進(jìn)制流,并存入方法區(qū) 類型信息、字段、方法、常量池、類變量等 創(chuàng)建一個(gè)該類型的java.lang.Class對(duì)象,2019/7/11,運(yùn)行時(shí)的流程-驗(yàn)證,語義驗(yàn)證,比如: 1. 檢查final的類不能被繼承 2. 檢查final的方法不能被重寫 3. 檢查超類和子類的方法的兼容性(是否出現(xiàn)同名方法,但是不是重載的情況) 4. 檢查各常量池入口之間的一致性,2019/7/11,運(yùn)行時(shí)的流程-準(zhǔn)備,類變量的內(nèi)存分配 類變量的默認(rèn)值設(shè)置,a為實(shí)例變量,初始化階段該實(shí)例還未被創(chuàng)建。 b為類變量,準(zhǔn)備階段分配 內(nèi)存,并設(shè)置默認(rèn)值為0。,2019/7/11,運(yùn)行時(shí)的流程-解析,把符號(hào)引用替換成直接引用,符號(hào)引用: 和字節(jié)碼中的信息基本類似。,直接引用: 1. 指向類型、類變量和類方法的直接引用可能是指向方法區(qū)的本地指針。 2. 指向?qū)嵗兞亢蛯?shí)例方法的直接引用都是偏移量。,2019/7/11,運(yùn)行時(shí)的流程-初始化,初始化類變量的值,有啥問題?,2019/7/11,運(yùn)行時(shí)的流程-初始化,初始化類變量的值 先超類,后子類 初始化階段,通過調(diào)用方法對(duì)類變量初始化語句和靜態(tài)語句塊進(jìn)行初始化 類變量初始化語句和靜態(tài)語句塊的執(zhí)行優(yōu)先級(jí)是相同的,按照J(rèn)ava源代碼中的順序一次執(zhí)行 實(shí)例變量不在這個(gè)階段進(jìn)行初始化,而是在new操作的時(shí)候調(diào)用方法進(jìn)行初始化 類變量初始化語句: /public static int staticInt; 不是類變量初始化語句 public static int staticInt = 5; public static double c = Math.random()*0.3; 靜態(tài)語句塊: static 。 ,2019/7/11,類初始化:方法,2019/7/11,實(shí)例初始化:方法,2019/7/11,方法表-方法查找,2019/7/11,方法表-方法查找,虛擬機(jī)規(guī)范沒有規(guī)定必須有方法表(方法表需要額外的內(nèi)存) 在字節(jié)碼裝載的時(shí)候存放到方法區(qū)中 私有方法和實(shí)例初始化方法調(diào)用指令:invokespecial 靜態(tài)方法的調(diào)用指令:invokestatic 每個(gè)類都有一個(gè)方法表,方法表包含從超類繼承來的實(shí)例方法 方法表中的方法是非私有、非靜態(tài)、非初始化的實(shí)例方法 方法表可以理解為一個(gè)指針數(shù)組,每個(gè)元素指向方法區(qū)中的某個(gè)方法 實(shí)例方法調(diào)用指令:invokevirtual 接口方法調(diào)用指令:invokeinterface 每個(gè)堆中的實(shí)例都有一個(gè)指向方法區(qū)的指針,都說接口方法調(diào)用 比實(shí)例方法慢, 為什么,why?,2019/7/11,方法表-Dog的方法表,2019/7/11,方法表-CockerSpaniel的方法表,2019/7/11,方法表-Dog的方法表,2019/7/11,堆,堆用來存儲(chǔ)創(chuàng)建的實(shí)例(對(duì)象、數(shù)組) 有分配新對(duì)象的指令,但沒有釋放對(duì)象內(nèi)存的指令,釋放內(nèi)存完全交由垃圾收集器來做 一個(gè)Java程序一個(gè)Java虛擬機(jī)實(shí)例,一個(gè)Java虛擬機(jī)實(shí)例一個(gè)堆 虛擬機(jī)或者Java程序之間的堆互不干擾,但同一個(gè)Java程序中的不同線程共享堆 堆空間不一定是連續(xù)的內(nèi)存區(qū),可動(dòng)態(tài)伸縮,2019/7/11,堆-實(shí)現(xiàn)1,指向?qū)ο蟪氐闹羔?指向類數(shù)據(jù)的指針,堆,句柄,對(duì)象,實(shí)例數(shù)據(jù),對(duì)象鎖、等待集合,垃圾收集相關(guān)數(shù)據(jù),。,。,方法區(qū),類數(shù)據(jù),類數(shù)據(jù),類數(shù)據(jù),類數(shù)據(jù),類數(shù)據(jù),。,指向句柄池的指針,。,一個(gè)對(duì)象的引用,2019/7/11,堆-實(shí)現(xiàn)2,指向類數(shù)據(jù)的指針,實(shí)例數(shù)據(jù),堆,方法區(qū),類數(shù)據(jù),類數(shù)據(jù),類數(shù)據(jù),類數(shù)據(jù),類數(shù)據(jù),。,指向堆的指針,。,一個(gè)對(duì)象的引用,對(duì)象鎖、等待集合,垃圾收集相關(guān)數(shù)據(jù),。,對(duì)象,2019/7/11,程序計(jì)數(shù)器,每個(gè)線程一個(gè)程序計(jì)數(shù)器 總是指向下一條指令(在調(diào)用方法返回的時(shí)候是指向哪兒?) 在方法內(nèi)跳轉(zhuǎn)的時(shí)候會(huì)用到程序計(jì)數(shù)器,比如:goto fff9(程序計(jì)數(shù)器的值-7等于下一跳指令的位置) 程序計(jì)數(shù)器還有啥作用?,2019/7/11,Java棧,往Java棧中壓棧和出棧的目標(biāo)是棧幀 每調(diào)用一個(gè)方法就創(chuàng)建一個(gè)棧幀 Java棧通常是預(yù)先分配一個(gè)較長的內(nèi)存空間,當(dāng)空間不夠的時(shí)候再擴(kuò)展Java棧 棧幀(與方法對(duì)應(yīng)) 局部變量區(qū)(存放方法參數(shù)和方法體中的局部變量,生命周期短) 操作數(shù)棧(棧幀中的棧,用于指令操作數(shù)存儲(chǔ),生命周期短) 幀數(shù)據(jù)區(qū)(存放常量池指針、異常表的引用、調(diào)試數(shù)據(jù)、支持方法正常返回),2019/7/11,Java棧,Main類 main() 棧幀,Main類 main() 棧幀,ClassA類 棧幀,Main類 main() 棧幀,ClassA類 callClassBMethod() 棧幀,Main類 main() 棧幀,ClassA類 callClassBMethod() 棧幀,ClassB類 call() 棧幀,Main類 main() 棧幀,ClassA類 callClassBMethod() 棧幀,ClassB類 call() 棧幀,PrintStream類 println() 棧幀,Main類 main() 棧幀,Main類 main() 棧幀,ClassA類 callClassBMethod() 棧幀,ClassB類 call() 棧幀,。,棧底,棧頂,完成,出棧,println()完成,出棧,call()完成,出棧,callClassBMethod()和main()依次出棧,2019/7/11,Java棧-棧幀,a,指向常量池的指針,局部變量區(qū),幀數(shù)據(jù)區(qū),異常表的引用,調(diào)試數(shù)據(jù),支持方法返回,等等,b,c,d,g,h,e,f,this,操作數(shù)棧,0,1,2,3,4,5,7,9,10,2019/7/11,Java棧-棧幀,this引用,幀數(shù)據(jù)區(qū),1,result,88.88,幀數(shù)據(jù)區(qū),add

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論