1. 前言
Java和C++之間顯著的一個(gè)區(qū)別就是對內(nèi)存的管理。和C++把內(nèi)存管理的權(quán)利賦予給開發(fā)人員的方式不同,Java擁有一套自動的內(nèi)存回收系統(tǒng)(Garbage Collection,GC)簡稱GC,可以無需開發(fā)人員干預(yù)而對不再使用的內(nèi)存進(jìn)行回收管理。
垃圾回收技術(shù)(以下簡稱GC)是一套自動的內(nèi)存管理機(jī)制。當(dāng)計(jì)算機(jī)系統(tǒng)中的內(nèi)存不再使用的時(shí)候,把這些空閑的內(nèi)存空間釋放出來重新投入使用,這種內(nèi)存資源管理的機(jī)制就稱為垃圾回收。
其實(shí)GC并不是Java的專利,GC的的發(fā)展歷史遠(yuǎn)比Java來得久遠(yuǎn)的多。早在Lisp語言中,就有GC的功能,包括其他很多語言,如:Python(其實(shí)Python的歷史也比Java早)也具有垃圾回收功能。
使用GC的好處,可以把這種容易犯錯(cuò)的行為讓給計(jì)算機(jī)系統(tǒng)自己去管理,可以防止人為的錯(cuò)誤。同時(shí)也把開發(fā)人員從內(nèi)存管理的泥沼中解放出來。
雖然使用GC雖然有很多方便之處,但是如果不了解GC機(jī)制是如何運(yùn)作的,那么當(dāng)遇到問題的時(shí)候,我們將會很被動。所以有必要學(xué)習(xí)下Java虛擬機(jī)中的GC機(jī)制,這樣我們才可以更好的利用這項(xiàng)技術(shù)。當(dāng)遇到問題,比如內(nèi)存泄露或內(nèi)存溢出的時(shí)候,或者垃圾回收操作影響系統(tǒng)性能的時(shí)候,我們可以快速的定位問題,解決問題。
接下來,我們來看下JVM中的GC機(jī)制是怎么樣的。