天天看點

Java工程師必知詞彙:GC

|名詞定義|

垃圾回收(Garbage Collection,縮寫為GC),在計算機科學中是一種自動的存儲器管理機制。當一個電腦上的動态存儲器不再需要時,就應該予以釋放,以讓出存儲器,這種存儲器資源管理,稱為垃圾回收。

垃圾回收器可以讓程式員減輕許多負擔,也減少程式員犯錯的機會。垃圾回收最早起源于LISP語言。目前許多語言如Smalltalk、Java、C#和D語言都支援垃圾回收器。

|特點|

垃圾回收器有兩個基本的原理:

1.考慮某個對象在未來的程式運作中,将不會被通路。

2.向這些對象要求歸回存儲器。

垃圾空間指的就是沒有任何棧記憶體所指向的堆記憶體空間,所有的垃圾将被GC不定期進行回收并且釋放無用記憶體空間,但是如果垃圾過多,一定将影響到GC的處理性能,進而降低整體的程式性能。

|Java中GC的實作|

Java中的GC使用分代收集(generation collection),依照對象存活時間的長短使用不同的垃圾收集算法,以達到最好的收集性能。

整個Java堆可以切割成為三個部分:

1.Young:

-Eden:存放新生對象。

-Survivor:存放經過垃圾回收沒有被清除的對象。

-semi-Spaces:和Survivor做Copying collection。

2.Tenured:對象多次回收沒有被清除,則移到該區塊。

3.Perm:存放加載的類别還有方法對象。

Java不同的世代使用不同的GC算法。

1.Minor collection:YOUNG世代使用将Eden還有Survivor内的資料利用semi-space做複制收集(Copying collection),并将原本Survivor内經過多次垃圾收集仍然存活的對象移動到Tenured。

2.Major collection則會進行Minor collection,Tenured世代則進行标記壓縮收集。

|參考資料|

[1] 阿裡雲大學Java視訊課程

[2] Java開發者

[3] 維基百科