2.1 GC

1 minute read

2.1.1 Java内存模型与内存管理

  • Young Memory Generation (年轻代)
    • Eden
    • S0 (幸存区, Eden满后通过Minor GC将对象移动到这)
    • S1 (幸存区, Eden满后通过Minor GC将对象移动到这)
  • Old Memory Generation (老年代)
    • Minor GC15次后还存活 / S1满后且Minor GC后, 将对象提前移动到老年代
  • Permanent Generation (持久代)
    • 方法区 (运行时常量, 静态变量, 方法代码)
    • 运行时常量池(运行时常量, 静态方法)
    • Memory Pool(存储不可变对象, 如String)
  • Java Stack
    • 线程堆栈
  • GC类型
    • Minor GC
      • 扫描清除Eden区
    • Major GC
      • 扫描清除老年区
    • Full GC
      • 扫描清除Eden区, 老年区, 永久区
  • 内存区域
    • 堆, 存放对象实例, GC回收主要区域
    • 方法区, 存储类信息, 常量、静态变量
    • 虚拟机栈, 存储方法执行内存模型, 存储局部变量表, 动态链接, 方法出口
    • 本地方法栈, 虚拟机是用到Native服务
    • 程序计数器, 指令指示器, 线程私有
  • 强弱软引用
    • 软引用, 内存不足的时候JVM才回收该对象
    • 弱引用, GC扫描到弱引用即回收
    • 虚引用, 被GC收系统通知

2.1.2 GC Roots (可达性)

  • System Class
    • Class Loaded by Bootstrap/system class loader
  • JNI Local
    • Local variable in native code.
  • JNI Global
    • Global variable in native code.
  • Thread Block
    • Object referred to from a currently active thread block
  • Thread
    • a started, but not stopped, Thread
  • Java Local
    • Local variable.
  • Native Stack
    • In or out params in native code.
  • Java Stack Frame
    • A Java stack frame, holding local variable
  • 更多请参考Garbage Collection Roots

2.1.3 GC算法(年轻代主要采用复制算法, 老年代主要采用标记-整理算法)

  • 标记清除算法
    • 从根集合开始扫描, 标记需要回收的对象, 标记完成统计回收被标记对象
    • 仅对不存活对象进行处理, 对于存活对象比较多的效率高, 但缺点是未对存活对象调整, 存在内存碎片
  • 复制算法
    • 分为活动区间和空闲区间, 对象均在活动区间; 从根集合开始扫描, 存活对象移动到空间区间, 把活动区间一次性回收, 并把空间区间变成活动区间
    • 对象存活少极其高效, 缺点需要多一倍空间
  • 标记-整理算法
    • 基于标记清除算法优化, 清理后, 移动存活对象, 解决内存碎片问题
  • 分代收集算法
    • 将heap区分为新生代、老年代

2.1.4 垃圾回收器

  • Serial
    • JVM垃圾回收时, 需要暂停所有用户线程, 知道回收结束
    • 年轻代采用复制算法, 老年代采用标记-整理算法
  • ParNew
  • ParallelScavenge
  • ParallelOld
  • CMS
  • GarbageFirst(G1)

2.1.5 GC类型

  • GC_EXPLICT, 主动调用System.gc()产生的GC事件
  • GC_CONCURRENT, 堆内存增长到一定程度触发
  • GC_FOR_MALLOC, 堆内存已满, 系统需要更多内存时触发
  • GC_HPROF_DUMP_HEAP, 创建内存快照hprof触发
  • GC_EXTERNAL_MALLOC, 当Bitmap和NIO Direct ByteBuffer对象分配外部存储触发

Tags: ,

Categories:

Updated: