java面試一日一題:再談垃圾回收器中的串行、並行、並發

問題:請講下java中垃圾回收器的串行、並行、並發

分析:該問題主要考察在垃圾回收過程中垃圾回收線程和用戶線程的關係

回答要點:

主要從以下幾點去考慮,

1、串行、並行、並發的概念

2、如何考慮串行、並行、並發的這種關係

 

計算機執行程序實際是在CPU上執行,由於在計算機上會存在多個程序,也就是多個進程,每個進程中又存在多個線程,線程作為CPU執行的最小單位,是通過爭奪CPU時間片的方式來執行的,也就是多個線程在輪番獲得CPU時間片,從而獲得執行機會,由於CPU執行的時間很快,所以在用戶層面上來說CPU是同時在執行程序。多個線程如何交替獲得CPU時間片,獲得執行的機會。

在垃圾回收器的上下文語境中,可以作下方的解釋

串行

垃圾回收線程和用戶線程交替執行,且垃圾回收線程是單線程的,在執行垃圾回收線程時需要暫停用戶線程,出現stop the world。GC線程是單線程的並非說明環境是單CPU下,在多核CPU下進行GC的時候只會使用單核CPU。

 

並行

並行是多條垃圾回收線程並行工作,這裡肯定是在多核CPU環境下,多條垃圾回收線程同時執行,此時用戶線程處於暫停。

在垃圾回收期間,所以的CPU核心均指向GC線程,用戶線程暫停。

並發

並發是垃圾回收線程和用戶線程同時執行,也是在多核CPU環境下,垃圾回收線程和用戶線程並發執行,也就是同一個時刻CPU0上執行用戶線程,CPU1上有可能執行垃圾回收線程;

在垃圾回收期間,在多核CPU下,每個CPU執行的線程可能是不一樣的,達到GC線程和用戶線程並發執行的目的。

 

由串行到並行再到並發執行,這就是垃圾回收器的進化歷史,是隨着CPU的發展而發展的,最初是單核CPU,慢慢的到多核,為了充分利用多核CPU的優勢,所以有了並行的垃圾回收器,為了減少用戶線程的停頓時間,所以有了並發的垃圾回收器。從垃圾回收線程和用戶線程的關係上我們看到了垃圾回收器的演變過程。

 

有不當之處,歡迎指正!

Tags: