JVM学习笔记——垃圾回收篇( 五 )

垃圾回收器前面我们已经介绍了垃圾回收机制,现在我们来介绍常用的垃圾回收器
STW概念我们在正式讲解垃圾回收器之前,我们先来回顾一个概念STW:

  • STW即Stop The World,意思是暂停所有进程处理
  • 因为我们在进行垃圾处理时,会涉及到地址空间的整合(标记整理法),这时所有CPU都需要停止操作
串行垃圾回收器我们首先来介绍串行垃圾回收器的特点:
  • 单线程
  • 适用于堆内存较小,适合单人电脑
我们给出串行垃圾回收器的展示图:
JVM学习笔记——垃圾回收篇

文章插图
我们所需配置:
// 设置 新生代回收方法复制 老年代回收方法为标记整理法-XX:+UseSerialGC = Serial + SerialOld我们来简单解释一下:
  • 串行操作属于单核CPU处理
  • 我们在处理该CPU的垃圾回收时,只有该线程的CPU进行操作
  • 但同时老年代采用标记整理法会涉及到内存地址重新规划,所以其他CPU也需要暂停操作,即STW
吞吐量优先垃圾回收器我们首先来介绍吞吐量优先垃圾回收器的特点:
  • 多线程
  • 适用于堆内存较大,需要多核CPU
  • 让单位时间内,STW时间最短,例如每次STW0.2秒,但执行两次,共用0.4s(总时间最短)
我们给出吞吐量优先垃圾回收器的展示图:
JVM学习笔记——垃圾回收篇

文章插图
我们所需配置:
// 设置垃圾回收器方法XX:+UseParallelGC ~ -XX:+UseParallelOldGC// 自适应新生代晋升老年代的阈值处理-XX:+UseAdaptiveSizePolicy// 设置垃圾回收时间占总时间的比例(与-XX:MaxGCPauseMillis=ms冲突)-XX:GCTimeRatio=ratio// 设置最大STW时间(与-XX:GCTimeRatio=ratio冲突)-XX:MaxGCPauseMillis=ms// 设置最大同时进行CPU个数-XX:ParallelGCThreads=n我们来简单解释一下:
  • 吞吐量优先垃圾回收器是多核CPU处理回收器
  • 当一个进程发生垃圾回收时,我们会将所有CPU都用于垃圾回收,这时CPU利用率为100%
响应时间优先垃圾回收器我们首先来介绍响应时间优先垃圾回收器的特点:
  • 多线程
  • 适用于堆内存较大,需要多核CPU
  • 让单次STW时间最短,例如每次STW0.1秒,但执行五次,共用0.5s(单次时间最短)
我们给出响应时间优先垃圾回收器的展示图:
JVM学习笔记——垃圾回收篇

文章插图
我们所需配置:
// +UseConcMarkSweepGC:设置并发标记清除算法,允许用户进程单独进行,但部分时间还需要阻塞// -XX:+UseParNewGC:设置新生代算法,// SerialOld:当老年代并发失败,采用单线程方法-XX:+UseConcMarkSweepGC ~ -XX:+UseParNewGC ~ SerialOld// -XX:ParallelGCThreads=n:并行数设置为n// -XX:ConcGCThreads=threads:并发线程最好设置为CPU的1/4个数,相当于只有1/4个CPU在处理垃圾回收-XX:ParallelGCThreads=n ~ -XX:ConcGCThreads=threads// 预留空间(因为并发清理时其他进程可能会产生一些垃圾,这些垃圾目前无法处理,我们需要预留一定空间进行储存)-XX:CMSInitiatingOccupancyFraction=percent// 我们在重新标记阶段前,先对新生代进行垃圾回收,节省其标记量-XX:+CMSScavengeBeforeRemark我们来简单解释一下: