JVM垃圾收集器

常用垃圾回收算法

  • 标记-清理算法
    • 常用于新生代回收算法,即标记垃圾区域,然后清除垃圾区域,缺点是会产生很多内存碎片
  • 复制算法
    • 常用于新生代回收算法,将正在使用的回收算法复制到一块新的区域,然后将原区域标记为已清理的内存区域,这样可以去掉很多内存碎片
  • 标记-整理算法
    • 将标记的区域依次复制到一起,实现碎片整理

垃圾收集器分类

  • serial
    • 新生代串行回收垃圾,常用于client新生代
  • parnew
    • 新生代并行回收垃圾,常用于server端新生代回收,不利于在单核处理器下使用该回收算法
  • parallel scavenge
    • 新生代串行回收垃圾,吞吐量优先,在响应时间内完成回收
  • serial old
    • 老年代串行回收垃圾,常用于client端老年代
  • parallel old
    • 老年代并行回收垃圾,serial old的多线程版本,并且实现了吞吐量优先
  • cms
    • 垃圾回收一共有4个阶段,其中只有初始标记、并发标记、并发清理三个步骤可以和用户线程同时执行,重新标记需要先挂起用户线程,这是一个比较好的折中垃圾回收算法,它并发集高,低停顿
      • 初始标记(并发执行)
      • 并发标记(并发执行)
      • 重新标记(串行执行)
      • 并发清理(并发执行)
  • g1
    • 将内存分为多块region
      • 初始标记(串行执行)
      • 并发标记(并发执行)
      • 最终标记(串行多线程执行)
      • 筛选回收(串行多线程执行)
posted @ 2019-03-11 17:29  shenjie2017  阅读(64)  评论(0编辑  收藏  举报