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. 上海职称英语和计算机考试时间,上海职称英语考试时间
  2. 关于C++对象模型的一点理解(2)
  3. python基本语法总结-Python基本语法总结(二)
  4. 四、编译安装php-5.5.34
  5. SDUT-3378_数据结构实验之查找六:顺序查找
  6. Spring Boot引用本地jar包
  7. SAP ABAP和Hybris Commerce的Sample数据
  8. FileFilter接口 java
  9. Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符
  10. 大土狗书屋好书推荐--《史蒂夫·乔布斯传》
  11. 飞思卡尔单片机KEA128之ADC学习
  12. 木马 --- 基本概念和分类
  13. c语言指针重合,时钟指针重合问题的公式
  14. DMS - 简介 Driver Monitor System
  15. mysql hugepage_huge page 能给MySQL 带来性能提升吗?
  16. c++知识点汇总--数组
  17. java葫芦娃喜羊羊格斗_继明日之后看葫芦娃和奥特曼,玩家也能在绝地求生中看喜羊羊了...
  18. html网页肯德基设计代码作业,AI快速制作一幅肯德基广告单页教程
  19. 做科研的几点体会:如何多发 SCI
  20. Chaos Emulator v0.2.3 自建引力模拟器分享

热门文章

  1. 平静的快乐吧,流浪汉
  2. Java用户登录验证系统流程
  3. 【智联招聘年薪65万售前】年薪65万IT售前招聘要求深层解读,你是否合适?
  4. 为什么写代码的时候听音乐
  5. C4D R26 渲染学习笔记 建模篇(0):建模常识
  6. 打字时如何正确放置手指 正确的键盘打字手势
  7. 【案例分析】大疆无人机海外营销思路揭秘
  8. 区县网站群建设改版过程
  9. 世界之窗3的广告过滤规则 2013.5.31更新
  10. 往Iphone里添加歌曲通过91助手