JVM之G1收集器
Garbage-First,面向服务端的垃圾收集器。
- 并行与并发:充分利用多核环境减少停顿时间,
- 分代收集:不需要配合其它收集器
- 空间整合:整体上看属于标记整理算法,局部(region之间)数据复制算法,运作期间不会产生空间碎片
- 停顿可预测,建立可以预测的停顿时间模型。
内存管理:
- 将整个java堆划分为多个大小形同的区域region,新生代和老年代都是region的集合。可以有计划的避免在全区域内进行垃圾收集。
- 回收方式:跟踪每一个region里面的垃圾堆积的价值大小(回收所得的空间大小以及所需耗费时间的经验值),维护一个优先列表,每次根据允许的回收时间,优先回收价值最大的region(GI名字由来),
- region之间的引用,新生代和老年带之间的引用根据remebered set来避免全盘扫描,每一个region都维护一个remebered set,
- 初始标记-》并发标记-》最终标记-》筛选回收,类CMS

|
Phase
|
Description
|
|
(1) Initial Mark (Stop the World Event)
|
This is a stop the world event. With G1, it is piggybacked on a normal young GC. Mark survivor regions (root regions) which may have references to objects in old generation.
|
|
(2) Root Region Scanning
|
Scan survivor regions for references into the old generation. This happens while the application continues to run. The phase must be completed before a young GC can occur.
|
|
(3) Concurrent Marking
|
Find live objects over the entire heap. This happens while the application is running. This phase can be interrupted by young generation garbage collections.
|
|
(4) Remark (Stop the World Event)
|
Completes the marking of live object in the heap. Uses an algorithm called snapshot-at-the-beginning (SATB) which is much faster than what was used in the CMS collector.
|
|
(5) Cleanup (Stop the World Event and Concurrent)
|
|
|
(*) Copying (Stop the World Event)
|
These are the stop the world pauses to evacuate or copy live objects to new unused regions. This can be done with young generation regions which are logged as [GC pause (young)]. Or both young and old generation regions which are logged as [GC Pause (mixed)].
|
|
Option and Default Value
|
Description
|
|
-XX:+UseG1GC
|
Use the Garbage First (G1) Collector:启用G1收集器
|
|
-XX:MaxGCPauseMillis=n
|
Sets a target for the maximum GC pause time. This is a soft goal, and the JVM will make its best effort to achieve it.:目标GC暂停时间,尽可能目标
|
|
-XX:InitiatingHeapOccupancyPercent=n
|
Percentage of the (entire) heap occupancy to start a concurrent GC cycle. It is used by GCs that trigger a concurrent GC cycle based on the occupancy of the entire heap, not just one of the generations (e.g., G1). A value of 0 denotes 'do constant GC cycles'. The default value is 45.:触发GC 堆使用比例,整个堆的占用比例,而不是某个分代区域,0意味着频繁收集,默认为45
|
|
-XX:NewRatio=n
|
Ratio of new/old generation sizes. The default value is 2.:年轻代/老年代比例 默认为2
|
|
-XX:SurvivorRatio=n
|
Ratio of eden/survivor space size. The default value is 8.:eden/survivor比例,默认为8,即 8 1 1
|
|
-XX:MaxTenuringThreshold=n
|
Maximum value for tenuring threshold. The default value is 15.:对象晋升老年代年龄阈值,默认15
|
|
-XX:ParallelGCThreads=n
|
Sets the number of threads used during parallel phases of the garbage collectors. The default value varies with the platform on which the JVM is running.:并行收集线程数
|
|
-XX:ConcGCThreads=n
|
Number of threads concurrent garbage collectors will use. The default value varies with the platform on which the JVM is running.:并发收集线程数
|
|
-XX:G1ReservePercent=n
|
Sets the amount of heap that is reserved as a false ceiling to reduce the possibility of promotion failure. The default value is 10.:预留座位假的堆上限百分比,默认10
|
|
-XX:G1HeapRegionSize=n
|
With G1 the Java heap is subdivided into uniformly sized regions. This sets the size of the individual sub-divisions. The default value of this parameter is determined ergonomically based upon heap size. The minimum value is 1Mb and the maximum value is 32Mb.:G1分割堆为等大小的region,region大小默认由jvm根据效能设置,1~32M
|
JVM之G1收集器的更多相关文章
- JVM(四) G1 收集器工作原理介绍
此篇文章半原创是对参考资料中的知识点进行总结,欢迎评论指点,谢谢! 部分知识点总结来自R大的帖子,下文有参考资料的链接 概述 G1 收集是相比于其他收集器(可见 上一篇文章),可以独立运 ...
- 深入理解JVM 垃圾收集器(下)G1收集器
1.回顾CMS 1.1堆内存结构 1.2新生代GC 1.3老年代GC 2.G1收集器 2.1G1实现概览及使用场景 G1的推荐使用场景 2.2GC 2.2.1新生代GC 2.2.2老年代GC 老年代G ...
- JVM垃圾收集器-G1收集器
G1收集器是当前收集器技术发展的最前沿成果,在JDK1.6_Updata14中提供了Early Access版本的G1收集器以供适用.G1收集器是垃圾收集器理论进一步发展的产物,它与前面的CMS收集器 ...
- JVM(11)之 G1收集器
开发十年,就只剩下这套架构体系了! >>> 在前两篇博文中讲解了新生代和年老代的收集器,在本篇博文中介绍一个收集范围涵盖整个堆的收集器--G1收集器. 先讲讲G1收集器的特点, ...
- G1收集器-原创译文[未完成]
G1收集器-原创译文 原文地址 Getting Started with the G1 Garbage Collector 目的 本文介绍了如何使用G1垃圾收集器以及如何与Hotspot JVM一起使 ...
- CMS收集器和G1收集器优缺点
首先要知道 Stop the world的含义(网易面试):不管选择哪种GC算法,stop-the-world都是不可避免的.Stop-the-world意味着从应用中停下来并进入到GC执行过程中去. ...
- JVM-如何判断对象存活与否与CMS收集器和G1收集器的区别
JVM如何判断对象存活? 1.计数器 2.可达性分析 (很多主流语言采用这种方法来判断对象是否存活) 计数器:每当有一个地方引用该对象时,计数器 +1:引用失效则 -1: 优点:实现简单,判定效率 ...
- G1收集器的收集原理
G1收集器的收集原理 来源 http://blog.jobbole.com/109170/ JVM 8 内存模型 原文:https://blog.csdn.net/bruce128/article/d ...
- G1收集器
转载:https://blog.csdn.net/zhou2s_101216/article/details/79202893 http://blog.jobbole.com/109170/ http ...
随机推荐
- 创建blob地址
aa="121" "121" b=new Blob([aa]) Blob(3) {size: 3, type: ""} window.URL ...
- YUV display in OpenGL
http://stackoverflow.com/questions/1106741/need-help-with-yuv-display-in-opengl I am having trouble ...
- STM32 Cortex-M3 NMI异常
最近在调试STM32 Cortex-M3 HardFault异常,以外发现程序居然进入了NMI异常.对于这种异常,从来没有出现过,如下图所示. 此时的R0等寄存器的值如下图所示, 堆栈指针是0x200 ...
- java Scanner和异常
Java Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scann ...
- Oracle查找lobsegment、lobindex对应的表
在查看表空间的使用情况的时候,发现有几个LOBSEGMENT.LOBINDEX类型的对象占用了大量的空间.于是想找出那些表占用了大量的空间,以便于清理. Oracle对BLOB类型的定义 ...
- 【oracle笔记2】约束
约束 *约束是添加在列上的,用来约束列的. 1. 主键约束(唯一标识) ***非空*** ***唯一*** ***被引用***(外键时引用主键) *当表的某一列被指定为主键后,该列就不能为空,不能有重 ...
- ubuntu8.04下mysql更改用户和密码
1.最近由于系统原因重装了mysql,但是发现安装过程中没有提示设置密码. 2.修改用户名和密码步骤 A.service mysql stop #停止mysql服务 B.sudo vim /et ...
- binlog2sql 用法
binlog2sql 用法 使用场景:binlog2sql是根据mysql的binlog (要求格式是row)反解析出delete,update操作,对误操作数据进行还原. https://githu ...
- jQuery中的easyui
一,easyui---datagrid绑定数据的简单测试: 1.数据库中的UserInfo表及数据测试: 2.DAL层: //分页,模糊查询(pageNum-1)*pageSize+1----从第几条 ...
- spring-quartz 定时器 给targetMethod传递参数
今天在做一个项目的时候,要给一个定时器任务的执行方法传递参数,在网上找了一下资料,可以使用arguments参数: <bean id="subsidyJobDetail" ...