概念
并行和并发
- 并行 parallelism
- 并发 concurrency : 通过系统的分享时间片实现多任务运行,是并行的子集
《并发的艺术》中大概是这样写的,系统中有多个任务同时存在可称之为“并发”,系统内有多个任务同时执行可称之为“并行”;并发是并行的子集。比如在单核CPU系统上,只可能存在并发而不可能存在并行。
You can get concurrency on a single core processor using preemptive time-shared threads. But what you cannot achieve on a single core processor is parallelism.
吞吐量
吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间)。
虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。
垃圾回收器
图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。
-
Serial收集器
- 单CPU ,单线程工作
- 会Stop The World
- 在Client模式下的默认新生代收集器
- 对于限定单个CPU的环境效率最高
- -XX:+UseSerialGC
-
ParNew收集器
- 多线程垃圾回收
- 会Stop The World
- 在Server模式下的虚拟机中首选的新生代收集器
- 除了Serial收集器外,目前只有它能与CMS收集器配合工作
- -XX:+USeParNewGC
-
Parallel Scavenge收集器
- 高效率地利用CPU时间,尽快完成程序的运算任务,达到一个可控制的吞吐量(Throughput),主要适合在后台运算而不需要太多交互的任务
- Parallel Scavenge收集器与ParNew收集器的一个重要区别是它具有自适应调节策略。
- tuned for gigabyte heaps (over 10GB) on multi-CPU machines
- -XX:UseParallelGC
-
Serial Old收集器
- Serial收集器的老年代版本,单线程收集器,使用标记-整理算法
- 给Client模式下的虚拟机使用
-
Parallel Old收集器
- Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。
- 注重吞吐量以及CPU资源敏感
-
CMS收集器
-
获取最短回收停顿时间为目标,重视服务的响应速度,希望系统停顿时间最短
-
-XX:+UseConcMarkSweepGC
-
-XX:ParallelCMSThreads=
- 初始标记(CMS initial mark)
初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,需要“Stop The World”。 - 并发标记(CMS concurrent mark)
并发标记阶段就是进行GC Roots Tracing的过程。 - 重新标记(CMS remark)
重新标记阶段是为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短,仍然需要“Stop The World”。 - 并发清除(CMS concurrent sweep)
并发清除阶段会清除对象。
- 初始标记(CMS initial mark)
-
-
G1收集器
- G1垃圾回收器适用于堆内存很大的情况,他将堆内存分割成不同的区域,并且并发的对其进行垃圾回收
- –XX:+UseG1GC
输出所有的参数和默认值
java -XX:+PrintFlagsInitial -XX:+PrintFlagsInitial>>1.txt
G1
G1 knows which regions are mostly empty
evacuation : parallel , working within the user defined pause times (cms : not do compaction)
G1 compacts sufficiently