本文主要是介绍67. G1垃圾收集器中的region、G1垃圾收集器的主要回收环节概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1. `Region`的介绍
- 2.`G1`垃圾收集器的主要回收环节
1. Region
的介绍
G1
收集器,默认将Java
堆划分成约2048
个大小相同的独立的Region
块,每一个Region
块大小根据堆空间的实际大小来决定,范围控制在1MB
到32MB
之内。所有的Region
大小相同,且在JVM
生命周期内不会改变(除非JVM
停止之后,重新设置Region
的大小,否则region
的大小不会改变)。Region
使新生代和老年代的物理空间可以是不连续的。
- 如下图,堆区被划分成了各个
Region
,各个Region
分别表示Eden
区,Survivor
区,Old
区。一个Region
只能属于一个角色,也就是说一个Region
不能一部分是Eden
区,一部分是Old
区或Survivor
区。
G1
垃圾收集器还新增加了一种内存区域Humongous
区。主要用于存储大对象,如果对象大小超过0.5
个Region
,就放到H
。- 设置
H
区的原因:对于堆中的大对象,默认会被分配到老年代,但是如果它是一个短期存在的对象,由于老年代垃圾收集的频率较低,这个对象是不能及时被回收掉的,会对垃圾收集造成负面的影响。
设置H
区,就能够及时回收。如果一个H
区装不下一个大对象,则寻找连续的H
区来存储,如果找不到连续的H
区,就会启动Full GC
。
2.G1
垃圾收集器的主要回收环节
G1
垃圾收集器收集垃圾的主要环节可以分为3
个阶段(也有可能出现第4
个阶段Full GC
):
a)
年轻代GC (Young GC)
b)
老年代并发标记(Concurrent Markong)
c)
混合回收(Mixed GC)
d)
如果Mixed GC
失败,就会触发Full GC
。
G1
回收垃圾的步骤如下图所示,首先是年轻代GC
,然后是并发标记过程(并发标记过程可能和年轻代GC
一起发生),最后是混合回收。混合回收失败会触发Full GC
。
3
个阶段的简单描述如下:
更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html
G1官方文档:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html?source=:ow%E2%AD%95%EF%B8%8Fp:nav:0916BCButton
这篇关于67. G1垃圾收集器中的region、G1垃圾收集器的主要回收环节概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!