GC基础
GC基础
1 什么是垃圾?
没有任何引用指向一个对象或者是多个对象
2 怎样找到垃圾
- 计数法
- Root Searching 根可达算法
- Mark-Sweep 标记清除 位置不连续,产生碎片
- Copying 拷贝算法 没有碎片,浪费空间
- Mark-Compact 标记压缩 没有碎片 效率比copying略低
3 常见的垃圾回收算法
4 Jvm内存分代模型
1.部分垃圾回收器使用的模型
a新生代(new)
b老年代(old)
c永久代(1.7) / 元数据区(1.8)
永久代和元数据 都是装class
永久代必须指定大小限制,元数据区可以设置可以不设置,无限制(受限于物理内存)
字符串常量1.7 在永久代,1.8在堆里
MethodArea 逻辑概念 1.7 在永久代,1.8元数据区
2.新生代 -Eden+ 2 * survivor 区
YGC回收之后,大多数的对象会被回收,活着的对象进入Eden +S0---> S1
再次YGC之后,eden +S1 -->S0
年龄足够之后 --》老年代
s区装不下- ---》老年代
3.老年代
- 顽固分子
- 老年代满了 FGC Full GC
4.GC Tuning 调优目标
- 尽量减少FGC
- MinorGC = YGC
- MajorGC = FGC
5 常见的垃圾回收器
- Serial年轻代 串行回收
- Paraller Scavenge 年轻代 并行回收
- ParNew 年轻代 配合CMS的并发回收
- sericalOld
- ParalldlOld
- ConcurrentMarkSweep 老年代 并发的,垃圾回收和应用程序同时运行,降低STW的时间(200ms)
- G1 (10ms)
- ZGC( 1ms) PKC++
- Shenandoah
- Eplison
1.8默认的垃圾回收器: PS + ParllelOld
为了未来有更多的选择