垃圾回收主要發生在堆區
先了解一下堆區的結構
首先GC主要分爲大GC和小GC,小GC主要分佈在新生區,大GC
主要發生在養老區,當伊甸區達到最大容量的百分之七十的時候就會觸發小GC,當在伊甸區的每個對象熬過一次就會到達倖存者區,倖存者區可以分爲from區和to區,誰是空的誰就是to區,當在倖存者區熬過一定次數的對象就會到達養老區,當養老區滿時,就會觸發大GC。
GC算法一般包括 複製算法,標記清除算法,標記整理算法。
1.新生代一般使用複製算法
複製算法:將活動對象複製到另一個空間,然後把原來的空間清空。
優點:佈局比標記清除算法要整齊
缺點:當存活對象過多時,耗費大量的內存。
2.老年代一般都是標記整理和標記清除混合使用。
標記清除算法:對存活的對象進行標記,然後對掃描整個內存,回收未被標記的對象。
優點:不會有額外的 空間
缺點:進行兩次掃描,耗時嚴重。會產生大量的碎片。
標記整理算法:標記所有的存活對象,然後整理所有存活的對象的引用地址。
優點:內存利用率比較高。
缺點:效率是最慢的。