GC Garbage Collector

安卓学习笔记之GC

什么是垃圾

  • 没有任何引用指向的一个对象或多个对象(循环引用)

如何定位垃圾

  • reference count 引用计数
  • root searching 根搜索算法
    1、GC roots:线程池变量、静态变量、常量池、JNI指针

常见的垃圾回收算法

  • Mark-Sweep(标记清除)--位置不连续、产生碎片
  • Copying (拷贝)--没有碎片、浪费空间、浪费内存
  • Mark-Compact (标记压缩) --没有碎片、效率偏低

JVM内存的分代模型(用于分代垃圾回收算法)

  • 部分垃圾回收器使用的模型
  • 新生代+老年代+永久代(1.7)/元数据区(1.8)Metaspace
    1、永久代 元数据——Class
    2、永久代必须指定大小限制,元数据区可以设置也可以不设置、无上限(受限于物理内存)
    3、字符串常量 1.7存在永久代,1.8存在堆里
    4、MethodArea逻辑概念—永久代、元数据
  • 堆内存(Heap)逻辑分区
    1、new(新生代)与old(老年代) 按1:3的比例分区
    2、new(新生代)=eden+2个survivior 按8:1:1比例分区
    2.1、YGC回收之后、大多数对象会被回收、活着的进入S0
    2.2、再次YGC、活着的对象eden+S0->S1
    2.3、再次YGC、活着的对象edem+S1->S0
    2.4、年龄足够的进入old
    2.5、S区装不下的直接进入老年代
  • old区
    1、顽固分子
    2、老年代满了> FGC Full GC
  • GC Tuning(Generaion)
    1、尽量减少FGC
    2、MinorGC=YGC
    3、MajorGC=FGC

常见的垃圾回收器

  • Serial 年轻代 串行回收
  • PS 年轻代 并行回收
  • ParNew 年轻代 配合CMS的并行回收
  • SerialOld 单线程的回收算法
  • parallelOld 多线程的回收算法
  • ConcurrentMarkSweep(CMS ) 老年代 并发的,垃圾回收和应用程序同时运行,减低STW的时间(200ms)
  • G1 (10ms)
  • ZGC (1ms)都可以PKC++了
  • Shenandoah
  • eplison
  • 1.8默认的垃圾回收器 :PS+parallelOld


    垃圾回收器 Garbage Collectors

你可能感兴趣的:(GC Garbage Collector)