官术网_书友最值得收藏!

1.2 本書常見術語

JVM系統非常復雜,市面上有很多中英文書籍從不同的角度來介紹JVM,其中都用到了很多術語,但是大家對某些術語的解釋并不完全相同。為了便于讀者的理解,在這里統一定義和解釋本書使用的一些術語。這些術語有些是我們約定俗成的叫法,有些是JVM里面的特別約定,還有一些是G1算法引入的。為了保持準確性,這里僅僅解釋這些術語的含義,后續會進一步解釋相關內容,本書將盡量使用這里定義的術語。

·并行(parallelism),指兩個或者多個事件在同一時刻發生,在現代計算機中通常指多臺處理器上同時處理多個任務。

·并發(concurrency),指兩個或多個事件在同一時間間隔內發生,在現代計算機中一臺處理器“同時”處理多個任務,那么這些任務只能交替運行,從處理器的角度上看任務只能串行執行,從用戶的角度看這些任務“并行”執行,實際上是處理器根據一定的策略不斷地切換執行這些“并行”的任務。

在JVM中,我們也常看到并行和并發。比如,典型的ParNew一般稱為并行收集器,CMS一般稱為并發標記清除(Concurrent Mark Sweep)。這看起來很奇怪,因為并行和并發是從處理器角度出發,但是這里明顯不是,實際上并行和并發在JVM被重新定義了。

JVM中的并行,指多個垃圾回收相關線程在操作系統之上并發運行,這里的并行強調的是只有垃圾回收線程工作,Java應用程序都暫停執行,因此ParNew工作的時候一定發生了STW。本書提到的***ParTask(例如G1ParTask)指的就是在這些任務運行的時候應用程序都必須暫停。

JVM中的并發,指垃圾回收相關的線程并發運行(如果啟動多個線程),同時這些線程會和Java應用程序并發運行。本書提到的***Concurrent***Thread(例如ConcurrentG1RefineThread)就是指這些線程和Java應用程序同時運行。

·Stop-the-world(STW),直譯就是停止一切,在JVM中指停止一切Java應用線程。

·安全點(Safepoint),指JVM在執行一些操作的時需要STW,但并不是任何線程在任何地方都能進入STW,例如我們正在執行一段代碼時,線程如何能夠停止?設計安全點的目的是,當線程進入到安全點時,線程就會主動停止。

·Mutator,在很多英文文獻和JVM源碼中,經常看到這個單詞,它指的是我們的Java應用線程。Mutator的含義是可變的,在這里的含義是因為線程運行,導致了內存的變化。GC中通常需要STW才能使Mutator暫停。

·記憶集(Remember Set),簡稱為RSet。主要記錄不同代際對象的引用關系。

·Refine,尚未有統一的翻譯,有時翻譯為細化,但是不太準確,本書中不做翻譯。G1中的ConcurrentG1RefineThread主要指處理RSet的線程。

·Evacuation,轉移、撤退或者回收,簡稱為Evac,本書中不做翻譯。在G1中指的是發現活躍對象,并將對象復制到新地址的過程。

·回收(Reclaim),通常指的是分區對象已經死亡或者已經完成Evac,分區可以被JVM再次使用。

·Closure,閉包,本書中不做翻譯。在JVM中是一種輔助類,類似于我們已知的iterator,它通常提供了對內存的訪問。

·GC Root,垃圾回收的根。在JVM的垃圾回收過程中,需要從GC Root出發標記活躍對象,確保正在使用的對象在垃圾回收后都是存活的。

·根集合(Root Set)。在JVM的垃圾回收過程中,需要從不同的GC Root出發,這些GC Root有線程棧、monitor列表、JNI對象等,而這些GC Root就構成了Root Set。

·Full GC,簡稱為FGC,整個堆的垃圾回收動作。通常Full GC是串行的,G1的Full GC不僅有串行實現,在JDK10中還有并行實現。

·再標記(Remark)。在本書中指的是并發標記算法中,處理完并發標記后,需要更新并發標記中Mutator變更的引用,這一步需要STW。

主站蜘蛛池模板: 富锦市| 乌拉特后旗| 沧源| 陇川县| 东阿县| 安多县| 玉龙| 唐山市| 乡宁县| 大名县| 宁武县| 广灵县| 广西| 手游| 新蔡县| 乳山市| 南城县| 南安市| 行唐县| 钦州市| 新民市| 外汇| 姚安县| 博爱县| 社会| 井研县| 淮南市| 建阳市| 韩城市| 广宗县| 通许县| 宝鸡市| 新沂市| 周至县| 巨鹿县| 额尔古纳市| 股票| 上高县| 黔江区| 芒康县| 奇台县|