1. 程式人生 > >《深入理解JAVA虛擬機器》垃圾回收時為什麼會停頓

《深入理解JAVA虛擬機器》垃圾回收時為什麼會停頓

停頓現象

很多網上資料都會說到JAVA語言的一個劣勢就是垃圾蒐集時,整個程序會停頓。

到底是不是呢?

答案是確實存在。

 

為什麼會停頓

垃圾收集的一個前提是要判斷程序中的物件哪些是垃圾記憶體,哪些不是。

怎麼判斷呢,JVM裡面使用了一種叫可達性分析的技術來列舉根節點。

一言以蔽之,JVM的記憶體空間裡的若干物件都會有聯絡,形成樹結構,如果一個物件通過尋路,能夠找到根節點,那麼這個物件就是活的,不能回收,否則就要回收。

 

在這個可達性分析過程中,是必須要求分析過程中樹結構是不變的,也就是一致的。這意味著這個過程中,當前JAVA程序必須暫停,這就是停頓的根本原因。