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

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

資料 答案 就是 能夠 jvm的內存 bsp 深入 如果 哪些

停頓現象

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

到底是不是呢?

答案是確實存在。

為什麽會停頓

垃圾收集的一個前提是要判斷進程中的對象哪些是垃圾內存,哪些不是。

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

一言以蔽之,JVM的內存空間裏的若幹對象都會有聯系,形成樹結構,如果一個對象通過尋路,能夠找到根節點,那麽這個對象就是活的,不能回收,否則就要回收。

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

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