|名詞定義|
垃圾回收(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] 維基百科