java g1 配置_G1之REGION SIZE
说明:JDK7和JDK8的Region划分实现略有不同(差异非常小,且只有-Xmx和-Xms的值不一样才有区别),本篇文章讲解的是JDK8中Region的划分实现;如果要了解JDK7的Region划分实现,请参考JDK7 headpRegion.cpp
源码分析
G1 Region划分的实现源码在headpRegion.cpp中,摘取部分核心源码如下:
源码解读:
MIN_REGION_SIZE:允许的最小的REGION_SIZE,即1M,不可能比1M还小;
MAX_REGION_SIZE:允许的最大的REGION_SIZE,即32M,不可能比32M更大;限制最大REGION_SIZE是为了考虑GC时的清理效果;
TARGET_REGION_NUMBER:JVM对堆期望划分的REGION数量,而不是实际划分的REGION数量;
计算演示
1、 验证下面这段源码,即如果配置了XX:G1HeapRegionSize,那么以配置为准;否则以计算为准:
这是JDK7和JDK8关于REGION_SIZE计算唯一的区别,事实上当Xmx和Xms的值不一样时,JVM不太好自动计算region_size,JDK7的注释进一步的解释了,且建议某些-Xms/-Xmx组合情况下,用户自己设置REGION_SIZE
计算为准
假设配置JVM参数-Xmx6144m -Xms2048m,那么计算过程如下:
average_heap_size=(6144m+2048m)/2=4096m
region_size=max(4096m/2048, 1m)=2m
region_size_log=21(因为2^21=2*1024*1024<=2m)
region_size=2^21=2m(保证region_size的值为2^n)
region_size=2m(因为MIN_REGION_SIZE<=2m<=MAX_REGION_SIZE)
配置为准
假设配置JVM参数-Xmx1024m -Xms1024m -XX:G1HeapRegionSize=4m,那么计算过程如下:
region_size=4m
region_size_log=22(因为2^22<=4m)
region_size=2^22=4m
region_size=4m(因为MIN_REGION_SIZE<=1m<=MAX_REGION_SIZE)
2、 验证下面这段源码,即region_size的值一定是2^n:
假设配置JVM参数-Xmx3072m -Xms3072m,那么计算过程如下:
average_heap_size=(3072m+3072m)/2=3072m
region_size=max(3072m/2048, 1m)=1.5*1024*1024
region_size_log=20(因为2^20<1.5*1024*1024<2^21)
region_size=2^20=1m(保证region_size的值为2^n)
region_size=1m(因为MIN_REGION_SIZE<=1m<=MAX_REGION_SIZE)
3、 验证下面这段源码,即region_size的值一定是在[MIN_REGION_SIZE, MAX_REGION_SIZE]这个范围:
假设配置JVM参数-Xmx1024m -Xms1024m -XX:G1HeapRegionSize=64m,那么计算过程如下:
region_size=64m
region_size_log=26(因为2^26<=64m)
region_size=2^26=64m
region_size=32m(因为region_size必须在[MIN_REGION_SIZE, MAX_REGION_SIZE]之间)
REGION_SIZE总结
通过上面的分析可知G1垃圾回收时JVM分配REGION的SIZE有如下要求:
1、如果配置了-XX:G1HeapRegionSize,那么先以配置的值为准;否则以计算为准;
2、根据第一步计算得到的REGION_SIZE,取不能大于它的最大的2^n的值为第二步计算得到的REGION_SIZE的值
3、把第二步计算得到的REGION_SIZE和MIN_REGION_SIZE比较,如果比MIN_REGION_SIZE还小,那么MIN_REGION_SIZE就是最终的region_size;否则再把REGION_SIZE和MAX_REGION_SIZE比较,如果比MAX_REGION_SIZE还大,那么MAX_REGION_SIZE就是最终的region_size;如果REGION_SIZE在[MIN_REGION_SIZE, MAX_REGION_SIZE]之间,那么REGIOIN_SIZE就是最终的region_size;
验证方式
通过下面这段源码配置JVM参数即可验证JDK8 G1中REGION_SIZE的计算方式:
JVM参数:java -XX:+UseG1GC -verbose:gc {HEAP_OPTS} -XX:+PrintHeapAtGC StringTest,其中{HEAP_OPTS}由上面计算演示过程中提供的JVM参数取代即可,例如:java -XX:+UseG1GC -verbose:gc -Xmx6144m -Xms2048m -XX:+PrintHeapAtGC StringTest,GC日志如下,从GC日志中可以看出region size为2048k:
作者:阿飞的博客
来源:https://www.jianshu.com/p/abafbb965fff
本文著作权归作者所有,如若转载,请注明出处
转载请注明:文章转载自「 Java极客技术学习」https://www.javajike.com
java g1 配置_G1之REGION SIZE相关推荐
- G1垃圾回收器REGION SIZE说明
说明:JDK7和JDK8的Region划分实现略有不同(差异非常小,且只有-Xmx和-Xms的值不一样才有区别),本篇文章讲解的是JDK8中Region的划分实现:如果要了解JDK7的Region划分 ...
- java g1的并行_「g1」JVM G1详解 - seo实验室
g1 当我们调优java程序时,通常的目标有两个: 响应能力 或者 吞吐量 响应能力 响应能力指一个程序或者系统对请求的是否能够及时响应. 比如: 一个桌面UI能多快的响应一个事件: 一个网站能够多快 ...
- java G1垃圾收集器
Garbage-First(后文简称G1)收集器是当今收集器技术发展的最前沿成果,在Sun公司给出的JDK RoadMap里面,它被视作JDK 7的HotSpot VM 的一项重要进化特征.从JDK ...
- 可能是最全面的 Java G1学习笔记
转载自 可能是最全面的 Java G1学习笔记 引子 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题.总体来讲,对于G1我有几个疑惑 ...
- java g1 gc ref proc_深入理解垃圾收集器的G1及日志分析
尽管Hotspot 最新的垃圾回收器G1是在2006年推出的.但是G1从推行至今的市场反响来看,但现在足以证明这款垃圾收集器是经得起考验的,从java9开始,就默认为G1垃圾收集器.G1是一款面向服务 ...
- java neo4j配置_Neo4j教程 - 3 详解 Neo4j 核心配置
Neo4j的配置文件位于/conf/neo4j.conf文件内,关于每个配置,neo4j都有其对应的英文解释,这里不对里面的内容进行一一解释,仅挑选一些核心重要的内容进行说明. 1. 数据安装目录 d ...
- java ftp定时上传_ftp自动删除,ftp自动删除文件、定时上传文件的方式及java环境配置...
IIS7服务器管理工具具备所有服务器管理工具的功能,比如批量管理.同时它还有很多的自主研发功能.比如同步操作.到期提醒.数据安全和定期执行.当然适用的系统也有Windows和liunx操作系统.还支持 ...
- Java框架JSON-RPC项目demo代码实战 + JAVA WEB配置虚拟目录(转自21天java web开发)
Java框架JSON-RPC项目demo代码实战 备注 JAVA WEB配置虚拟目录(转自21天java web开发) https://blog.csdn.net/wjxbj/article/det ...
- idea配置jfinal_intellij idea安装与配置(Java开发配置篇)
一.maven配置 在configure->settings的搜索框中输入maven,然后入下图所示,修改maven主目录.maven配置文件.maven本地仓库地址 二.SVN设置 在搜索框中 ...
最新文章
- android monkey原理_Monkey与Appium的使用
- 电脑课装b专用代码_FANUC伺服电机代码表(完整版)
- 爬虫 spider09——爬取指定数据,去重复,并存储到mysql
- nodejs安装express框架
- 2019-03-18-算法-进化(删除链表的倒数第N个节点)
- Matlab各种最值问题
- amd 安装 linux驱动怎么安装教程,请教,怎么在ubuntu里安装amd显卡驱动
- IP地址的分类——a,b,c 类是如何划分的
- 【java机器学习】支持向量机之拉格朗日乘子法解释
- 信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...
- 飞鸽传书 的内置的计算机处理
- amd服务器有什么优势,服务器市场才是AMD真正想要发挥作用的地方
- 自如回应南京租客事件:未对该房源进行过装修 配置的家具符合规定
- 几行Python代码打造自己的磁盘垃圾文件清理器
- 随想录(以师带徒的原则)
- Exchange Server 2016 之三:邮箱角色部署
- 股票群的骗术 ,几乎99%的QQ群
- 【opencv】 报错:C2065 “CV_COVAR_ROWS”、“CV_COVAR_NORMAL”、“CV_COVAR_SCALE”: 未声明的标识符、
- linux 运行魂斗罗,如何在linux/freebsd下玩模拟器游戏_linux教程
- Python的函数使用
热门文章
- 【GPS】进入adb shell用garden_app查看已搜到卫星
- linux mplayer rpm,CentOS 6.5 安装 Mplayer!
- (转)Unity 3D中的无限大地形的生成和调度
- 为什么推荐 Java 开发人员都学习并使用 Kotlin?
- react无缝滚动_react 实现一个无限循环的轮播器 附github地址
- 赶鸭子的c语言编程,[c语言]赶鸭子上架之QT中delete[]指针出现触发断点的原因是啥???帮忙看下...
- iOS 仿 UC 浏览器个人中心 (下拉实现果冻效果)
- 我工作三年了,该懂并发了!
- 苍之涛 俄罗斯方块教程
- 鸿蒙系统的软件怎么下载,鸿蒙系统app软件下载-鸿蒙系统官方最新版-幻想游戏网...