在垃圾回收過程中,應用軟件處於一種Stop the World的狀態。在Stop the World的狀態下,應用程序的所有線程都會掛起,暫停一切工作,等待垃圾回收的完成。如果垃圾回收時間過長,應用程序會被掛起很久,將嚴重影響用戶體驗或者系統的穩定性。爲了解決這個問題,即對實時垃圾手機算法的研究直接導致了增量收集算法的誕生。

多進程運行思路

最初,爲了進行實時垃圾收集,可以設計一個多進程的運行環境,比如用一個進程執行垃圾收集工作,另一個進程執行程序代碼。這樣一來,垃圾收集工作看上去彷彿是在後臺悄悄的幹活,不會打斷程序代碼的運行。垃圾收集包括標記和清除2個工作階段,如果垃圾收集器在第一階段標記的記過很可嫩古北另一個進程中的內存操作代碼修改了,以至於第二階段的工作無法開展。

基本思想

如果一次性將所有的垃圾進行處理,需要造成系統長時間的停頓,那麼就可以讓垃圾收集線程和應用程序線程交替執行。每次,垃圾收集線程值收集一小片區域的內存,接着切換到應用程序線程,依次反覆,直到垃圾收集完成。

存在問題

使用這種方法,由於在垃圾回收過程中,間斷性的執行了應用程序代碼,所以能減少系統的停頓時間,但是,因爲線程切換和上下文轉換的消耗,會使得垃圾回收的成本上升,造成系統的吞吐量下降。

相關文章