《JVM G1源码分析和调优》 —1.2 本书常见术语

举报
华章计算机 发表于 2019/12/20 11:27:40 2019/12/20
【摘要】 本节书摘来自华章计算机《JVM G1源码分析和调优》 一书中第1章,第1.2节,作者是彭成寒。

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。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。