Java程序的舞台——Java HotSpot Virtual Machine(简称:HotSpot)

垃圾回收期(Garbage Collection)的历史:

  • 1999年伴随着JDK1.3.1的是串行方式的Serial GC
  • 2002年J2SE发布后Parallel GC以及Concurrent Mask Sweep(CMS)GC应运而生,并且在JDK6以后Parallel GC在JDK6成为HotSpot默认的GC

三者GC的不同:

  • 最小化的使用内存以及并行开销:Serial GC
  • 最大化的应用程序吞吐量:Parallel GC
  • 最小化GC的中断或停顿时间:CMSGC

何为G1?

G1是一个并行的回收器,他把堆内存分割为很多不相关的区间(Region),每个区间可以属于老年代或者年轻的年代,并且每个年龄代区间可以在物理上不连续的。老年代区间这个设计理念本身就是为了服务于并行后台的线程,这些线程的主要工作是为了寻找未被引用的对象,因此产生了一种现象:某些区间的垃圾(未被引用的对象)多于其他的区间。垃圾回收时都是需要停下应用程序的,不然就没有办法防止应用程序的干扰,然后G1 GC可以集中精力在垃圾最多的区间上,并且这种方式仅仅浪费了一点点的时间就可以清空这些区间里的垃圾,腾出完全空闲的空间。由此可见这种方式的侧重点在于处理垃圾最多的区间,所以命名为Garbage First,即:垃圾优先

G1内部主要有四个操作阶段:

  • 年轻代回收(A Young Collection)
  • 运行在后台的并行循环(A Background,Concurrent Cycle)
  • 混合回收(A Mixed Collection)
  • 全量回收(A Full GC)