主要是有两个原因,一个是大部分对象的生命周期都很短,只有少部分对象可能会存活很长时间。另一个是垃圾回收会导致 stop the world,也就是应用会暂时停止访问。为了使 stop the world 持续的时间尽可能短以提高并发式 GC 所能应付的内存分配速率,有些垃圾收集器就将对象分成两类,存活时间短的对象所处的区域叫年轻代,存活时间长的对象叫老年代。JDK 8 及以前的垃圾收集器都是有这个分代概念的。
2、哪些对像会进入老年代?
一般有两种情况,第一种是先创建的对象太大了,就会直接进入老年代,另一种是对象的年龄太老了,每发生一次 Minor GC,存活的年龄就 +1,达到默认值 15 就会自动晋升成老年代。
3、什么时候会进行年轻代GC?
一般在年轻代的 Eden 区空间不足时,就会触发年轻代 GC,也就是 Minor GC。
4、什么时候会进行老年代GC?
大约有三种情况,第一次是 Young GC 发生之前,如果老年代的可用内存小于以往 Young GC 后升入老年代的对象的平均大小,此时就带先触发一次 Old GC,腾出更多空间;第二次是 Young GC 触发之后,如果需要晋升老年代的对象在老年代中空间不足,此时还带进行一次 Old GC;第三次是如果老年代的内存使用率超过了 92%,也会直接触发 Old GC。
共以下 3 个回答
1、为什么要区分年轻代和老年代?
因为年轻代和老年代的对象存活率有很大的不同,那么对于涉及年轻代和老年代的垃圾回收算法就会相应不同,具体年轻代以标记-复制算法为主,而老年代以标记-整理算法为主。而设计不同的垃圾回收算法也是为了尽可能减少GC的次数,因为每一次GC都会stop the world。
2、哪些对像会进入老年代?
大对象、回收阈值、x年龄累计的平均大小
1、为什么要区分年轻代和老年代?
主要是有两个原因,一个是大部分对象的生命周期都很短,只有少部分对象可能会存活很长时间。另一个是垃圾回收会导致
stop the world,也就是应用会暂时停止访问。为了使stop the world持续的时间尽可能短以提高并发式 GC 所能应付的内存分配速率,有些垃圾收集器就将对象分成两类,存活时间短的对象所处的区域叫年轻代,存活时间长的对象叫老年代。JDK 8 及以前的垃圾收集器都是有这个分代概念的。2、哪些对像会进入老年代?
一般有两种情况,第一种是先创建的对象太大了,就会直接进入老年代,另一种是对象的年龄太老了,每发生一次 Minor GC,存活的年龄就 +1,达到默认值 15 就会自动晋升成老年代。
3、什么时候会进行年轻代GC?
一般在年轻代的 Eden 区空间不足时,就会触发年轻代 GC,也就是 Minor GC。
4、什么时候会进行老年代GC?
大约有三种情况,第一次是 Young GC 发生之前,如果老年代的可用内存小于以往 Young GC 后升入老年代的对象的平均大小,此时就带先触发一次 Old GC,腾出更多空间;第二次是 Young GC 触发之后,如果需要晋升老年代的对象在老年代中空间不足,此时还带进行一次 Old GC;第三次是如果老年代的内存使用率超过了 92%,也会直接触发 Old GC。
总之就是如果老年代空间不足以放下更多对象了,那就带进行 Old GC 腾空间了。