源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧

源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧

ID:30854066

大?。?06.87 KB

頁(yè)數(shù):17頁(yè)

時(shí)間:2019-01-04

源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧_第1頁(yè)
源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧_第2頁(yè)
源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧_第3頁(yè)
源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧_第4頁(yè)
源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧_第5頁(yè)
資源描述:

《源碼分析:java堆的創(chuàng)建-java開發(fā)java經(jīng)驗(yàn)技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)

1、源碼分析:Java堆的創(chuàng)建-編程開發(fā)技術(shù)源碼分析:Java堆的創(chuàng)建丿京文出處:iceAetcma虛擬機(jī)在內(nèi)存中申請(qǐng)一片區(qū)域,由虛擬機(jī)自動(dòng)管理,用來滿足應(yīng)用程序?qū)ο蠓峙涞目臻g需求,即堆空間。由于程序運(yùn)行的局部特性,程序創(chuàng)建的大多數(shù)對(duì)象都具有菲常短的生命周期,而程序也會(huì)創(chuàng)建一些生命周期特別長(zhǎng)的對(duì)象。簡(jiǎn)單的復(fù)制收集器無論對(duì)象的生命周期是長(zhǎng)是短,都會(huì)進(jìn)行復(fù)制操作。而生命周期較長(zhǎng)的對(duì)象在多次垃圾回收期間內(nèi)并不會(huì)被冋收,這就使得這些對(duì)象被來冋復(fù)制而使得算法性能大大下降。分代收集把堆分為多個(gè)了堆,分別用來存放不同壽命的對(duì)象。新生對(duì)象空間的將經(jīng)丿力最頻繁的垃圾回收,而對(duì)丁經(jīng)丿力了若干次垃圾收集后仍然存活的對(duì)

2、象,將成長(zhǎng)為成熟對(duì)彖,并移動(dòng)到成熟對(duì)象的子堆中,而對(duì)老生代子堆的垃圾冋收就不會(huì)像新生對(duì)象子堆那么頻繁。HotSpot的堆空間分為新生代(YoungGen)和老年代(OldGen,此外還冇位于非堆空間的永久代,但在Java8中將移除永久代),新生代又分為Eden區(qū)和2個(gè)Survivor區(qū)(From/To)用以進(jìn)行復(fù)制收集垃圾對(duì)彖。對(duì)Java堆和對(duì)彖的分析將從Java堆的創(chuàng)建開始,然后分析Java對(duì)彖的分配與垃圾回收。一、堆的實(shí)現(xiàn)方式在虛擬機(jī)的創(chuàng)建初始化過程屮,通過調(diào)用Universe的成員函數(shù)initialize_heap()將完成Java堆的初始化。在Universe模塊下的初始化將根據(jù)虛擬

3、機(jī)選項(xiàng)來選擇堆的具體實(shí)現(xiàn)方式:1.若虛擬機(jī)配置UseParallelGC,則Java堆的堆類型為ParallclScavcngcIIcap(并行收集堆)//hotspot/sre/share/vm/memory/universe?epp屮if(UseParallelGC){#ifndefSERIALGCUniverse::_collectedHeap二newParallelScavengeHeapO;#else//SERIALGCfatal(z,UseParallelGCnotsupportedinjavakernelvm.〃);#endif//SERIALGC2?若虛擬機(jī)配置UseGIGC

4、,那么將選擇堆類型為GlCollectedHeap,垃圾收集策略將使用專用的GlCollectorPolicy(垃圾優(yōu)先收集)策略elseif(UseGIGC){ttifndefSERIALGCGlCollccto^Policy*glp=newGlCollcctorPolicyBcstRcgionsFirst();GlCollectedHeap*glh=newGlCollectedHeap(glp);Universe::_collectedHeap二glh;#else//SERTALGCfatal("UseGIGCnotsupportedinjavakernelvm.〃);itendif//

5、SERIALGC3.否則,虛擬機(jī)將使用GenCol1ectedHeap(分代收集堆)Universe::_collectedHeap二newGenCol1ectedHeap(gc_policy);各個(gè)堆實(shí)現(xiàn)類的類關(guān)系如下:對(duì)于默認(rèn)情況下的堆實(shí)現(xiàn),還耍根據(jù)配置選擇垃圾回收策略gc_policy來構(gòu)造一個(gè)GenCollectedHeap,這里根據(jù)虛擬機(jī)配置選擇不同的GC策略:(1)?若虛擬機(jī)配置UseSerialGC,那么將使用MarkSweepPolicy(標(biāo)記-清除)策略GenCollectorPolicy*gc_policy;if(UseSerialGC){gc_policy二newMar

6、kSweepPolicy();}~(2).若虛擬機(jī)配置UscConcMarkSwccpGC和UscAdaptivcSizcPolicy,那么將使用ASConcurrcntMarkSwccpPolicy(ill適應(yīng)并發(fā)標(biāo)記-清除)策略,若沒有指定UseAdaptiveSizePolicy,虛擬機(jī)將默認(rèn)使用ConcurrentMarkSweepPolicy(并發(fā)標(biāo)記-清除)策略elseif(UseConcMarkSweepGC){ttifndefSERIALGCif(UscAdaptivcSizcPolicy){gcpolicy=newASConcurrentMarkSweepPolicy();

7、}else{gc_policy=newConcurrentMarkSweepPolicy();}-(1)?若沒冇進(jìn)行配置,虛擬機(jī)將默認(rèn)使用MarkSweepPolicy策略else{//defaultoldgenerationgcpolicy=newMarkSweepPolicy();}~如下表所示:虔擬機(jī)配置參數(shù)內(nèi)存堆實(shí)現(xiàn)回收策略UseParallelGCParallelScavengerHeapGener

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。