接着上一次【​​G1垃圾收集器设计目标与改良手段【纯理论】​​】G1学习继续开启理论之旅。。

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

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

Hotspot虚拟机主要构成:

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

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

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

G1垃圾收集器堆内存划分与角色分派【纯理论】_内存区域_03

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

G1垃圾收集器堆内存划分与角色分派【纯理论】_内存区域_05

G1垃圾收集器堆内存划分与角色分派【纯理论】_内存碎片_06

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

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

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

G1垃圾收集器堆内存划分与角色分派【纯理论】_内存碎片_09

G1收集器堆结构:

G1垃圾收集器堆内存划分与角色分派【纯理论】_内存区域_10

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

G1垃圾收集器堆内存划分与角色分派【纯理论】_内存碎片_11

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

G1收集器堆结构:

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






关注个人公众号,获得实时推送

G1垃圾收集器堆内存划分与角色分派【纯理论】_内存区域_12