版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java虛擬機(jī),簡介 內(nèi)存區(qū)域與內(nèi)存溢出 垃圾回收 垃圾收集算法 垃圾收集器 調(diào)優(yōu)演示 Q/A,簡介,三大主流虛擬機(jī) Sun HotSpot VM(Oracle) BEA JRockit VM (Oracle) IBM J9 VM 今天的主題針對Oracle公司的HotSpot虛擬機(jī)來展開的,JVM也是作為一個(gè)JAVA開發(fā)人員學(xué)習(xí)的核心知識,理解JVM的原理對以后的程序開發(fā)、生產(chǎn)故障分析、性能調(diào)優(yōu)都有很大的幫助,同時(shí)也是走向資深猿的必修課。,運(yùn)行時(shí)數(shù)據(jù)區(qū)包括程序計(jì)數(shù)器、虛擬機(jī)棧、本地方法棧、堆、方法區(qū)。運(yùn)行時(shí)常量池(方法區(qū))、直接內(nèi)存(Native函數(shù)庫直接分配堆外內(nèi)存),內(nèi)存區(qū)域與內(nèi)存溢出,
2、程序計(jì)數(shù)器 當(dāng)前線程所執(zhí)行的字節(jié)碼行號指示器,即線程執(zhí)行Java方法時(shí),記錄其正在執(zhí)行的虛擬機(jī)字節(jié)碼指令地址 通過執(zhí)行線程行號記錄,實(shí)現(xiàn)線程安全切換 線程私有,生命周期與線程相同 較小的內(nèi)存空間,唯一在Java虛擬機(jī)規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域 Java虛擬機(jī)棧 每個(gè)方法被執(zhí)行的時(shí)候創(chuàng)建一個(gè)棧幀,棧幀由三部分組成:局部變量區(qū)、操作數(shù)棧、動(dòng)態(tài)連接。 單個(gè)線程棧內(nèi)存大小可通過Jvm參數(shù)-Xss設(shè)定,影響棧的深度。 線程私有,生命周期與線程相同 兩種異常狀態(tài):線程請求棧深度大于虛擬機(jī)允許的深度將拋出StackOverflowError,無法申請到足夠的內(nèi)存時(shí)會(huì)拋出Ou
3、tOfMemoryError,int a = 10; int b = 20; int c = a + b; 局部變量表 操作數(shù)棧 iload_1 iload_2 iadd istore_3,線程1,局部變量表,操作數(shù)棧,動(dòng)態(tài)連接,返回地址,Java虛擬機(jī)棧,棧幀1,棧幀n,線程n,本地方法棧 與虛擬機(jī)棧類似,為虛擬機(jī)棧使用到的Native方法服務(wù) Java堆(GC堆) 內(nèi)存回收角度主要分為:Eden區(qū)、Survivor1(From)區(qū)、Survivor2(To)區(qū);內(nèi)存分配角度:多個(gè)線程私有的分配緩沖區(qū)(TLAB) 內(nèi)存大小可通過Jvm參數(shù)控制 最小堆內(nèi)存:-Xms 最大堆內(nèi)存:-Xmx 新生
4、代內(nèi)存:-XX:NewSize Eden區(qū)與Survivor區(qū)比例:-XX:SurvivorRatio(默認(rèn)8) 垃圾回收器:如,-XX:+UseSerialGC、 -XX:+UseParNewGC 、-XX:+UseConcMarkSweepGC、 -XX:+UseG1GC等 垃圾回收策略:-XX:MaxTenuringThreshold(默認(rèn)15)、 線程公有 堆內(nèi)存不足時(shí)會(huì)拋出OutOfMemoryError:Java heap space異常,方法區(qū)(非堆、永久代) 儲存被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即使編譯器編譯后的代碼等數(shù)據(jù) Jdk1.8稱metaspace,字面量、靜態(tài)變
5、量轉(zhuǎn)移到Java堆 內(nèi)存大小可通過Jvm參數(shù)控制 最小永久代內(nèi)存:-XX:PermSize(默認(rèn)物理內(nèi)存的1/64)、-XX:MetaspaceSize(虛擬機(jī)動(dòng)態(tài)調(diào)整) 最大永久帶內(nèi)存:-XX:MaxPermSize(默認(rèn)物理內(nèi)存的1/4) 、-XX:MaxMetaspaceSize (本地內(nèi)存限制,虛擬機(jī)動(dòng)態(tài)擴(kuò)展) 內(nèi)存不足時(shí)會(huì)拋出OutOfMemoryError:PermGen space異常 ,jdk1.8 OutOfMemoryError: Metaspace異常 字符串常量池,java.lang.String的intern()方法jdk1.7版本從實(shí)例拷貝改為引用,例子: Stri
6、ng s1 = new StringBuffer(sc).append(ala).toString();System.out.println(ern() = s1); String s3 = new StringBuffer(ja).append(va).toString();System.out.println(ern() = s3); jdk1.6,false、false Jdk1.7,true、false,哪些內(nèi)存需要回收? 什么時(shí)候回收? 如何回收?,垃圾回收,如何判斷對象已經(jīng)死亡 引用計(jì)數(shù)算法 對象objA和objB都有字段instance,并賦值objA.i
7、nstance=objB 及objB.instance=objA,示例代碼如下: public void method() ObjectA objA = new ObjectA(); ObjectB objB = new ObjectB(); objA.instance = objB; objB.instance = objA; objA = null; objB = null; /此時(shí)虛擬機(jī)發(fā)起gc操作,objA和objB是否被回收? 無法解決對象循環(huán)引用問題,可達(dá)性分析算法 當(dāng)一個(gè)對象到GC Roots沒有任何引用鏈相連時(shí)認(rèn)為對象不可達(dá),即對象死亡,下次垃圾回收來臨時(shí)會(huì)對該對象做回收操作,
8、但并不代表該對象一定會(huì)被回收。,GC Roots,objA,instance,objB,instance,GC Roots,objB,objA,GC Root Set,field,field,可以作為GC Roots的對象 Class - 由系統(tǒng)類加載器(system class loader)加載的對象,這些類是不能夠被回收的,他們可以以靜態(tài)字段的方式保存持有其它對象。我們需要注意的一點(diǎn)就是,通過用戶自定義的類加載器加載的類,除非相應(yīng)的java.lang.Class實(shí)例以其它的某種(或多種)方式成為roots,否則它們并不是roots Thread - 活著的線程 Stack Local -
9、 Java方法的local變量或參數(shù) JNI Local - JNI方法的local變量或參數(shù) JNI Global - 全局JNI引用 Monitor Used - 用于同步的監(jiān)控對象 Held by JVM - 用于JVM特殊目的由GC保留的對象,但實(shí)際上這個(gè)與JVM的實(shí)現(xiàn)是有關(guān)的??赡芤阎囊恍╊愋褪牵合到y(tǒng)類加載器、一些JVM知道的重要的異常類、一些用于處理異常的預(yù)分配對象以及一些自定義的類加載器等。,finalize()方法 可達(dá)性分析算法中的不可達(dá)對象也并非是“非死不可”的,垃圾收集算法 標(biāo)記-清除算法(Mark-Sweep) 缺點(diǎn):1.效率較低2.產(chǎn)生大量不連續(xù)的內(nèi)存碎片,前,后,
10、可回收對象,存活,存活對象,可回收對象,未使用,復(fù)制算法(Copying) 復(fù)制算法彌補(bǔ)了標(biāo)記-清除算法中,內(nèi)存布局混亂的缺點(diǎn) 缺點(diǎn):1.浪費(fèi)了一半的內(nèi)存。 2.如果對象的存活率很高,我們可以極端一點(diǎn),假設(shè)是100%存活,那么我們需要將所有對象都復(fù)制一遍,并將所有引用地址重置一遍。復(fù)制這一工作所花費(fèi)的時(shí)間,在對象存活率達(dá)到一定程度時(shí),將會(huì)變的不可忽視。,前,后,存活,存活對象,可回收對象,未使用,標(biāo)記-整理算法(Mark-Compact) 標(biāo)記過程和標(biāo)記-清除算法一樣,后續(xù)步驟不是將可回收對象進(jìn)行清理,而是讓所有存活對象都向一端移動(dòng),然后直接清理掉邊界以外的內(nèi)存,移動(dòng)的對象內(nèi)存地址被重置。 缺
11、點(diǎn):1.移動(dòng)對象的同時(shí)需要修正指針,效率低,前,后,存活,存活對象,可回收對象,未使用,以上三種垃圾回收算法對比,可回收對象,分代收集算法 年輕代采用復(fù)制算法,年老代采用標(biāo)記-清除、標(biāo)記-整理算法 年輕代與年老代空間分配可通過虛擬機(jī)參數(shù)-XX:NewRatio,-XX:NewSize ,-XX:MaxNewSize,-Xmn調(diào)整,Eden區(qū)與Survivor區(qū)空間分配可通過虛擬機(jī)參數(shù)-XX:SurvivorRatio調(diào)整,可回收對象,Eden,S1,S2,Tenured,垃圾收集器,可回收對象,Serial,ParNew,Parallel Scavenge,CMS,Parallel Old,S
12、erial Old,Young generation,Tenured generation,G1,CMS垃圾收集器 初始標(biāo)記 該階段進(jìn)行可達(dá)性分析,標(biāo)記GC ROOT能直接關(guān)聯(lián)到的對象 并發(fā)標(biāo)記 該階段進(jìn)行GC ROOT TRACING,由前階段標(biāo)記過的對象出發(fā),所有可到達(dá)的對象都在本階段中標(biāo)記,在第一個(gè)階段被暫停的線程重新開始運(yùn)行。 并發(fā)預(yù)處理 此階段標(biāo)記從新生代晉升的對象、直接分配到老年代的對象以及在并發(fā)階段被修改了的對象。 可中斷的并發(fā)預(yù)處理 CMS 有兩個(gè)參數(shù):CMSScheduleRemarkEdenSizeThreshold、CMSScheduleRemarkEdenPenetra
13、tion,默認(rèn)值分別是2M、50%。兩個(gè)參數(shù)組合起來的意思是預(yù)清理后,eden空間使用超過2M時(shí)啟動(dòng)可中斷的并發(fā)預(yù)清理(CMS-concurrent-abortable-preclean),直到eden空間使用率達(dá)到50%時(shí)中斷,進(jìn)入重新標(biāo)記階段。 重新標(biāo)記 暫停所有用戶線程,重新掃描堆中在并發(fā)標(biāo)記階段漏掉的對象,進(jìn)行可達(dá)性分析,標(biāo)記活著的對象。 并發(fā)清理 用戶線程被重新激活,同時(shí)清理那些無效的對象。 重置 CMS清除內(nèi)部狀態(tài),為下次回收做準(zhǔn)備。,CMS垃圾收集器圖解,Eden,S1,S2,Tenured,GC Roots,1,1,1,GC Roots,卡表,卡,3,2,2,Minor GC,GC Roots,3,GC Roots,3,2,4,3,3,調(diào)優(yōu)演示,-Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50,-Xms750m -Xmx750m -Xmn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中生借助可再生能源技術(shù)設(shè)計(jì)可持續(xù)校園方案的課題報(bào)告教學(xué)研究課題報(bào)告
- 2025年汽車維修企業(yè)財(cái)務(wù)管理制度
- 信息軟件公司子公司管理制度
- 跨學(xué)科教學(xué)中人工智能技術(shù)培訓(xùn)的實(shí)踐案例分析與教師專業(yè)發(fā)展路徑研究教學(xué)研究課題報(bào)告
- 忻州真石漆施工方案(3篇)
- 暖氣主管施工方案(3篇)
- 應(yīng)急護(hù)士調(diào)配預(yù)案(3篇)
- 洞內(nèi)樁施工方案(3篇)
- 天眼系統(tǒng)施工方案(3篇)
- 城市夜景施工方案(3篇)
- 史海啟智心育潤心:高中歷史教學(xué)與心理健康教育的融合探索
- 產(chǎn)品推廣項(xiàng)目管理辦法
- (2025秋新版)人教版二年級數(shù)學(xué)上冊全冊教案(教學(xué)設(shè)計(jì))
- 內(nèi)科護(hù)理副高答辯題庫及答案
- 小學(xué)無廢校園教學(xué)課件
- 地產(chǎn)公司品牌策劃方案
- 2025年高考真題-化學(xué)(黑吉遼卷) 含答案(黑龍江、吉林、遼寧、內(nèi)蒙古)
- 初三英語閱讀競賽含答案
- 中學(xué)生英語詞匯表3500(全)
- 2025年全國基層退役軍人服務(wù)中心(站)工作人員職業(yè)技能競賽備考試題庫(含答案)
- 物業(yè)催費(fèi)技巧培訓(xùn)
評論
0/150
提交評論