JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor

编程入门 行业动态 更新时间:2024-10-03 19:15:41

JVM内存为什么要分成<a href=https://www.elefans.com/category/jswz/34/1769860.html style=新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor"/>

JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor

1)共享内存区划分 1.共享内存区 = 持久代 + 堆(注;jdk1.8及以上jvm废弃了持久代)

2.持久带代= 方法区 + 其他

3.Java堆 = 老年代 + 新生代

4.新生代 = Eden(伊甸区) + S1(幸存1) + S2(幸存2)

2)为什么分年老代和新生代 1、新生代:年轻代主要存放新创建的对象,内存大小相对会比较小,垃圾回收会比较频繁。年轻代分成1个Eden Space和2个Suvivor Space(from 和to)。 2、老年代:年老代主要存放JVM认为生命周期比较长的对象(经过几次的新生代的垃圾回收后仍然存在),内存大小相对会比较大,垃圾回收也相对没有那么频繁。

3)为什么要分为Eden和Survivor?为什么要设置两个Survivor区? 1.如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被 填满,触发Major GC.老年代的内存空间远大于新生代,进行一次Full GC消耗的时间比Minor GC 长得多,所以需要分为Eden和Survivor。 2.Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只有经历16次Minor GC还能在新生代中存活的对象,才会被送到老年代。 3.设置两个Survivor区最大的好处就是解决了碎片化,刚刚新建的对象在Eden中,经历一次Minor GC,Eden中的存活对象就会被移动到第一块survivor space S0,Eden被清空;等Eden区再满 了,就再触发一次Minor GC,Eden和S0中的存活对象又会被复制送入第二块survivor space S1(这个过程非常重要,因为这种复制算法保证了S1中来自S0和Eden两部分的存活对象占用连续 的内存空间,避免了碎片化的发生)。

更多推荐

JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor

本文发布于:2024-02-28 14:19:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769962.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:新生代   中为   持久   内存   年代

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!