天天看點

GC安全點

問題:為保證可達性分析結果的準确性,需挂起使用者線程(STW),再從各線程的執行上下文中收集 GC Root,如何通知線程挂起?

安全點:HotSpot 内部有線程中斷标記;在各線程的方法調用、循環跳轉、異常跳轉等會長時間執行的指令處,額外插入檢查該标記的test高效指令;

    若輪詢發現标記為真,線程會主動在最近的 SafePoint 處挂起,此時其棧上對象的引用關系不再變化,可收集 GC Root 對象

安全區域:引用關系不會變化的指令區域,可安全地收集 GC Root;線程離開此區域時,若 GC Root 收集過程還未結束,則需等待

GC安全點