一. 概念
-
简介:GC(Garbage Collection,垃圾收集器)就是JVM中自动内存管理机制的具体实现。主要负责内存的动态分配和垃圾回收。
-
衡量GC性能的依据:
·吞吐量:吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间) ·垃圾收集开销:吞吐量的补数,垃圾收集开销=垃圾收集时间/(运行用户代码时间+垃圾收集时间) ·暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间 ·收集频率:收集操作发生的频率 ·堆空间:Java堆区所占的内存大小 ·快速:一个对象从诞生到被回收所经历的时间
二. 垃圾收集器的分类
-
按照线程数,可分为:
·串行垃圾回收器
·并行垃圾回收器 -
按照工作模式,可分为:
·并发垃圾回收器
·独占式垃圾回收器 -
按照碎片方式,可分为:
·压缩式垃圾回收器
·非压缩式垃圾回收器 -
按照工作的内存区间,可分为:
·年轻代垃圾回收器
·老年代垃圾回收器
三. 垃圾收集器详解
-
各垃圾收集器名称及其工作的内存区间
直接连线的垃圾收集器代表可组合使用
CMS和G1的区别 -
各垃圾收集器介绍
收集器 | 算法 | 线程 |
---|---|---|
Serial | 复制算法 | 单线程 |
ParNew | 复制算法 | 多线程 |
Parallel Scavenge | 复制算法 | 多线程 |
CMS | 标记-清除算法 | 多线程 |
Serial old | 标记-整理算法 | 单线程 |
Parallel old | 标记-整理算法 | 多线程 |
G1 | 标记-整理算法+复制算法 | 多线程 |
四. Minor GC ,Full GC 触发条件
-
Minor GC触发条件:当Eden区满时,触发Minor GC。
-
Full GC触发条件:
(1)调用System.gc时,系统建议执行Full GC,但是不必然执行
(2)老年代空间不足
(3)方法去空间不足
(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存
(5)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小