GC基础

GC基础

什么是垃圾?

没有任何引用指向一个对象或者是多个对象

怎样找到垃圾

  1. 计数法
  2. Root Searching 根可达算法
  3. Mark-Sweep 标记清除  位置不连续,产生碎片
  4. Copying 拷贝算法      没有碎片,浪费空间
  5. Mark-Compact 标记压缩 没有碎片 效率比copying略低

常见的垃圾回收算法

 

 

 

 

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.老年代

  1. 顽固分子
  2. 老年代满了  FGC  Full GC

4.GC Tuning 调优目标

  1. 尽量减少FGC
  2. MinorGC = YGC
  3. MajorGC = FGC

常见的垃圾回收器

  1. Serial年轻代 串行回收
  2. Paraller Scavenge 年轻代 并行回收
  3. ParNew 年轻代 配合CMS的并发回收
  4. sericalOld
  5. ParalldlOld
  6. ConcurrentMarkSweep 老年代 并发的,垃圾回收和应用程序同时运行,降低STW的时间(200ms 
  7. G1 (10ms)
  8. ZGC( 1ms)  PKC++
  9. Shenandoah
  10. Eplison

1.8默认的垃圾回收器: PS +  ParllelOld 

posted @ 2020-04-23 09:42  守稚心  阅读(127)  评论(0)    收藏  举报