JVM在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对象尽早被释放掉,对于长周期对象,则不需要频率垃圾回收以确保无谓地垃圾扫描检测。

为解决这种矛盾,Sun JVM的内存管理采用分代的策略。

1)年轻代(Young Gen):

年轻代主要存放新创建的对象,内存大小相对会比较小,垃圾回收会比较频繁。年轻代分成1个Eden Space和2个Suvivor Space(命名为A和B)。当对象在堆创建时,将进入年轻代的Eden Space。垃圾回收器进行垃圾回收时,扫描Eden Space和A Suvivor Space,如果对象仍然存活,则复制到B Suvivor Space,如果B Suvivor Space已经满,则复制到Old Gen。同时,在扫描Suvivor Space时,如果对象已经经过了几次的扫描仍然存活,JVM认为其为一个持久化对象,则将其移到Old Gen。扫描完毕后,JVM将Eden Space和A Suvivor Space清空,然后交换A和B的角色(即下次垃圾回收时会扫描Eden Space和B Suvivor Space。这么做主要是为了减少内存碎片的产生。

我们可以看到:Young Gen垃圾回收时,采用将存活对象复制到到空的Suvivor Space的方式来确保尽量不存在内存碎片,采用空间换时间的方式来加速内存中不再被持有的对象尽快能够得到回收。
年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块ÿ

JVM中的新生代和老年代相关推荐

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

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

  2. jvm中的年轻代 老年代 持久代 gc ----------转载

    jvm中的年轻代 老年代 持久代 gc 虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation) ...

  3. jvm对象从新生代到老年代_深入理解jvm内存模型以及gc原理

    整体架构 Jvm = 类加载器 + 执行引擎 + 运行时数据区域 类加载器 ● 作用 类加载器是将编译好的class文件加载到内存中,并进行验证.初始化等步骤,形成能被jvm直接使用的类型. ● 加载 ...

  4. jvm详解 - 新生代与老年代

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 J ...

  5. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  6. jvm中年轻代,老年代

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

  7. jvm对象从新生代到老年代_一文搞懂JVM新生代、老年代和永久代

    Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为"GC堆". 从内存回收角度看,由于现在收集器基本都采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代.再细致 ...

  8. Java中的新生代、老年代和永久代

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

  9. java 年轻代算法_java内存模型 年轻代/年老代 持久区,jvm中的年轻代 老年代 持久代 gc...

    虚拟机中的共划分为三个代:年轻代(Young Generation).老年代(Old Generation)和持久代(Permanent Generation).其中持久代主要存放的是Java类的类信 ...

最新文章

  1. Windows Azure ISV博客系列:ReedRex 的sociobridge
  2. 库(静态库和动态库)
  3. RBF(径向基)神经网络 非线性函数回归的实现
  4. 项目: 用C语言写一个音乐播放器
  5. 【推荐软件】wingrep
  6. nssl1487-图
  7. 定位于定位优化(iOS)
  8. react-生命周期
  9. 架构的变迁,从分层架构先聊起
  10. jasmine-JavaScript单元测试工具
  11. 目标检测——阅读代码需要了解的内容
  12. java环境变量设置 重启吗_java环境变量配置,原来是这样的
  13. windows对应字体
  14. 2656 阿克曼函数
  15. ArcGIS实验教程:ArcGIS 10.2手把手图文安装教程(经典版)
  16. 花式讲解校园网绕过认证原理
  17. 用EXCEL批量改变文件的名称
  18. 物联网大赛 - Android学习笔记(三)Android 事件处理
  19. 设计模式--适配器模式
  20. 【Docker】No defult Boot2Docer ISO异常

热门文章

  1. WIN10下Visual Studio 2012的安装
  2. 【NVMEM子系统】一、Efuse介绍及安全启动浅析
  3. 输电杆塔导线地线比载计算,应力计算
  4. 创建会计科目(FSP0/FS00)报错“损益报表科目类型在科目表 ZT01 中未定义”
  5. html怎么做包含块,字节前端都知道的CSS包含块规则
  6. 7.1 MySQL视图和存储过程
  7. matlab 画实心圆柱体,如何用matlab画出空心圆柱体
  8. Opencv_14 直方图以及其应用
  9. Latex设置字体大小及编辑公式等命令
  10. 网络综合布线七大子系统详解(图解)