下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
GC與內(nèi)存分GC一、Java內(nèi)存模按照的說法:Java虛擬機具有一個堆,堆是運行時數(shù)據(jù)區(qū)域,所有類實例和數(shù)組的JVM主要管理兩種類型內(nèi)存:堆和非堆,堆內(nèi)存(HeapMemory)Java虛擬機啟動時創(chuàng)建,非堆內(nèi)存(Non-heapMemory)JVM堆之外的內(nèi)存。簡單來說,堆是Java代碼可及的內(nèi)存,留給開發(fā)人員使用的;非堆是JVM留給自己用的,包含方法區(qū)、JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存(如 JVM堆內(nèi)存(HeapMemory):Java其它(Other):JVM-Xmx參數(shù)指定。JVMJVM,作為JVMHeap內(nèi)存使用,這部分內(nèi)存是由-Xms參數(shù)指定。 40%時,JVM就會增大堆直到-Xmx70%時,JVM會減少堆直到-Xms可以通過-XX:MaxPermSize設(shè)置Non-Heap大小,詳細參見我的博二、Java內(nèi)存分JVM會試圖為相關(guān)Java對象在Eden當EdenJVM試圖釋放在Eden中所有不活躍的對象(這屬于1或更高級的回收),釋放后若空間仍然不足以放入新對象,則試圖將部分Eden中活躍對象放入SurvivorSurvivor區(qū)被用來作為Eden及OLD的中間交換區(qū)域,當OLD區(qū)空間足夠時,Survivor區(qū)的對象會被移到Old區(qū),否則會被保留在Survivor區(qū)當OLD區(qū)空間不夠時,JVM會在OLD區(qū)進行完全的收集(0級完全收集后,若Survivor及OLD區(qū)仍然無法存放從Eden過來的部分對象,導致無法在Eden區(qū)為新對象創(chuàng)建內(nèi)存區(qū)域,則出現(xiàn)”outofmemory”錯三、GC基本原GC(GarbageCollection),是JAVA/.NET中的收集器Java是由C++發(fā)展來的,它擯棄了C++中一些繁瑣容易出錯的東西,引入了計數(shù)器的概GC(C#JAVA),JavaGC對于程序員來說,分配對象使用new關(guān)鍵字;釋放對象時,只要將對象所有賦值為null,讓程序不能夠再到這個對象,我們稱該對象為"不可達的".GC將負責回收所有"對于GC來說,當程序員創(chuàng)建對象時,GC就開始這個對象的地址、大小以及使用情況。通常,GC(heap)中的所有對象。通過這種方式確GC,GC有責任回收這些內(nèi)存空間。但是,為了保證GCJavaGCJVMJavaGC題,努力減少這種不確定性給Java程序帶來的影響。四、GC分代劃JVMHeapYoungGenerationOldYoungGenerationEdenSpace的空間,主要是用來存放新生的對SurvivorSpaces(from、to),它們的大小總是一樣,它們用來存放每次垃在YoungGeneration塊中,回收一般用Copying的算法,速度快。每次GC的時候,存的對象首先由Eden拷貝到某個SurvivorSpace,當SurvivorSpace空間liveOldGenerationGC后,Eden在OldGeneration塊中,回收一般用 pact的算法,速度慢些,但減少回收分多級,0級為全部(Full)的回收,會回收OLD段中的;1級或以上為部分回收,只會回收Young中的,內(nèi)存溢出通常發(fā)生于OLD段或PermJava對象的情況。GC(IncrementalGC)GCJVMheapCPU。GCGCJavaGCGCGC例些內(nèi)存有限的設(shè)備,對內(nèi)存的使用量非常敏感,希望GC能夠準確的回收內(nèi)存,它并不在意程序速度的快慢。另外一些實時,就不能夠允許程序有長時間的中斷。這種方式減少GC對用戶程序的影響。雖然,增量式GC在整體性能上可能不如普通GC的效SunJDKHotSpotJVMGC。HotSpotJVMGC收一定比例的不可達對象,保證程序的順暢運行。protectedvoidfinalize()throwsThrowable{該方法的修飾符為protected,由于所有類為Object的子類,因此用戶類很容易由于,finalize函數(shù)沒有自動實現(xiàn)鏈式調(diào)用,須手動的實現(xiàn),因此finalize函數(shù)super.finalize()。通過這種方式,我們可以實現(xiàn)從下到上實現(xiàn)finalizeJavaJVMfinalizeJVM被調(diào)用。另外,規(guī)范還保證finalizeJavaC++中的析構(gòu)函數(shù),將很多對象、資源的釋放都放其二、在finalize運行完成之后,該對象可能變成可達的,GC還要再檢查一次該對象是否是可達的。因此,使用finalizeGCGCfinalize通常應該以通過程序本身管理(包括釋放)finalizefinalize[java]view下面給出一個例子說明,finalize[java]viewclassclassMyObjectTest Test對象,在finalize中時用于恢復可達publicMyObject(Testt)main Test對}protectedvoidfinalize()main.ref 恢復本對象,讓本對象可System.out.println("Thisis 用于測試finalize只運一}}classTestMyObjectpublicstaticvoidmain(String[]args)Testtest=newtest.ref=newtest.ref MyObject對象為不可達對象,finalizeif(test.ref!=System.out.println("MyObject還活著}25.[java]view 1.1.classMyObject Test Test對象,在finalize中時用于恢復可達publicMyObject(Testt)main Test對}protectedvoidfinalize()main.ref 恢復本對象,讓本對象可一System.out.println("Thisis 用于測試finalize只運}}classTestMyObjectpublicstaticvoidmain(String[]args)Testtest=newtest.ref=newtest.ref MyObject對象為不可達對象,finalizeif(test.ref!=System.out.println("MyObject還活著 25.ThisisfinalizeMyObjectMyObjectfinalize候,finalizefinalize七、GC程序交GC進行交互呢?Java2其中定義了三種類。這三種類分別為:SoftReference、WeakReference、通過使用這些類,程序員可以在一定程度與GC進行交互,以便改善GC的工作效率,這些類的強度介于可達對象和不可達對象之間。創(chuàng)建一個對象也非常容易,例如:如果你需要創(chuàng)建一個SoftReference對象,那么首先創(chuàng)建一個對象,并采用普通方式(可達對象);然后再創(chuàng)建一個SoftReference該對象;最后將普通設(shè)置為null。通過這種方式,這個對象就只有一個SoftReference。同時,我們稱這個對象為SoftReference對象。SoftReference的主要特點是據(jù)有較強的功能。只有當內(nèi)存不夠的時候,才進行回收Java拋出OutOfMemory異常之前,被設(shè)置為null。它可以用于實現(xiàn)一些常用的緩[java]view[java]view申請一個圖像對Imageimage=new…使用…創(chuàng)建Image對使用完了image,將它設(shè)置為;SoftReferencesr=new…下次使用if(sr!=null)image=newImage();//由于GC由于低內(nèi)存,已釋放image,因此需要重新載sr=new16.[java]view 申請一個圖像對Imageimage=new…使用…創(chuàng)建Image對使用完了image,將它設(shè)置為;SoftReferencesr=new…下次使用if image=newImage();//GC由于低內(nèi)存,已釋放image,因此需要重新裝sr=new16.Weak對象與Soft對象的最大不同就在于:GC在進行回收時,需要通過算法檢查是否回收Soft對象,而對于Weak對象,GC總是進行回收。Weak對象更容GCGCWeakWeak群常常需要好幾次GC的運行才能完成。Weak對象常常用于Map結(jié)構(gòu)中,數(shù)據(jù)量較大的對象,一旦該對象的強為null時,GC能夠快速地回收該對象空間。Phantom的用途較少,主要用于輔助finalize函數(shù)的使用。Phantom對象指一些對finalizeGCfinalizeReferenceclear()方法,增強資源回收機制的靈活性。八、Java編程建GCGC都是讓變量在退出活動域(scope
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年P(guān)TC卷發(fā)器加熱器項目投資價值分析報告
- 2025年涂布項目可行性研究報告
- 2025至2030年中國爐灶自動節(jié)能器數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年活塞式角座閥項目投資價值分析報告
- 2025至2030年中國容器包裝配件數(shù)據(jù)監(jiān)測研究報告
- 2025年蛋卷機項目可行性研究報告
- 2025年燈盞項目可行性研究報告
- 2025年中國割絨印花童被市場調(diào)查研究報告
- 2025至2030年高溫度拼板膠項目投資價值分析報告
- 2025至2031年中國黏結(jié)劑行業(yè)投資前景及策略咨詢研究報告
- 【高速鐵路乘務工作存在的問題及對策研究9800字】
- 北師大版英語課文同步字帖三年級下冊課文對話原文及翻譯衡水體英語字帖三年級起點
- GB/T 2550-2016氣體焊接設(shè)備焊接、切割和類似作業(yè)用橡膠軟管
- GB/T 21295-2014服裝理化性能的技術(shù)要求
- 2022年行業(yè)報告我國FEVE氟樹脂涂料發(fā)展現(xiàn)狀及展望
- 焊口外觀檢查記錄
- 走向核心素養(yǎng)深度學習的教學實踐課件
- Y2系列電機樣本
- 市域社會治理現(xiàn)代化解決方案
- 許慎《說文解字》(全文)
- 我國應急通信保障能力評估體系探究(金)
評論
0/150
提交評論