java虛擬機學習筆記(二)垃圾回收

          Posted on 2009-05-14 20:37 eric_xu 閱讀(409) 評論(0)  編輯  收藏 所屬分類: JVM

          釋放不再被程序使用的對象。檢測和回收。

          垃圾檢測:建立一個根對象的集合,并檢測從這些根對象開始的可觸及性來實現。任何被根對象引用的對象都是可觸及的,任何被活動的對象引用的對象都是可觸及的。

          引用計數收集器,引用計數無法檢測出循環;跟蹤收集器,標記并清除。清理對碎塊,壓縮收集器,設置間接對象引用層(對象句柄表),只需句柄更新新位置。

          拷貝收集器,把所有活動對象移動到新區域。停止并拷貝,需要兩倍內存,任何時候只能使用一半。

          按代收集的收集器,把對象按照壽命分組,對最年幼的進行最頻繁的垃圾收集。

          漸進式垃圾收集器,不試圖一次性發現并回收所有不可觸及的對象,而是每次發現并回收一部分。

          火車算法

          火車算法執行的時候,或者收集最小數字火車中的最小數字車廂,或者收集整個最小數字火車。

          如果整個火車都是垃圾對象,那么整個火車都被收集。否則,收集最小數字車廂。

          收集最小數字車廂時,把最小數字車廂內部有被其他車廂引用的對象轉移到引用的車廂,如此循環,最后收集整個車廂。

          收集最小數字火車時,把最小數字車廂內部有被其他火車引用對象則會轉移到引用的火車,如此循環,最后收集整個火車。

          火車算法保證大型的循環數據會被完全收集。

          記憶集合,指向車廂或火車內對象的所有引用的集合。

          終結方法,垃圾收集器在釋放對象前必須運行。第二遍掃描,終結方法可能復活了某些不再被引用的對象。根結點不可觸及和終結對象不可觸及的對象可以立即被釋放。

          對象可觸及性的生命周期

          可觸及,可復活,不可觸及。

          SoftReferenceWeakReferencePhantomReference 都是 java.lang.ref.Reference 類的子類。強引用與這三種弱引用之間最基本的差別是,強引用禁止引用目標被垃圾收集,而那三種引用不禁止。

          ?   強可觸及 對象可以從根節點不通過任何引用對象搜索到。

          ?   軟可觸及 垃圾收集器可能回收軟可觸及的對象所占據的內存。如果這發生了,它會清除所有到此軟可觸及對象的軟引用。當垃圾收集器清除一個和引用隊列有關聯的軟引用對象時,它把該軟引用對象加入隊列。

          ?   弱可觸及 垃圾收集器必須歸還弱可觸及對象所占據的內存。這發生的時候,它會清除所有到此弱可觸及對象的弱引用。當垃圾收集器清除一個和引用隊列有關聯的的弱引用對象時,它把該弱引用對象加入隊列。

          ?   可復活的 對象既不是強可觸及、軟可觸及,也不是弱可觸及,但是仍然可能通過執行某些終結方法復活到這幾種狀態之一。

          ?   影子可觸及 一旦某個被影子引用的對象變成影子可觸及狀態,垃圾收集器立即把該引用對象加人隊列。垃圾收集器從不會清除一個影子引用,所有的影子引用都必須由程序明確地清除。

          弱引用與軟引用的區別在于:只具有弱引用的對象擁有更短暫的生命周期。

          軟引用可以創建內存中的緩存,弱引用可以創建規范映射。

          posts - 37, comments - 5, trackbacks - 0, articles - 0

          Copyright © eric_xu

          主站蜘蛛池模板: 永城市| 彩票| 新竹县| 揭阳市| 滁州市| 江都市| 轮台县| 乌拉特后旗| 景德镇市| 绥滨县| 兖州市| 芜湖市| 平阴县| 淮南市| 德安县| 盘锦市| 克什克腾旗| 舟山市| 尚义县| 贺兰县| 台东市| 达州市| 嘉定区| 车险| 广宁县| 原平市| 南郑县| 武隆县| 湾仔区| 青岛市| 康定县| 四子王旗| 灵台县| 双辽市| 随州市| 哈密市| 西青区| 常山县| 泰兴市| 上虞市| 河南省|