就是eden清理完存活对象到了Survivor1,然后eden和Survivor1比喻成左手,Survivor2比喻成右手,就这样左手倒右手的循环清理,就是分代复制

首先得明白复制算法的思想:

将原有的内存空间划分成两块,每次只使用其中一块,在垃圾回收的时候,将正在使用的内存中的存活对象复制到另一块内存区域中,然后清除正使用过的内存区域,交换两个区域的角色,完成垃圾回收。

然后为什么要在新生代中使用复制算法:

因为新生代gc比较频繁、对象存活率低,用复制算法在回收时的效率会更高,也不会产生内存碎片。但复制算法的代价就是要将内存折半,为了不浪费过多的内存,就划分了两块相同大小的内存区域survivor from和survivor to。在每次gc后就会把存活对象给复制到另一个survivor上,然后清空Eden和刚使用过的survivor。

JVM中新生代为什么要有两个Survivor(from,to)相关推荐

  1. JVM 新生代为什么要有两个 survivor(from, to) 区

    先附一段对新生代中复制算法较好的理解: 首先得明白复制算法的思想: 将原有的内存空间划分成两块,每次只使用其中一块,在垃圾回收的时候,将正在使用的内存中的存活对象复制到另一块内存区域中,然后清除正使用 ...

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

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

  3. JVM垃圾回收中新生代老生代的问题

    今天看了下Jvm中新生代和老年代的定义和解析,然后看到一篇博,把自己整懵了,还好后面应该是懂了. 首先是我看到的关于新生代和老年代相关的部分 转自https://www.cnblogs.com/gao ...

  4. jvm中年轻代,老年代

    jvm中新生代,老年代 一.年轻代 二.老年代 三.永久代 Java中的Heap(堆)是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 由于Java堆是垃圾收集器管理的主要区域,因此 ...

  5. JVM中的新生代和老年代(Eden空间、两个Survior空间)

    现有的主流JVM分别是HotSpot和JRockit,主要研究对象也是这两个.这篇文章里,我们只研究HotSpot,也就是所谓的Sun JVM.目前阶段,Sun的GC方式主要有CMS和G1两种.考虑到 ...

  6. 深入理解JVM——(三)为什么JVM新生代需要两个Survivor区

    经过了JVM区域的学习,我们知道在堆中新生代具有一个Eden区和两个Survivor区,这里就有疑问了,为什么需要Survivor区和为什么需要两个Survivor区?带着疑问我们思考一下. 一.为什 ...

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

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

  8. 【小记】为什么jvm的新生代要分为一个Eden和两个Survivor

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

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

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

  10. JVM(六)为什么新生代有两个Survivor分区?

    本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器. 分代收集器会把内存空间分为:老生代和新生代两个区域,而新生代又会 ...

最新文章

  1. SAP QM Dynamic Modification Rule (动态修改规则)
  2. crosstool-ng配置中的Architecture level、Emit assembly for CPU 、Tune for CPU
  3. DataSet case sensitive issue
  4. php中的getdate 函数,PHP getdate()函数与示例
  5. Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
  6. 20199计算机二级java答案_计算机二级Java练习题-2019.9
  7. 宠物小精灵之收服(信息学奥赛一本通-T1292)
  8. [吴恩达机器学习笔记]16推荐系统5-6协同过滤算法/低秩矩阵分解/均值归一化
  9. 一个网站 一个域名跟服务器吗,域名服务器与根服务器区别吗
  10. 【气动学】基于matlab GUI外弹道仿真系统【含Matlab源码 1044期】
  11. java炒股软件_股票软件java,中国软件股票怎么样
  12. convertTo函数的用法
  13. 指针的运用——快慢指针
  14. SQL Server2012备份到网络驱动器
  15. java 定时为每月10号_Java定时任务配置(Scheduled注解)
  16. visual studio 版本的区别
  17. 移动开发需要了解的UI设计知识
  18. AGV三种导航方式,苏州凌鸟带你走进AGV世界
  19. linux samba服务器的配置
  20. 企业应用业务需求变化的分析与应对-常见的业务需求变化

热门文章

  1. Scrapy命令小结
  2. 组蛋白研究丨Worthington小牛胸腺组蛋白的特征及文献参考
  3. h5页面利用js添加水印
  4. 细恐至微,那些与闰年有关的bug
  5. 银行日常营业模拟(C++数据结构课程设计)
  6. 一位月薪1.2w的北漂程序员真实生活
  7. 国家发改委回应“经济增速”话题:用事实和数据说话
  8. 人工智能中的线性代数:如何理解并更好地应用它?
  9. 收藏夹吃灰系列(三):你一定没用过的MySQL数据库表结构文档生成器,用完后相信你一定会点赞三连的!
  10. HoloLens2填坑经验