-
对象存活判断
打印GC数据: -XX:+PrintGCDetails
1.引用计数法
2.可达性分析
GCroot对象:
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(即一般说的Native方法)引用的对象
-
垃圾回收算法
- 标记-清除(mark-sweep):位置不连续,产生碎片 - 复制(copying):将内存切割成两份 --->新生代 - 标记-压缩(mark-cpmpact):效率低--->老年代 - 分代收集 堆内存:新生代:1个Eden space 和2个 Survivor space(From space 和 To space) 8:1:1 新生代的垃圾回收称为YGC或minorGC,YGC之后,大多数的对象会被回收,活着的进入from survivor,再次YGC,活着的对象 eden+from survivor --->to survivor 老年代满了称为FGC majorGC,会对新生代和老年代进行垃圾回收,会产生stw(Stop the World) JVM调优的核心就是尽量减少FGC
新生代+老年代+永久代(1.7)/元数据区(1.8 metaspace)
- 永久代/元数据-Class对象
- 永久代必须指定大小限制,元数据区必须设置最小值,但是可以不设置最大值(受限于物理内存)
- 字符串常量:1.7-永久代 1.8-堆
- 方法区是一个逻辑概念,1.7-永久代 1.8-元数据区
##### 垃圾回收器
- serial 年轻代 单线程串行回收
- parallel scavenge 年轻代 多线程并行回收
- parnew 年轻代 配合CMD的并行回收
- serial old 老年代 单线程串行回收
- parallel old 老年代 多线程并行回收
- cms(concurrent mark sweep) 老年代 并发的,在垃圾回收时应用程序也可以运行,降低stw的时间(200ms)
- g1(10ms)
- zgc(1ms)
- shenandoah
- epsilon(jdk内部使用)
1.8默认parallel scavenge+parallel old
1. ##### 虚拟机优化