算法分爲標記和清除兩個階段,首先標記出全部須要回收的對象,而後回收全部已標記的對象。java
這個算法主要有兩個缺點:算法
GC鏈逐個檢查引用,會消耗比較多時間數組
GC停頓,爲了保持「一致性」,須要「Stop the world」安全
目前主流的Java虛擬機使用的都是準確式GC,當執行系統停頓下來後並不須要一個不漏的檢查完全部執行上下文和全局的引用變量,虛擬機應當有辦法直接得知哪些地方存着對象的引用數據結構
HotSpot使用一組稱爲OopMap的數據結構來記錄哪些地方存着對象的引用多線程
在類加載過程當中,HotSpot就把對象內什麼偏移量上是什麼類型的數據計算出來,在JIT編譯過程當中會在特定的位置記錄下棧和寄存器中哪些位置是引用併發