04
2020
04

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

Eden和Survivor的比例是8:1.


        首先说如果没有Survivor区会出现什么情况:此时每触发一次Minor GC,就会把Eden区的对象复制到老年代,这样当老年代满了之后会触发Major Gc(通常伴随着MinorGC,可以看做Full GC),比较耗时。


 


如果只有1个Survivor区,那当Eden区满了之后,就会复制对象到Survivor区,容易产生内存碎片化。严重影响性能。

所以使用2个Survivor区,始终保持有一个空的Survivor区,可以避免内存碎片化。


Survivor减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只有经历多次Minor GC还能在新生代中存活的对象,才会被送到老年代。

« 上一篇 下一篇 »

评论列表:

1.访客  2020-07-22 13:48:33 回复该评论
撒发发发发按时啊

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。