030、JVM实战总结:G1分代回收原理深度图解:为什么回收性能比传统GC更好?
本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明
1、前文回顾
很多Region,新老各自对应一些Region,会在指定的系统停顿时间内,回收价值最大的Region
2、如何设定G1对应的内存大小
-Xms和-Xmx来设置堆内存
-XX:+UseG1GC 使用G1,JVM最多可以有2048个Region
-XX:G1HeapRegionSize 设置每个Region的大小,一般保持默认就可以,Region大小是2的0-5次幂M(1,2,4,8,16,32)。如果手动设置为3,则向下取最大的:2
-XX:G1NewSizePercent 设置新生代初始占比,默认5%。
-XX:G1MaxNewSizePercent 设置新生代最大的占比。默认60%。5%到60%之间的空间是有可能被老年代给占用的。
??疑问:既然空间分配是动态的,设定一个最大占比就可以了,初始占比设置的意义在哪?
- 初始值是极端情况下新生代的自留地。即老年代极端情况可以占95%。
??问题:使用系统默认值的情况下,新生代内存初始值是5%,最大值是60%,也就是说极端情况下,老年代是可以分配到95%的堆内存的?
- 极端情况下是的
3、新生代还有Eden和Survivor的概念吗?
新生代里还是有Eden和Survivor的划分,会各自占据不同的Region。也可以使用-XX:SurvivorRatio=8
4、G1的新生代垃圾回收
触发和回收新生代和之前的过程一样。不同点在于:由于MaxGCPauseMills的设定,只会在指定时间内回收掉尽可能多的垃圾对象
5、对象什么时候进入老年代?
进入老年代的条件:1、年龄到了 2、动态年龄判断 ,具体查看https://www.cnblogs.com/csldm/p/11296124.html 3、新生代空间放不下了
6、大对象Region
大于单个Region 50%的属于大对象。直接使用空的Region放大对象。存在大对象情况的情况下,新生代空间+老年代空间 = 堆空间 - 大对象空间
7、本文总结
总结:
1、新生代老年代是个逻辑的概念,即同一个Region在系统经历过若干次垃圾回收后,做过新也当过老,也有可能新老都没有作过
2、空间分配的单位是Region
3、虽然新老是个逻辑概念,但他们是有自己的大小上下限的。默认情况下新最大占60%,老最大占1 - 5%的新生代初始值=95%
4、触发和回收新生代和之前的过程一样。不同点在于:由于MaxGCPauseMills的设定,只会在指定时间内回收掉尽可能多的垃圾对象
5、进入老年代的条件:1、年龄大了 2、动态年龄判断 3、存活对象Survivor放不下
6、大于单个Region 50%的属于大对象。
思考题:G1最大进步什么?
答:最大进步就是STW可控,但是,虽然各个Region所属区域是动态变化的,但不是随意变化的,还是会为Eden、Survivor、老年代保留各自需要的空间。例如不会让Eden空间的分配超过系统设定的值
本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明
030、JVM实战总结:G1分代回收原理深度图解:为什么回收性能比传统GC更好?相关推荐
- jvm性能调优 - 19G1分代回收原理深度图解
文章目录 Pre 如何设定G1对应的内存大小 新生代还有Eden和Survivor的概念吗? G1的新生代垃圾回收 对象什么时候进入老年代? 大对象Region 小结 思考 Pre 上篇文章我们给大家 ...
- Java虚拟机笔记(五):JVM中对象的分代
为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...
- JVM堆内存控制/分代垃圾回收
JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之 ...
- JVM中对象的分代年龄
堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ...
- JVM分代回收机制和垃圾回收算法
JVM系列文章目录 初识JVM 深入理解JVM内存区域 玩转JVM对象和引用 JVM分代回收机制和垃圾回收算法 细谈JVM垃圾回收与部分底层实现 Class文件结构及深入字节码指令 玩转类加载和类加载 ...
- 一文详解,jvm内存分代与垃圾回收原理
jvm运行时数据区 Java程序启动后,本质上就是启动一个jvm进程,jvm会将自己管理的内存划分为几个区域,每个区域都有自己的用途.在程序运行时的内存区域主要可以划分为五个,分别是:方法区.堆.虚拟 ...
- 5、JVM分代模型--新生代 的垃圾回收
为什么要有JVM分代模型? JVM中的对象生命周期不同,有的对象长期存在,而有的对象朝生夕死,对象生命周期的不同直接导致了进行垃圾回收时存活对象比例不同,而存活对象比例不同就导致需要使用不同的垃圾回收 ...
- JVM从零开始(二) -垃圾回收机制以及内存分代模型
JVM中垃圾回收的判定标准 最终目的是将内存中无用的对象回收掉.具体的判定方法有: 引用计数法,不采用,指的是维护对象被引用的次数,次数为0则意味着是垃圾. 可达性算法-GC Roots tracin ...
- 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )
文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...
最新文章
- USACO Training Section 1.1黑色星期五Friday the Thirteenth
- Adobe Air 写文件如何换行
- android上运行java命令,Java exec()不在android上运行busybox命令
- vue 执行函数this_在vue中使用回调函数,this调用无效的解决
- 使用 sync.ErrGroup 实现并发搜索文件
- Django实现微信消息推送
- 传统的6d位姿估计fangfa1_基于视觉的机器人抓取从物体定位、位姿估计到抓取位姿估计 | 公开课预告...
- 算法面试:精选微软经典的算法面试100题(第21-25题)
- 【笔记分享】LED点阵屏幕显示原理
- linux搭建邮件服务器
- python制作ppt_如何利用Excel与Python制作PPT
- 微表情测试软件排行榜,微表情心理测试分析系统:以“微”见智,识情绪辨人心...
- Glide 加载圆形图片
- 计算机所有以太网适配的ip,Win10电脑以太网没有有效的ip配置怎么解决?附上具体解决方法...
- 【UE4 虚幻引擎 学习笔记二】引擎内按键输入简单设置
- python简单图片识别_用Python进行简单的图片识别(1)
- JAVA中级二 输入输出流,常见文件操作
- NYoj 239 :月老的难题(二分图最大匹配)
- 子网掩码是干什么用的?
- C语言编程 体型预测
热门文章
- Oracel 连接远端服务器
- Android辅助服务监听dialog,Android开发中对话框辅助类——DialogHelper
- android view设置按钮颜色_Android 酷炫自定义 View:高仿 QQ 窗帘菜单
- 中专计算机系专业总结范文,计算机*的中专生自我鉴定范文
- IPLAT62--弹窗
- android 回退函数,android浏览器研究-回退和前进
- matlab模式识别实验二,模式识别实验二
- 平衡二叉树的旋转_平衡二叉树的旋转
- html5触摸界面设计与开发_原生APP的开发步骤主要分为哪些?
- matlab2015统计工具箱,matlab统计工具箱函数汇集