本文主要是介绍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垃圾收集器的主要回收环节概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!