`
生亦何欢
  • 浏览: 11584 次
社区版块
存档分类
最新评论

Young Gen新生代算法

 
阅读更多
SUN/Oracle 的 HotSpot JVM 又把新生代进一步划分为 3 个区域:
1. 一个相对大点的区域,称为“伊甸园区 (Eden)”;
2. 两个相对小点的区域称为“From 幸存区 (survivor)” 和“To 幸存区 (survivor)”。

按照规定,新对象会首先分配在 Eden 中 (如果新对象过大,会直接分配在老年代中)。在 GC 中,Eden 中的对象会被移动到 survivor 中,直至对象满足一定的年纪 (定义为熬过 GC 的次数),会被移动到老年代。

新生代的 GC 使用复制算法:
1. 在 GC 前 To 幸存区 (survivor) 保持清空
2. Eden 中的幸存对象被复制到 To 幸存区 (survivor)。
3. 针对 From 幸存区 (survivor) 中的幸存对象
  • a. 会考虑对象年龄,如果年龄没达到阀值 (tenuring threshold),对象会被复制到 To 幸存区 (survivor)。
  • b. 如果达到阀值对象被复制到老年代。
  • c. 复制阶段完成后,Eden 和 From 幸存区中只保存死对象,可以视为清空。

4. 如果在复制过程中 To 幸存区被填满了,剩余的对象会被复制到老年代中。
5. 最后 From 幸存区和 To 幸存区会调换下名字,在下次 GC 时,To 幸存区会成为 From 幸存区。


ref:http://wiki.jikexueyuan.com/project/jvm-parameter/garbage-collection.html
分享到:
评论

相关推荐

    JVM内存管理和垃圾回收参考.pdf

    分代收集基于对象生命周期的不同阶段,将对象分配到不同的堆中,如新生代(Young Gen)、老年代(Old Gen)和永久代(Perm Gen,Java 8后改为元空间Metaspace)。年轻代中的对象生命周期较短,频繁进行垃圾回收,而...

    思维导图-详细了解JVM和GC过程

    在Java中,堆内存被进一步细分为新生代(Young Generation)、老年代(Old Generation)和永久代(PermGen,Java 8后被元空间(Metaspace)取代)。 - **栈**:每个线程都有一个独立的栈,用于存储方法调用时的...

    JVM调优话术

    新生代中的对象生命周期较短,因此采用复制算法;老年代中的对象生命周期较长,采用标记压缩算法更为合适。 #### 三、案例分析 在实际工作中,JVM调优是非常重要的。比如,在一个项目中,开发人员发现在测试阶段...

    Sun JDK 1.6内存管理--调优篇

    在Sun JDK 1.6中,Java堆进一步划分为新生代(Young Generation)和老年代(Tenured Generation)。新生代又细分为Eden空间和两个Survivor空间(From Space和To Space),大部分对象在Eden区域创建,经过垃圾收集后...

    Java垃圾收集必备手册

    - **分代收集(Generational Collection)**:现代JVM通常采用分代垃圾收集算法,将堆内存划分为不同的区域,如年轻代(Young Generation)、老年代(Old Generation)和永久代(PermGen,Java 8之后为Metaspace)。...

    2023最新JVM+多线程面试真题

    堆内存又分为新生代(Young Generation)和老年代(Tenured Generation),新生代又细分为Eden区、From Survivor区和To Survivor区。对象首先在Eden区创建,经过多次GC(垃圾收集)后存活的对象会被晋升到老年代。 ...

    Java内存与垃圾回收调优.docx

    它被划分为新生代(Young Generation)和老年代(Old Generation)。新生代又细分为Eden区和两个Survivor区,用于存储生命周期较短的对象。非堆内存包括直接内存和Java NIO缓冲区,这些不归属JVM堆管理,但同样需要...

    2021Java字节跳动面试题——面向字节_JVM(上).pdf

    - **新生代(Young Generation)**:新生代又细分为Eden区和两个Survivor区(From和To)。大多数对象都会在新生代中被创建,并且大多数对象会在第一次垃圾回收时被回收掉。当对象在新生代中经历了一次或多次垃圾回收...

    jvm的基础知识总结

    堆中还可以细分为新生代(Young Generation)、老年代(Old Generation)等区域。 2. 方法区(Method Area):用于存储已经被虚拟机加载的类信息、常量、静态变量等数据。在JDK 1.8之前,方法区通常被称为永久代...

    Java虚拟机(JVM)面试题51道 pdf文档整理.zip

    - **新生代(Young Generation)**:包括Eden区和两个Survivor区(From、To),主要用于存储新创建的对象。 - **老年代(Tenured Generation)**:存储生命周期较长的对象,当新生代空间不足时,经过多次GC仍存活...

    Java知识,JVM面试资料

    4. **堆内存结构**:堆内存包含新生代(Young Generation)、老年代(Old Generation)和永久代(Perm Gen space,Java 8后被元空间取代)。新生代用于存放新创建的对象,经过多次垃圾回收后存活的对象会晋升到老...

    JVM-内存管理 2012-12.pdf

    在JDK 1.2版本之后,Java堆被划分为新生代(Young Generation)和老年代(Old Generation)。新生代用于存放新创建的对象,通常划分为Eden区和两个Survivor区(From Survivor区和To Survivor区)。老年代用于存放...

    JVM配置资料JVM配置资料

    - **堆内存(Heap Memory)**:分为新生代(Young Generation)、老年代(Tenured Generation)和持久代(Permanent Generation)。新生代用于存放新创建的对象,老年代存放生命周期较长的对象,持久代则存储类的元...

    java内存管理 .pptx

    在HotSpot JVM中,堆被进一步细分为新生代(Young Generation)和老年代(Old/Tenured Generation),新生代又分为伊甸园(Eden Space)、From Survivor Space和To Survivor Space三个部分,用于垃圾收集的策略。...

    Lesson1.pdf

    HotSpot JVM采用了分代垃圾收集机制,根据对象的存活周期不同将堆内存划分为不同的代(Generation),主要包括新生代(Young Generation)、老年代(Old Generation)和永久代(PermGen,Java 8后被元空间Metaspace...

    JVM 内存结构及配置总结

    堆被划分为新生代(Young Generation)和老年代(Old Generation)两个部分,进一步细分为Eden空间、Survivor空间(From和To)。 - **运行时常量池(Runtime Constant Pool)**:每个类都有一个运行时常量池,它是...

    JVM 20道面试题和答案.docx

    - **新生代(Young Generation)**:新创建的对象首先放入,包括Eden区和两个Survivor区(From和To)。 - **老年代(Old Generation)**:经历过多次GC仍存活的对象会被移到老年代。 - **永久代(Perm Gen space...

    JVM+多线程.pdf

    堆内存通常被划分为几个部分,包括新生代(Young Generation)和老年代(Old Generation)。新生代又可以进一步细分为Eden空间和两个存活区(Survivor Spaces)。垃圾回收主要发生在堆内存中,尤其是新生代。 常用...

    java内存管理精彩概述

    堆分为年轻代(Young Generation)、老年代(Tenured Generation)和持久代(PermGen,JDK 8以后被元空间取代)。堆转储(Heap Dump)是记录堆内存快照的工具,用于分析内存占用情况。 4. **垃圾收集(GC)的工作...

Global site tag (gtag.js) - Google Analytics