問題:請講下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的優勢,所以有了並行的垃圾回收器,為了減少使用者執行緒的停頓時間,所以有了併發的垃圾回收器。從垃圾回收執行緒和使用者執行緒的關係上我們看到了垃圾回收器的演變過程。
有不當之處,歡迎指正!