垃圾回收器
类型
本文涉及的垃圾回收器主要有以下的四种:
- 串行垃圾回收器
- 吞吐量优先的垃圾回收器
- 响应时间优先的垃圾回收器
- G1垃圾回收器
JDK8默认使用的是吞吐量优先的垃圾回收器,JDK9默认使用的是G1垃圾回收器
串行垃圾回收器
特点
- 单线程(仅仅指垃圾回收线程,用户线程可以是多个的)
- 堆内存较少,适合个人电脑
相关的VM参数
-XX:+UseSerialGC 开启串行垃圾回收器
工作流程
串行垃圾回收器的工作分为了两个部分,分别称为Serial和SerialOld。
Serial工作于新生代,采用了复制算法。
SerialOld工作在老年代,采用了标记整理算法。
回收流程: 每一个cpu分别在执行各自的线程,当收到垃圾回收的指令时,所有cpu会停在一个安全点(也就是所有cpu的活动栈帧都释放的时候),然后调度其中一个线程执行垃圾回收,其他线程处于阻塞状态(这种行为被称作Stop The World)。垃圾回收后继续执行各自的线程。
工作流程图如下:
吞吐量优先的垃圾回收器
吞吐量的概念
垃圾回收总时间占程序运行时间的比例。
(垃圾回收时间占比越低,吞吐量越高)