串行、并行、并发

image.png
串行回收:指垃圾回收线程执行时,用户线程(执行Java代码的线程)处于等待状态。
串行回收适合单个CPU或硬件资源较差的服务器,故,串行回收默认应用在客户端的Client模式下使用。
并行回收:是多条垃圾回收线程和用户线程分别在不同CPU上同时工作。
不过并行回收仍然和串行回收一样,采用独占式,使用了“stop-the-world”机制
并发回收:垃圾收集线程 和 用户线程交替执行,以尽可能减少应用程序的停顿时间。

垃圾回收器的性能指标

吞吐率(Throughput)

吞吐率:吞吐量,指用户线程执行java代码的时间与CPU总消耗时间的比值,即
吞吐率 = 用户线程执行Java代码的时间 / (用户线程执行Java代码的时间 + 垃圾收集时间)。
假设虚拟机总共运行了100分钟,其中垃圾收集花掉了1分钟,那吞吐量就是99%

暂停时间:

暂停时间:指应用程序线程暂停,让GC线程执行回收,这段时间称为暂停时间。
例如,GC回收需要100毫秒的暂停时间,那这100毫秒内,你的应用程序就暂停100毫秒。

对于JVM来说,停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验。
而高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。