ParNew 收集器
Parallel Scavenge 并行收集器
并发标记清理(Concurrent Mark-Sweep,CMS)垃圾收集器
G1 收集器
Young GC
Mixed GC
Full GC
G1,我涉足的还不是特别多,就先把其两大特性简单介绍下。
五种垃圾搜集器的比较
收集器
|
串行、并行or并发
|
新生代/老年代
|
算法
|
目标
|
适用场景
|
Serial
|
串行
|
新生代
|
复制算法
|
响应速度优先
|
单CPU环境下的Client模式
|
Serial Old
|
串行
|
老年代
|
标记-整理
|
响应速度优先
|
单CPU环境下的Client模式、CMS的后备预案
|
ParNew
|
并行
|
新生代
|
复制算法
|
响应速度优先
|
多CPU环境时在Server模式下与CMS配合
|
Parallel Scavenge
|
并行
|
新生代
|
复制算法
|
吞吐量优先
|
在后台运算而不需要太多交互的任务
|
Parallel Old
|
并行
|
老年代
|
标记-整理
|
吞吐量优先
|
在后台运算而不需要太多交互的任务
|
CMS
|
并发
|
老年代
|
标记-清除
|
响应速度优先
|
集中在互联网站或B/S系统服务端上的Java应用
|
G1
|
并发
|
both
|
标记-整理+复制算法
|
响应速度优先
|
面向服务端应用,将来替换CMS
|
我们以 java/bin/jstat 为例看看相关的参数细节有哪些。
数据列
|
描述
|
支持的jstat 选项
|
S0C
|
Survivor0的当前容量
|
-gc -gccapacity -gcnew -gcnewcapacity
|
S1C
|
S1的当前容量
|
-gc -gccapacity -gcnew -gcnewcapacity
|
S0U
|
S0的使用量
|
-gc-gcnew
|
S1U
|
S1的使用量
|
-gc-gcnew
|
EC
|
Eden区的当前容量
|
-gc -gccapacity -gcnew -gcnewcapacity
|
EU
|
Eden区的使用量
|
-gc -gcnew
|
OC
|
old区的当前容量
|
-gc -gccapacity -gcnew -gcnewcapacity
|
OU
|
old区的使用量
|
-gc-gcnew
|
PC
|
方法区的当前容量
|
-gc-gccapacity -gcold -gcoldcapacity -gcpermcapacity
|
PU
|
方法区的使用量
|
-gc -gcold
|
YGC
|
Young GC次数
|
-gc -gccapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause
|
YGCT
|
Young GC累积耗时
|
-gc -gcnew -gcutil -gccause
|
FGC
|
Full GC次数
|
-gc -gccapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause
|
FGCT
|
Full GC累积耗时
|
-gc-gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause
|
GCT
|
GC总的累积耗时
|
-gc -gcold -gcoldcapacity -gccapacity -gcpermcapacity -gcutil -gccause
|
NGCMN
|
新生代最小容量
|
-gccapacity -gcnewcapacity
|
NGCMX
|
新生代最大容量
|
-gccapacity -gcnewcapacity
|
NGC
|
新生代当前容量
|
-gccapacity -gcnewcapacity
|
OGCMN
|
老年代最小容量
|
-gccapacity -gcoldcapacity
|
OGCMX
|
老年代最大容量
|
-gccapacity -gcoldcapacity
|
OGC
|
老年代当前容量
|
-gccapacity -gcoldcapacity
|
PGCMN
|
方法区最小容量
|
-gccapacity -gcpermcapacity
|
PGCMX
|
方法区最大容量
|
-gccapacity -gcpermcapacity
|
PGC
|
方法区当前容量
|
-gccapacity -gcpermcapacity
|
PC
|
方法区的当前容量
|
-gccapacity -gcpermcapacity
|
PU
|
方法区使用量
|
-gccapacity -gcold
|
LGCC
|
上一次GC发生的原因
|
-gccause
|
GCC
|
当前GC发生的原因
|
-gccause
|
TT
|
存活阀值,如果对象在新生代移动次数超过此阀值,则会被移到老年代
|
-gcnew
|
MTT
|
最大存活阀值,如果对象在新生代移动次数超过此阀值,则会被移到老年代
|
-gcnew
|
DSS
|
survivor区的理想容量
|
-gcnew
|
BootstrapClassLoader(启动类加载器):c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作
ExtClassLoader (标准扩展类加载器): java编写,加载扩展库,如classpath中的jre ,javax.*或者java.ext.dir 指定位置中的类,开发者可以直接使用标准扩展类加载器
AppClassLoader(SystemClassLoader)(系统类加载器): java编写,加载程序所在的目录,如user.dir所在的位置的class
CustomClassLoader(用户自定义类加载器): 实现java.long.ClassLoader