接着上一次【https://www.cnblogs.com/webor2006/p/11123522.html】G1学习继续开启理论之旅。。

G1的设计规划是要替换掉CMS【理想化的】

  • G1在某些方面弥补了CMS的不足,比如,CMS使用的是mark-sweep算法,自然会产生内存碎片;然而G1基于copying算法,高效的整理剩余内存,而不需要管理内存碎片。
  • 另外,G1提供了更多手段,以达到对GC停顿时间的可控。

Hotspot虚拟机主要构成:

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

图中的所有东东其实在之前我们已经学习过了,下面解读一下:

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

传统垃圾收集器堆结构【也就是之前我们学习的垃圾收集器的结构,非G1】:

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

G1收集器堆结构:

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

是不是耳目一新的感觉,跟传统的结构完全不一样了,其中从图中还是可以看到了传统的一些名词,这是因为G1在给不同的区域进行命名时还是延续了之前传统垃圾收集器的命名模式,而且各个区域的作用跟传统的也差不多,但是!!!!G1内存的物理内存的布局方式是彻底颠覆了,从图中可以看到是准整个堆空间不做任何明确的大块的划分,每个区域到底是Eden Space,还是Survivor Space,还是Old Generation,并没有统一的规则,而且像这个区域:

G1垃圾收集器堆内存划分与角色分派【纯理论】-LMLPHP

目前是老年代,但是在某时刻它又可以变为Eden空间或者是Survivor空间。

G1收集器堆结构:

  • head被划分为一个个相等的不连续的内存区域(regions),每个regions都有一个分代的角色:eden、survivor、old。
  • 对每个角色的数量并没有强制的限定,也就是说对每种分代内存的大小,可以动态变化。
  • G1最大的特点就是高效的执行回收,优先去执行那些大量对象可回收的区域(region)。
05-21 05:34