本文是《从 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更好?相关推荐

  1. jvm性能调优 - 19G1分代回收原理深度图解

    文章目录 Pre 如何设定G1对应的内存大小 新生代还有Eden和Survivor的概念吗? G1的新生代垃圾回收 对象什么时候进入老年代? 大对象Region 小结 思考 Pre 上篇文章我们给大家 ...

  2. Java虚拟机笔记(五):JVM中对象的分代

    为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...

  3. JVM堆内存控制/分代垃圾回收

    JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你  -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之 ...

  4. JVM中对象的分代年龄

    堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ...

  5. JVM分代回收机制和垃圾回收算法

    JVM系列文章目录 初识JVM 深入理解JVM内存区域 玩转JVM对象和引用 JVM分代回收机制和垃圾回收算法 细谈JVM垃圾回收与部分底层实现 Class文件结构及深入字节码指令 玩转类加载和类加载 ...

  6. 一文详解,jvm内存分代与垃圾回收原理

    jvm运行时数据区 Java程序启动后,本质上就是启动一个jvm进程,jvm会将自己管理的内存划分为几个区域,每个区域都有自己的用途.在程序运行时的内存区域主要可以划分为五个,分别是:方法区.堆.虚拟 ...

  7. 5、JVM分代模型--新生代 的垃圾回收

    为什么要有JVM分代模型? JVM中的对象生命周期不同,有的对象长期存在,而有的对象朝生夕死,对象生命周期的不同直接导致了进行垃圾回收时存活对象比例不同,而存活对象比例不同就导致需要使用不同的垃圾回收 ...

  8. JVM从零开始(二) -垃圾回收机制以及内存分代模型

    JVM中垃圾回收的判定标准 最终目的是将内存中无用的对象回收掉.具体的判定方法有: 引用计数法,不采用,指的是维护对象被引用的次数,次数为0则意味着是垃圾. 可达性算法-GC Roots tracin ...

  9. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )

    文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...

最新文章

  1. USACO Training Section 1.1黑色星期五Friday the Thirteenth
  2. Adobe Air 写文件如何换行
  3. android上运行java命令,Java exec()不在android上运行busybox命令
  4. vue 执行函数this_在vue中使用回调函数,this调用无效的解决
  5. 使用 sync.ErrGroup 实现并发搜索文件
  6. Django实现微信消息推送
  7. 传统的6d位姿估计fangfa1_基于视觉的机器人抓取从物体定位、位姿估计到抓取位姿估计 | 公开课预告...
  8. 算法面试:精选微软经典的算法面试100题(第21-25题)
  9. 【笔记分享】LED点阵屏幕显示原理
  10. linux搭建邮件服务器
  11. python制作ppt_如何利用Excel与Python制作PPT
  12. 微表情测试软件排行榜,微表情心理测试分析系统:以“微”见智,识情绪辨人心...
  13. Glide 加载圆形图片
  14. 计算机所有以太网适配的ip,Win10电脑以太网没有有效的ip配置怎么解决?附上具体解决方法...
  15. 【UE4 虚幻引擎 学习笔记二】引擎内按键输入简单设置
  16. python简单图片识别_用Python进行简单的图片识别(1)
  17. JAVA中级二 输入输出流,常见文件操作
  18. NYoj 239 :月老的难题(二分图最大匹配)
  19. 子网掩码是干什么用的?
  20. C语言编程 体型预测

热门文章

  1. Oracel 连接远端服务器
  2. Android辅助服务监听dialog,Android开发中对话框辅助类——DialogHelper
  3. android view设置按钮颜色_Android 酷炫自定义 View:高仿 QQ 窗帘菜单
  4. 中专计算机系专业总结范文,计算机*的中专生自我鉴定范文
  5. IPLAT62--弹窗
  6. android 回退函数,android浏览器研究-回退和前进
  7. matlab模式识别实验二,模式识别实验二
  8. 平衡二叉树的旋转_平衡二叉树的旋转
  9. html5触摸界面设计与开发_原生APP的开发步骤主要分为哪些?
  10. matlab2015统计工具箱,matlab统计工具箱函数汇集