JAVA基礎(chǔ)-Java5.0垃圾收集原理_第1頁(yè)
JAVA基礎(chǔ)-Java5.0垃圾收集原理_第2頁(yè)
JAVA基礎(chǔ)-Java5.0垃圾收集原理_第3頁(yè)
JAVA基礎(chǔ)-Java5.0垃圾收集原理_第4頁(yè)
JAVA基礎(chǔ)-Java5.0垃圾收集原理_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JAVA基礎(chǔ):Java5.0垃圾收集原理垃圾收集器的選擇何時(shí)會(huì)對(duì)用戶產(chǎn)生影響呢?對(duì)很多應(yīng)用程序來(lái)說(shuō),它根本沒有影響。也就是說(shuō),在垃圾收集產(chǎn)生的暫停的頻率與持續(xù)時(shí)間適度的狀況下,應(yīng)用程序可在其標(biāo)準(zhǔn)內(nèi)執(zhí)行。假如一個(gè)大型應(yīng)用程序消失擴(kuò)大,產(chǎn)生大量線程、處理器、套接字和很多內(nèi)存,就會(huì)消失例外。假如一個(gè)對(duì)象再也不能通過運(yùn)行程序中的任何指針到達(dá),則視其為垃圾。最直接的垃圾收集運(yùn)算法則簡(jiǎn)潔地在每個(gè)可到達(dá)的對(duì)象間迭代。那么,剩下的對(duì)象即為垃圾。這一方法所用的時(shí)間與活動(dòng)對(duì)象的數(shù)目成比例關(guān)系,且制止用于維護(hù)很多活動(dòng)數(shù)據(jù)的大型應(yīng)用程序。從Java 2開頭,虛擬機(jī)合并了很多應(yīng)用分代收集組合的各種收集運(yùn)算法則。盡管簡(jiǎn)潔

2、的垃圾收集檢查堆中的每一個(gè)活動(dòng)對(duì)象,但分代收集利用多數(shù)應(yīng)用程序的幾個(gè)憑閱歷觀看得到的特性來(lái)避開額外工作。這些觀看得到的特性中最為重要的一個(gè)就是所謂的早期失效率。很多對(duì)象安排以后很快“已經(jīng)死亡。例如,迭代器對(duì)象僅在單獨(dú)循環(huán)中存活。為優(yōu)化這種狀況,我們對(duì)內(nèi)存進(jìn)展分代治理,或在內(nèi)存池中保存不同年齡的對(duì)象。當(dāng)一代裝滿時(shí),就對(duì)這個(gè)代進(jìn)展垃圾收集。對(duì)象被安排到更年齡對(duì)象代,或新生代中。由于早期失效率,多數(shù)對(duì)象在那里死亡。假如垃圾收集器成為瓶頸,你可能盼望自定義代的大小。具體檢查垃圾收集器的輸出,然后探究單共性能計(jì)量單位對(duì)垃圾收集器參數(shù)的靈敏度。初始化時(shí),保存一個(gè)的地址空間,在必要時(shí)才安排給物理內(nèi)存。為對(duì)象

3、內(nèi)存保存的全部地址空間可分為新生代和舊生代。新生代由eden和兩個(gè)生存空間組成。對(duì)象最初安排到eden中。任何時(shí)候,一個(gè)生存空間為空,并作為下一個(gè)空間的目的地,在eden與另一個(gè)生存空間中復(fù)制活動(dòng)對(duì)象的集合。對(duì)象以這種方式在生存空間中復(fù)制,直到它們老化,或復(fù)制到舊生代中。與舊生代關(guān)系親密的第三個(gè)代稱為永生代。這是一個(gè)特殊的代,由于它保存虛擬機(jī)所需要的數(shù)據(jù),來(lái)描述在Java語(yǔ)言中沒有等同物的對(duì)象。例如,描述類與方法的對(duì)象存儲(chǔ)在永生代中。性能因素Java應(yīng)用程序特殊是垃圾收集有兩共性能計(jì)量單位:吞吐量與暫停。吞吐量是指在一段較長(zhǎng)時(shí)間內(nèi),沒有用于垃圾收集的時(shí)間百分比。吞吐量包括用于安排的時(shí)間但用于調(diào)

4、整安排速度的時(shí)間一般不包括在內(nèi)。暫停是應(yīng)用程序由于垃圾收集而消失的停立刻間。一些用戶還對(duì)其他因素較為敏感。例如,占用率footprint是一批工作進(jìn)程的集合,以頁(yè)和緩沖行數(shù)計(jì)量,在物理內(nèi)存有限或者有許多進(jìn)程的系統(tǒng)中,占用率可表示擴(kuò)展性。反響性Promptness是對(duì)象死去的時(shí)間和內(nèi)存變?yōu)榭捎脮r(shí)的時(shí)間差,是分布系統(tǒng),包括遠(yuǎn)程方法調(diào)用RMI中的重要因素。通常來(lái)說(shuō),特定的代大小選擇這些因素之間的平衡作用。例如,一個(gè)特別大的新生代的吞吐量可以,但這要以犧牲占用率、反響性和暫停時(shí)間為代價(jià)。你也可以犧牲吞吐量,應(yīng)用一個(gè)小型的新生代來(lái)使新生代暫停時(shí)間最短。假如你盼望提高有大量處理器的應(yīng)用程序的性能,你應(yīng)當(dāng)使

5、用吞吐量收集器。你可以用命令行標(biāo)記-XX:+UseParallelGC來(lái)激活吞吐量收集器。你可以用 ParallelGCThreads 選項(xiàng)-XX:ParallelGCThreads=來(lái)掌握垃圾收集器線程的數(shù)量。暫停時(shí)間目標(biāo)用命令行標(biāo)記-XX:MaxGCPauseMillis二來(lái)指定,這是對(duì)吞吐量收集器的一個(gè)示意,即它需要毫秒或更短的暫停時(shí)間。存在有很多調(diào)整代大小的選項(xiàng),如-XX:YoungGenerationSizeIncrement二用于新生代;而-XX:TenuredGenerationSizeIncrement=用于舊生代。假如應(yīng)用程序受益于較短的垃圾收集器暫停,且能夠在應(yīng)用程序運(yùn)行時(shí)

6、與垃圾收集器共享處理器資源,我建議使用并行低暫停收集器。假如舊生代占用率超出初始占用率即當(dāng)前堆的百分比用于并發(fā)收集啟動(dòng)之前,并發(fā)收集將啟動(dòng)。默認(rèn)的初始占用率約為68%。你可以用參數(shù)-XX:CMSInitiatingOccupancyFraction=進(jìn)展設(shè)置,這里的是當(dāng)前舊生代大小百分比。你能夠以并發(fā)階段遞增完成的方式使用并發(fā)收集器。這種模式這里稱之為 i-cms將收集器并發(fā)完成的工作分割成時(shí)間小段,安排在新生代收集之間。當(dāng)需要并發(fā)收集器供應(yīng)短暫停時(shí)間的應(yīng)用程序在擁有少量處理器的機(jī)器上運(yùn)行時(shí),這一特性很有幫忙。微調(diào)垃圾收集命令行參數(shù)-verbose:gc打印每個(gè)收集階段的信息。假如翻開此參數(shù),

7、你會(huì)在每個(gè)垃圾收集階段看到相像的輸出結(jié)果。例如:GC 325407K-83000K(776768K), 0.2300771 secsGC 325816K-83372K(776768K), 0.2454258 secsFull GC 267628K-83769K(776768K), 1.8479984 secs有兩個(gè)次要收集和一個(gè)主要收集(完全GC)。標(biāo)記-XX:+PrintGCDetails 打 印 收 集 的 其 他 信 息。 標(biāo) 記-XX:+PrintGCTimeStamps打印每次收集開頭的時(shí)間。列表A是兩個(gè)標(biāo)記被設(shè)定后的結(jié)果。另外,主要收集的信息由舊生代描述。在這里,舊生代使用率削減到

8、約10%,所用時(shí)間約為0.13秒。很多參數(shù)影響代的大小。在虛擬機(jī)的初始階段,堆的整個(gè)空間被保存。你可以用-Xmx選項(xiàng)指定保存空間的大小。假如-Xms參數(shù)的值小于-Xmx參數(shù)的值,表示不是全部的保存空間馬上提交給虛擬機(jī)。堆的不同局部(永生代、舊生代和新生代)必要時(shí)可能會(huì)超出虛擬空間的限制。默認(rèn)狀況下,在每次收集時(shí),虛擬機(jī)增大或縮小堆的大小,努力將自由空間與活動(dòng)對(duì)象的比例保持在一個(gè)特定的范圍內(nèi)。這個(gè)范圍是一個(gè)百分?jǐn)?shù),由參數(shù)-XX:MinHeapFreeRatio=和-XX:MaxHeapFreeRatio=設(shè)定,-Xms為下限,-Xmx為上限。除非有暫停問題,否則向虛擬機(jī)許可盡可能多的內(nèi)存。默認(rèn)的

9、大小(64MB) 般都太小。你可以在Sun網(wǎng)站找到其他VM選項(xiàng)的說(shuō)明。你還可以為新生代的堆設(shè)定一個(gè)比例。新生代越大,次要收集就越少發(fā)生。但是,在一個(gè)有限大小的堆中,新生代越大就意味著舊生代越小,這會(huì)增加主要收集的頻率。選擇要依據(jù)應(yīng)用程序安排的對(duì)象的壽命安排來(lái)打算。新生代的大小由NewRatio掌握。例如,設(shè)定-XX:NewRatio=3說(shuō)明新生代與舊生代之比為1: 3。假如盼望的話,可用參數(shù)SurvivorRatio來(lái)調(diào)整生存空間的大小,但它并不如性能重要。例如,-XX:SurvivorRatio=6說(shuō)明每個(gè)生存空間與eden的比為1: 6。除非你發(fā)覺過多主要收集或暫停時(shí)間問題,向新生代許可大量?jī)?nèi)存。Java 5.0執(zhí)行了三個(gè)不同的垃圾收集器。吞吐量收集器使用新生代收集器的并行版本。假如-XX:+UseParallelGC選項(xiàng)傳遞給命令行,則使用并行收集器;假如-Xincgc或-XX:+UseConcMarkSweepGC選項(xiàng)傳遞給命令行,則使用并發(fā)收集器。在這種狀況下,收集過程中應(yīng)用程序會(huì)消失短期暫停。假如-XX:+UseTrainGC傳遞經(jīng)命令行,則使用遞增式低暫停收集器。將來(lái)版本將不支持這一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論