首页 > 试题广场 >

请说明一下eden区和survial区指的是什么?工作原理又

[问答题]
请说明一下eden区和survial区的含义以及工作原理?
考察点:JVM 参考回答: 目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成Eden 空间、 From Survivor 和 To Survivor 三块区域。 我们把Eden : From Survivor : To Survivor 空间大小设成 8 : 1 : 1 ,对象总是在 Eden 区出生, From Survivor 保存当前的幸存对象, To Survivor 为空。一次 gc 发生后: 1)Eden 区活着的对象 + From Survivor 存储的对象被复制到 To Survivor ;  2) 清空 Eden 和 From Survivor ; 3) 颠倒 From Survivor 和 To Survivor 的逻辑关系: From 变 To , To 变 From 。可以看出,只有在 Eden 空间快满的时候才会触发 Minor GC 。而 Eden 空间占新生代的绝大部分,所以 Minor GC 的频率得以降低。当然,使用两个 Survivor 这种方式我们也付出了一定的代价,如 10% 的空间浪费、复制对象的开销等。
发表于 2019-05-02 12:14:55 回复(0)
eden就相当于是使用空间 survivor就相当于是保留空间通常情况下eden会比survivor大的多 因为eden和survivor都是属于新生代 (还有老生代,jvm 将堆分为新生代和老生代) 新生代里的对象一般都是朝生夕死所以活下来的不多 所以保留空间小一些就好了
发表于 2019-04-30 23:32:02 回复(0)
新创建的对象成为新生代,放在堆中的eden区; 当eden区满了,进行一次垃圾回收,然后剩下的对象称为年轻代,放到一个survivor区; 当eden区再次满了,垃圾回收,剩余对象放到一个survivor区,如s2区,之前s1区也放到这个区。 重复上述过程,默认15次,还存过的对象称为年老代,放到old区,当old区也满了,进行一次大的**回收机制。
发表于 2019-02-24 09:54:32 回复(0)
新生代有一个较大的Eden区和两个较小的Survivor区组成,绝大多数新创建的对象都是在Eden区分配的,其中大多数对象很快消亡。Eden是一块连续的内存,所以分配内存的速度很快。
首先,Eden满时,进行一次minor gc ,将存活 的对象复制到 To Survivor(以下简称To),清除Eden消亡的对象。当Eden再次满时,进行minor gc,To中能够晋升的移动到老年代,存活的对象复制到From。
清空Eden和To,如此切换(默认15),将存活的对象迁移到老年代。
发表于 2019-03-20 16:05:53 回复(0)