- JVM G1源碼分析和調(diào)優(yōu)
- 彭成寒
- 556字
- 2019-04-22 18:14:49
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)存管理上可以分為代管理和非代管理。
我們首先看一下基本的收集算法。
推薦閱讀
- Beginning Java Data Structures and Algorithms
- Developing Middleware in Java EE 8
- Python網(wǎng)絡(luò)爬蟲從入門到實踐(第2版)
- Swift 3 New Features
- JavaScript前端開發(fā)與實例教程(微課視頻版)
- Unity Shader入門精要
- INSTANT Django 1.5 Application Development Starter
- Hands-On Natural Language Processing with Python
- 數(shù)據(jù)結(jié)構(gòu)習(xí)題解析與實驗指導(dǎo)
- 大學(xué)計算機基礎(chǔ)實驗指導(dǎo)
- SQL Server與JSP動態(tài)網(wǎng)站開發(fā)
- 執(zhí)劍而舞:用代碼創(chuàng)作藝術(shù)
- 詳解MATLAB圖形繪制技術(shù)
- Getting Started with Nano Server
- Java程序設(shè)計實用教程(第2版)