并行和并发
并行-Parallel
并行:多条垃圾收集线程并行工作,用户线程处于等待状态
如:ParNew、Parallel Scavenge、Parallel Old
并发 - Concurrent
并发:指用户线程与垃圾线程同时执行(但不一定是并行的,可能会交替执行)
吞吐量
吞吐量就是CPU 运行用户代码的时间 与 CPU总消耗时间 的比值。
吞吐量 = 运行用户代码的时间 / (运行用户代码的时间+垃圾收集的时间)
假设虚拟机总共运行了100分钟,其中垃圾收集花了一分钟 吞吐量就是99%
在正式了解虚拟机之前,我们先看一下JVM包含的收集器(以HotSpot为例)
上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连接,就说明他们之间可以搭配使用,所处的区域,表示它是属于新生代收集器还是老年代收集器。
新生代收集器
1.1 Serial收集器
Serial收集器是最基本、发展历史最悠久的收集器,在JDK1.3.1之前,是虚拟机新生代收集的唯一选择
1.1.1 特性
这个收集器是一个单线程的收集器,但是它的"单线程"的意义并不仅仅说明它只会使用一个CPU或者一条收集线程去完成垃圾收集工作,更重要的是它进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束
1.1.2 优势
Serial收集器是虚拟机运行在Client模式下的默认的新生代收集器
Client模式:之前的版本有参数-client,客户端程序可以加-client,但是JDK1.8之后被取消了
java开发桌面程序,虚拟机就分为Client模式和Server模式,Server模式没有必要加载可视化界面,所以就有之前的Client。
简单、高效(与其它收集器的单线程比),对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率
1.2 ParNew收集器
ParNew收集器其实就是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集外,其余与Serial收集器完全一样。
ParNew收集器是许多运行在Server模式下的虚拟机中首选的新生代收集器
1.2.1 Serial和ParNew的对比分析
与Serial收集器相比,ParNew在单CPU的环境下绝对不会有比Serial收集器更好的效