問題:為保證可達性分析結果的準确性,需挂起使用者線程(STW),再從各線程的執行上下文中收集 GC Root,如何通知線程挂起?
安全點:HotSpot 内部有線程中斷标記;在各線程的方法調用、循環跳轉、異常跳轉等會長時間執行的指令處,額外插入檢查該标記的test高效指令;
若輪詢發現标記為真,線程會主動在最近的 SafePoint 處挂起,此時其棧上對象的引用關系不再變化,可收集 GC Root 對象
安全區域:引用關系不會變化的指令區域,可安全地收集 GC Root;線程離開此區域時,若 GC Root 收集過程還未結束,則需等待
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN2kDO3MmMjZGZwYTM1IDOxYzX0QzNwcTMzAzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)