垃圾回收器
* 垃圾回收器是一种自动的内存管理机制,该机制会借助垃圾回收算法向操作系统归还不再被程序访问的内存空间
分代回收
* 在绝大多数情况下,随着被分配的字节数的增多,存活的字节数会不断减少,换句话说,绝大多数对象
在被分配后,会快速死亡
代
* 根据上述结论,为了进行高效的垃圾回收,Java 团队将 Heap 划分不大小不一的代,在进行内存分配
与垃圾回收时满足以下特点:
- 绝大多数对象被分配在 Eden 区,当 Eden 区满时会触发一次 MinorGC,并将存活下来的对象
移动到 Survivor 区
- 在下一次 Eden 区满时,原先存活在 Survivor 区的对象若还能再次存活则会被移动到另一个
Survivor 区,以此类推
- 当存活在 Survivor 区中的对象被移动的次数达到原先定义的阈值后会晋升为 Old 代对象
- 当 Old 代满时会触发 FullGC 对整个堆区进行一次垃圾回收
* 补充:
- 晋升阈值可通过 MaxTenuringThreshold 进行控制
- FullGC 在大多数垃圾回收器中都使用标记整理算法,除 CMS
垃圾回收器
Serial 垃圾回收器
* Serial GC 是一种单线程进行垃圾回收器,适合单处理机机器或数据量不大的小型应用,可以使用 -XX:+UseSerialGC 开启
Parallel 垃圾回收器
* Parallel GC 是一种多线程垃圾回收器,适用多处理器的小型应用程序,可以使用 -XX:+UseParallelGC 开启。
* Parallel GC 默认开启并行整理,可以使用 -XX:-UsrParallelOldGC 进行关闭,关闭后程序性能可能会显著下降
G1 垃圾回收器
* G1 GC 是一种并发垃圾回收器,会在程序运行时进行垃圾回收,具有高吞吐量、低停顿的特点
适合大内存多处理器的服务器,可以使用 -XX:+UseG1GC 开启
Z 垃圾回收器
* Z GC 与 G1 类似,但 Z GC 更加注重低时延,适用于需要快速响应时间和大堆内存的应用场景,
可以使用 -XX:+UseZGC 开启
CMS 垃圾回收器
* CMS 垃圾回收器又叫 concurrent low pause collector,一种低停顿垃圾回收器,会在程序运行
时进行并发的标记和清除,以最大程度的减少由于 GC 造成的停顿,但 CMS 垃圾回收器不会对内存进
行整理,当遇到内存碎片问题时,只能扩大堆内存,在较高版本的 JDK 中,推荐使用 G1 代替 CMS