年轻代&老年代( Young Generation & Old Generation)

  • 年轻代:年轻代其实分为两部分,分别是1个Eden区和2个Survivor区(分别叫from和to),默认比例是8:1,一般情况下,新创建的对象都会被分配到Eden区,(除非一些特别大的对象会直接放到老年代),当Eden没有足够的空间的时候,就会触发jvm发起一次Minor GC,如果对象经过一次Minor GC还存活,并且又能被Survivor空间接受,那么将被移动到Survivor空间当中,对象在Survivor区中每熬过一次Minor GC,年龄就会增加一岁,当它的年龄增加到一定程度(15岁)时,就会被移到老年代中,当然晋升老年代的年龄是可以设置的。

  • 老年代:当年轻带随着不断地Minor GC ,from survivor中的对象会不断成长,当from survivor中的对象成长大15岁的时候(对象晋升老年代的年龄阔值,可以通过选项-XX:MaxTenuringThreshold 来设置),就会进入老年代,随着Minor GC的持续进行,老年代中对象也会持续增长,最终老年代的空间也会不够用,此时就会执行老年代的GC–>Major GC(Full GC)。Major GC使用的算法是标记清除算法或者标记-压缩算法。

  • 永久区( PermGen Space )
    PermGen Space 的全称是 Permanent Generation Space,是指内存的永久保存区域。这一部分 用于存放 Class 和 Meta 的信息, Class 在被加载的时候被放入 PermGen Space 区域。它和存放常 量的堆区域不同, GC 不会在主程序运行期对 PermGen Space 进行清理,所以如果应用程序会加 载很多类的话,就很可能出现 PermGen Space 错误。这种错误常见在 WEB 服务器对 JSP 进行 预先编译的时候,如果你的 Web App 使用了大量的第二方 Jar 包,并且其大小超过了 NM 默认 的大小,那么就会产生此错误信息了。

    在整个 JDK7 的更新过程当中l,永久区还是存在并被使用的,只不过己经开始从它内部移 出数据了,大致一共移出了三类数据:

    • 例如&APPLID2这样的符号(Symbols)被移到了本地堆区:
    • 内部字符串被移到了 Java 堆区;
    • 类静态属性被移到了 Java 堆区。

    如果你使用的是 JDK7,而 GC 使用的是 GIGC,那么永久区只有在 Full GC 阶段才会被回 收。 GI 只会在永久区满了后才调用 Full GC 事件,或者在应用程序的生产速度比 GI 的垃圾回 收速度快时调用。

    JDK8 HotSpot VM 开始使用本地化的内存空间来存放类的元数据,这个空间叫作元空间 ( Metaspace)。这样的修改意味着 Java.lang.OutOfMemoryError: PermGen 的空间问题将不复存 在,井且不再需要调整和监控这个内存空间,也就是说,在 JDK8 完成了对永久区的移除

针对不同年龄段的对象分配原则如下所示。

  1. 对象优先分配在 Eden 区,如果 Eden 区没有足够的空间时,虚拟机执行一次 MinorGC。
  2. 大对象直接进入老年代(大对象是指需要大量连续内存空间的对象) , Gl GC 针对大对 象有自己的处理方法, 请看第 4 章。这样做的目的是避免在 Eden 区和两个 Survivor 区之间发生 大量的内存拷贝(年轻代采用复制算法收集内存〉。
  3. 长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过 了 1 次 Minor GC 会进入 Survivor 区,之后每经过一次 Minor GC,则对象的年龄加 l ,直到达 到阀值对象进入老年区。
  4. 动态判断对象的年龄。如果 Survivor 区中相同年龄的所有对象大小的总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。
  5. 空间分配担保。每次进行 MinorGC 时, JVM 会计算 Survivor 区移至老年区的对象的平 均大小,如果这个值大于老年区的剩余值大小则进行一次 Full GC,如果小于则进入检查 HandlePromotionFailure 逻辑。判断这个逻辑,如果是 True 则只进行 Minor GC,如果是 False 则进行 Full GC,具体逻辑实现如图 1-20 所示。

JVM老年代和年轻代相关推荐

  1. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  2. JVM年轻代,老年代,永久代详解

    前言 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.本篇文章主要讲解内存区域的年轻代,老年代和永久代,略微提及一些垃圾回收算法,下面是正文. 堆整体 堆主 ...

  3. JVM专题之分代模型:年轻代、老年代、永久代

    目录 一 什么是GC 分代 二 GC 为什么需要分代 三 GC 如何分代,每一个代具体是怎么工作的 3.1 年轻代 3.1.1 Eden Space 3.1.2 Survivor 3.2 老年代 3. ...

  4. jvm之年轻代(新生代)、老年代、永久代以及GC原理详解

    关于JVM,也许你听过这些术语:年轻代(新生代).老年代.永久代.minor gc(young gc).major gc.full gc 不要急,先上图,这是jvm 堆内存结构图 仔细的你发现了 图中 ...

  5. java年轻代minor gc_jvm之年轻代(新生代)、老年代、永久代以及GC原理详解、GC优化...

    关于JVM,也许你听过这些术语:年轻代(新生代).老年代.永久代.minor gc(young gc).major gc.full gc 不要急,先上图,这是jvm 堆内存结构图 仔细的你发现了 图中 ...

  6. java 堆中的永久代_JVM中的堆的新生代、老年代、永久代详解

    JVM中的堆一般分为三大部分:新生代.老年代.永久代,其大致的占比如下: 一.新生代 新生代主要用来存放新生的对象.一般占据堆空间的1/3.在新生代中,保存着大量的刚刚创建的对象,但是大部分的对象都是 ...

  7. JVM的年轻代、年老代(老年代)和永生代(持久代)【Loadrunner性能调优】

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

  8. JVM内存中的年轻代,老年代

    引言 对于大多数Java应用来说,Java Heap(Java堆)是JVM管理的内存中较大的一块,而且Java Heap是被所有线程共享的一块内存区域,于虚拟机启动时创建. 而Java堆的唯一目的就是 ...

  9. Java当中jvm运行时区域新生代、老年代、永久代和Garbage Collection垃圾回收机制【杭州多测师】【杭州多测师_王sir】...

    1.本地方法栈和程序计数器 ==>偏底层一般不会接触到 2.方法区 ==>对应为永久代 3.虚拟机栈(stack) ==>对应为栈 4.堆(heap) ==>对应里面有新生代+ ...

最新文章

  1. php鼠标经过显示文本,jQuery实现鼠标单击网页文字后在文本框显示的方法
  2. LeetCode 面试题 10.02. 变位词组
  3. JDK9的新特性:JVM的xlog
  4. 使用SAP云平台portal服务将SAP UI5应用部署到portal上
  5. 如何在Pandas中使用Excel文件
  6. Request.ServerVariables
  7. UVa 11481 (计数) Arrange the Numbers
  8. centos killall安装
  9. 怎么查看mysql帮助文档_高效查看MySQL帮助文档的方法
  10. CM3中数据传输对齐/非对齐方式
  11. 华为轮值董事长郭平:5“机”协同是基础电力,ICT行业应用将像家用电器和工业电气化
  12. 「mysql优化专题」90%程序员面试都用得上的索引优化手册(5)
  13. 分享5款提高工作效率的CAD插件,总有一款适合你
  14. 长连接如何转换为短连接格式呢?
  15. Unity3d之贴图融合
  16. 计算机网络五层模型(ing)
  17. vue使用高德地图显示坐标
  18. SolidWorks_画螺杆
  19. 【U8】U8.11(8.12) access版本如何升级到用友T3及U8
  20. 【数据结构Python描述】优先级队列描述“银行VIP客户插队办理业务”及“被插队客户愤而离去”的模型实现

热门文章

  1. C语言实现二叉树(二叉链表)
  2. 种草一个让程序员男友编程时,记住一辈子的 IDEA 神仙插件!
  3. nokia n9刷机
  4. 使用 npm 制作命令行脚本工具(一)
  5. 主定理求解算法时间复杂度
  6. python 中iloc_iloc索引之间的Python差异
  7. 招募 | 新心理312招募新成员啦!
  8. [网络安全学习篇18]:ACL及实验(千峰网络安全视频笔记 18 day)
  9. 东大19春学期计算机应用基础作业,[东北大学]21春学期《计算机应用基础》在线平时作业1...
  10. 图片hover后动画,移开后动画结束