Anzy Liao

A blog for Anzy Liao

this is Anzy Liao's Blog


Welcome

Java Gc

GC的三个任务

  • 收集不再使用的对象
  • 释放对象占用的内存空间
  • 压缩堆

GC 面对的问题

  • 程序的线程在同时运行
  • 压缩堆时要确保移动的对象,应用程序没有正在使用
  • 简单计数器方式不能处理有环的引用

内存分代

  • 年轻代: eden space + survivor space
  • 老年代

四种不同的GC

  • Serial GC: 单线程, stop the world
  • Throughput GC (Parallel GC): 多线程GC, stop the world for young and old GC
  • CMS: 多线程,后台多线程GC old generation, 但是不压缩
  • G1: 划分为region,后台多线程GC,region中的腾挪自动做了Compact

适用场景

  • Serial: Memory less than 100MB
  • Thoughput: not enough CPU
  • CMS: heap smaller than 4GB
  • G1: large Heap