JVMGC的過程

JVM GC只回收堆區和方法區

堆有存放對象的兩大區域,新生代和老年代,新生代又分成三個區域,一個Eden和兩個Survivor區,默認空間比例是8:1:1。
新實例的對象首先存放在Eden區,當Eden空間不足,則進行一個minorGC,將存活的對象放在其中一個Survivor中,並且每次minorGC對象年齡加一,當這個Survivor中空間不足,將進行minorGC時把存活的對象複製到另一個Survivor,清空此Survivor,當對象的年齡達到閾值時,將把對象放進老年代,當老年代的空間不足時則進行一個FullGC,或當一個大對象(需要大量連續存儲空間的對象)進行一次minorGC存活下來,可直接進入老年代,避免Eden與Survivor之間的大量的複製。


持久代,也稱之爲方法區
用於保存類常量以及字符串常量。注意,這個區域不是用於存儲那些從老年代存活下來的對象,這個區域也可能發生GC。發生在這個區域的GC事件也被算爲 Major GC 。只不過在這個區域發生GC的條件非常嚴苛,必須符合以下三種條件纔會被回收:
1、所有實例被回收
2、加載該類的ClassLoader 被回收
3、Class 對象無法通過任何途徑訪問(包括反射)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章