官术网_书友最值得收藏!

1.3 回收算法概述

垃圾回收(Garbage Collection,GC)指的是程序不用關(guān)心對象在內(nèi)存中的生存周期,創(chuàng)建后只需要使用對象,不用關(guān)心何時釋放以及如何釋放對象,由JVM自動管理內(nèi)存并釋放這些對象所占用的空間。GC的歷史非常悠久,從1960年Lisp語言開始就支持GC。垃圾回收針對的是堆空間,目前垃圾回收算法主要有兩類:

·引用計數(shù)法:在堆內(nèi)存中分配對象時,會為對象分配一段額外的空間,這個空間用于維護一個計數(shù)器,如果對象增加了一個新的引用,則將增加計數(shù)器。如果一個引用關(guān)系失效則減少計數(shù)器。當(dāng)一個對象的計數(shù)器變?yōu)?,則說明該對象已經(jīng)被廢棄,處于不活躍狀態(tài),可以被回收。引用計數(shù)法需要解決循環(huán)依賴的問題,在我們眾所周知的Python語言里,垃圾回收就使用了引用計數(shù)法。

·可達性分析法(根引用分析法),基本思路就是將根集合作為起始點,從這些節(jié)點開始向下搜索,搜索所走過的路徑稱為引用鏈,當(dāng)一個對象沒有被任何引用鏈訪問到時,則證明此對象是不活躍的,可以被回收。

這兩種算法各有優(yōu)缺點,具體可以參考其他文獻。JVM的垃圾回收采用了可達性分析法。垃圾回收算法也一直不斷地演化,主要有以下分類:

·垃圾回收算法實現(xiàn)主要分為復(fù)制(Copy)、標記清除(Mark-Sweep)和標記壓縮(Mark-Compact)。

·在回收方法上又可以分為串行回收、并行回收、并發(fā)回收。

·在內(nèi)存管理上可以分為代管理和非代管理。

我們首先看一下基本的收集算法。

主站蜘蛛池模板: 同仁县| 镇雄县| 星子县| 济源市| 元阳县| 庆安县| 临泉县| 茶陵县| 图木舒克市| 望江县| 阳山县| 永福县| 宜州市| 道孚县| 揭西县| 邳州市| 娄烦县| 启东市| 紫云| 时尚| 文成县| 综艺| 北辰区| 得荣县| 荆门市| 龙岩市| 宣武区| 云阳县| 东台市| 石景山区| 姜堰市| 水城县| 富裕县| 会东县| 邵东县| 阿荣旗| 铜梁县| 玉龙| 磐石市| 太康县| 普兰县|