2021-03-12

现在的JVM的新生代内存中,除了Eden区,还有两个Survivor区。那为什么要这样设置呢?
这和新生代的垃圾回收算法是息息相关的。

复制算法

复制算法是新生代的垃圾收集收集算法,基本思路是将新生代分为两个大小一样的内存区域,每次新对象会放置在其中的一块区域内。当该区域的大小不足以继续分配对象时,此时就会促发Minor GC,首先将存活的对象标记出来,然后将存活的对象转移到另一块内存区域中,这样可以比较紧凑地将对象排列在一起,减小了内存碎片。同时之前那块内存可以一次回收掉所有的对象。
复制算法主要是减少了内存碎片
但是每次只能用一半的新生代,对内存的使用效率太低了!

复制算法的优化:Eden区和Survivor区

其实大多数对象存活周期非常短的,可能一次新生代垃圾回收,99%的对象都被回收了,所以真正的复制算法会进行优化,把新生代内存分为三块:一块Eden区和两块Survivor区。比例可以是8:1:1
平时对象的分配都是分配在Eden区,当Eden区快满时触发垃圾回收,将存活的对象转移到其中一块Survivor区中,然后对Eden区进行清除。等到Eden区再次填满时,Eden区域的存活对象和使用过的Survivor区域的存活对象转移到空的Survivor区域中,然后清除Eden区和之前的Survivor区。就这样始终保存一块Survivor是空的等待接受存活对象,循环使用三块内存。这样可用内存就变成了90%,而不是之前的50%
这也就是为什么新生代要划分为三块区域,这样做既能减少内存碎片,也能提高内存的使用效率

【小记】为什么jvm的新生代要分为一个Eden和两个Survivor相关推荐

  1. 新生代Eden与两个Survivor区的解释

    文章出处:http://ifeve.com/jvm-yong-generation/ 聊聊JVM的年轻代 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分 ...

  2. java 新生代中的Eden与两个Survivor区详解

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

  3. JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    参考文章: https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html https://www.cnblogs.com/duanx ...

  4. JVM Eden空间,From Survivor空间,To Survivor空间

    java进程运行过程中创建的对象存放在堆中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( Young ) 又被划分为三个区域:Eden.From Survi ...

  5. 新生代Eden区、两个Survivor区及老年代的关系

    偶然想起JVM年轻代中Eden区和两个Survivor的比例,就想根据自己的理解和大家探讨一下为什么要配成8 :1 :1的比例. 一.JVM堆分代 1.JVM堆被分为了年轻代和老年代.年轻代的GC过程 ...

  6. jvm的新生代和老年代简介

    新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1),这个比例也是可以修改的.通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中 ...

  7. JVM内存结构--新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数

    转自http://www.cnblogs.com/duanxz/p/6076662.html 一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以, ...

  8. jvm的新生代、老年代、永久代关系

    原文地址:https://blog.csdn.net/iechenyb/article/details/79424974 新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为( ...

  9. JVM 新生代为何需要两个 Survivor 空间?

    我们知道,目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代:新生代又被划分成 Eden 空间. From Survivor 和 To Survivor 三块区域. 看书的时候 ...

最新文章

  1. Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
  2. 乐山市2021年高考成绩查询,四川乐山2021年普通高考报名人数 实际高考参考人数...
  3. docker安装启动nginx详细步骤
  4. echat 图表动态数据生成,渲染,自定义Y轴坐标值
  5. 数据库系统原理(第四章:SQL与关系数据库基本操作 )
  6. 匿名函数、冒泡排序,二分法, 递归
  7. An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中基于蚁群算法的能量有效路由)2
  8. python递归中的return_「问题思考」python的递归中return返回none
  9. Django 分页查询并返回jsons数据,中文乱码解决方法
  10. C语言库函数大全及应用实例三
  11. CamOdoCal_2013-IROS_多个普通相机和里程计的内参和外参自动标定
  12. c语言进度,C语言实现动态进度条
  13. UBNT Bullet M2说明书
  14. 百度地图---之---行政区域划分
  15. 夜神模拟器+Xposed框架+JustTrustMe(用来禁用、绕过 SSL 证书检查)来突破SSL Pinning
  16. 《大秦帝国之崛起》看后感
  17. EXCEL单元格内怎么换行?Alt+Enter
  18. Python爬取皮皮虾视频
  19. 我对目前人工智能和机器学习的看法!
  20. 40W-100W系列PD快充IC方案,AH6680,高效简洁的升降压芯片

热门文章

  1. 3、ssm框架登录验证
  2. PG DBA常用SQL
  3. 中文打字速度测试软件官网,中文打字速度测试软件
  4. ea服务器全世界位置,MT4指标、EA、dell、模板等放置的位置
  5. 基于Android平台的LED照明,基于Android平台的LED照明Wifi控制
  6. mimeType形式大全
  7. 游戏原画入门,新手造型的3个痛点
  8. UTF-16汉字编码表
  9. Hi3798移植4G模块(移远EC20)
  10. 用于HART设备的工业物联网IIoT