(四)G1 garbage collector
g1专为大内存,多内核机型设计。可以兼顾高吞吐量和低暂停时间。
g1将堆分为多个相同大小内存块,并发的标记线程,使得g1掌握了各个内存块的活对象数量,
内存回收阶段,g1根据用户指定的暂停时间,选择部分内存块进行回收。选择死对象占比高的
内存块可以使得暂停时间最短。
g1采用标记复制算法,在内存回收时解决了不连续的问题。这是cms不具备的
g1可以保证应用在使用内存较大的堆时,有较短的延迟。6G堆可以低于0.5s gc延迟。
g1在逻辑上也分为新生代和老年代。同时为大对象分配了专门区域。
g1在标记复制过程中,如果发现无内存可用,会引发分配失败,从而出发 full gc(stop the world)
g1在复制对象时也会有暂停,young gc和mixed gc都会有
-XX:InitiatingHeapOccupancyPercent=
<NN> 指定了开始标记周期的条件,当堆的占用比例达到NN时,开始标记周期,为mixed gc做准备。
-XX:
GCPauseIntervalMillis
=
<NN> 可以指定最短多长可以进行一次gc
g1内存模型中的内存块的大小根据堆大小的不同而不同,内存块总的数量不会超过2048个
young gc时,g1调整新生代的大小从而达到暂停时间的目标
mixed gc时,为了达成目标,g1调整每次回收老年代的内存块数量,每个区域中活对象的占比和堆内存的浪费比例。
g1使用多个独立的记忆表来存储,各个区域的对象对应的引用。多个独立的记忆表使得各个回收线程独立工作在不同区域。
新生代的垃圾回收:
将存活对象在eden,一个sur复制到另一个sur中。存活了指定代的对象,转移到老年代。
—XX:MaxTenuringThreshold=指定存活多少代然后转移。
g1在标记循环完成前进行young gc ,完成后进行mixed gc。
标记周期的各个阶段:
初始化标记:标记root,这个阶段在young gc(stop the world)中完成
根区域扫描:
并发标记:
重新标记:
清理:
g1是自适应的垃圾回收器,可以在默认情况下自我调整,从而高效工作。
默认参数:
|
使用g1的建议:
1.不要设置新生代的大小,因为这样会覆盖掉暂停时间目标的设定,也就是说,只要设置暂停时间目标就好。
2.g1:应用时间:gc时间=90:10,对于parallel,应用时间:gc时间=99:1,追求短的暂停时间,必然会造成吞吐量的下降。
3.对以下参数进行试验,调整。
-XX:InitiatingHeapOccupancyPercent
: Use to change the marking threshold.-XX:G1MixedGCLiveThresholdPercent
and-XX:G1HeapWastePercent
: Use to change the mixed garbage collection decisions.-XX:G1MixedGCCountTarget
and-XX:G1OldCSetRegionThresholdPercent
: Use to adjust the CSet for old regions.
g1基于标记复制算法,to space不足会报错:
解决办法:
-XX:G1ReservePercent 增加to space大小
-XX:InitiatingHeapOccupancyPercent 减小开始标记的阈值
-XX:ConcGCThreads
增加回收线程
大于g1 region一半的对象会被分配到大对象区域,每个大对象分配在一个region中,大量略微大于region一半的对象,会造成内存不连续,浪费了内存。
此时应该提高region大小,—XX:G1HeapRegionSize这些对象就不会被分配到大对象区域了。
(四)G1 garbage collector的更多相关文章
- Getting Started with the G1 Garbage Collector(译)
原文链接:Getting Started with the G1 Garbage Collector 概述 目的 这篇教程包含了G1垃圾收集器使用和它如何与HotSpot JVM配合使用的基本知识.你 ...
- G1 Garbage Collector and Shenandoah
http://www.diva-portal.se/smash/get/diva2:754515/FULLTEXT01.pdf https://is.muni.cz/th/ifz8g/GarbageC ...
- JVM(四) G1 收集器工作原理介绍
此篇文章半原创是对参考资料中的知识点进行总结,欢迎评论指点,谢谢! 部分知识点总结来自R大的帖子,下文有参考资料的链接 概述 G1 收集是相比于其他收集器(可见 上一篇文章),可以独立运 ...
- 提交并发量的方法:Java GC tuning :Garbage collector
三色算法,高效率垃圾回收,jvm调优 Garbage collector:垃圾回收器 What garbage? 没有任何引用指向它的对象 JVM GC回收算法: 引用计数法(ReferenceCou ...
- [GC]一个简单的Garbage Collector的实现
前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来.为了增加自己的理解,决定把大牛的想法和代码分析一遍,与 ...
- 一个简单的Garbage Collector的实现
一个简单的Garbage Collector的实现 前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来.为 ...
- AGC027 B - Garbage Collector 枚举/贪心
目录 题目链接 题解 代码 题目链接 AGC027 B - Garbage Collector 题解 对于一组选取组的最优方案为,走到一点,然后顺着路径往回取点 设选取点坐标升序为{a,b,c,d} ...
- New Garbage Collector http://wiki.luajit.org/New-Garbage-Collector
New Garbage Collector http://wiki.luajit.org/New-Garbage-Collector GC Algorithms This is a short ove ...
- agc 027 B - Garbage Collector
B - Garbage Collector https://agc027.contest.atcoder.jp/tasks/agc027_b 题意: x坐标轴上n个垃圾,有一个机器人在从原点,要清扫垃 ...
随机推荐
- BZOJ1562——[NOI2009]变换序列
1.题意:题意有些难理解 2.分析:我们发现如果要求判断是否合法的话就so easy了,二分图匹配即可,但是我们发现要求输出字典序最小的,那么我们在匈牙利的时候就倒着枚举,另外邻接表中的边一定要排好序 ...
- ListView加checkBox可以实现全选等功能
1.效果图 2.LIteView_item布局 <?xml version="1.0" encoding="utf-8"?> <Relativ ...
- 【转】Android Studio系列教程六--Gradle多渠道打包
原文链接:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 由于国内Android市场众多渠道,为了统计每个渠道的 ...
- push 到下一界面明显卡顿的现象
今天搭建界面,界面间的跳转使用了 push方法,结果发现界面间转换时有明显的卡顿现象,并没有做过数据请求之类的处理,所以感觉好神奇.以前好像也遇到过,当时在push 到的下级界面加个背景色.现在重新这 ...
- SQL SERVER中的扩展属性
以前在SQL SERVER建表时,总看到扩展属性,但一直未使用过.今天研究下: 增加扩展属性: 语法: sp_addextendedproperty [ @name = ] { 'property_n ...
- 反射 + 抽象工厂模式切换DB数据源(附Demo)
首先,设计模式的文章源自于程杰的<大话设计模式>这本书,这本书个人感觉很适合我,看着不累,能够安安心心的阅读学习.在这里十分感谢程杰的这本书,我博文中的例子会根据书上的例子来.为了不侵犯这 ...
- TodoMVC中的Backbone+MarionetteJS+RequireJS例子源码分析之三 Views
这个版本的TodoMVC中的视图组织划分比较细,更加易于理解,这也得益于Marionette为我们带来了丰富的视图选择,原生的backbone只有views,而Marionette则有itemview ...
- requirejs的用法(二)
这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...
- Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...
- 未能添加对***.dll的引用问题
在机器A上运行.编译成功的程序,在B上不能正确被编译,并且添加r如 knbook.dll 时候提示如下: 未能添加对"knbook.dll"引用,请确保此文件可以访问并且是一个有效 ...