为什么老一代不好?
Why is old generation bad?
一个对象可以在幸存者 space 之间复制 7 次,然后再重新定位到老年代 space,我知道这是为了让该对象有机会在之前被垃圾收集被放入老年代space。我正在听的讲座说这是为了避免从年轻一代 space 到老一代 space 的对象提升。
我的问题是为什么升级到老年代不好?讲座没有解释。
因为一旦对象处于旧 space 状态,唯一可以收集它的方法是 运行 完全垃圾收集;即收集整个堆的垃圾。
您想避免这种情况。
Why is old generation bad?
The lecture that I am listening to states that this is so to avoid object promotion from young generation space to old generation space.
并不是提升到老一代不好一般。只有当生命周期短的对象被意外提升时才糟糕。
您想要 老年代中的长期对象,这样它们就不会干扰次要集合。
分配率与对象生命周期大致相反(这导致了 weak generational hypothesis)。这意味着短命对象的生成率很高。
这反过来意味着:如果生命周期短的对象被提升到老一代,那么老一代将以很高的速度被填满。
次要 GC 通常比主要 GC 更便宜,尤其是在暂停时间方面,这就是为什么您希望 运行 后者更少。
对于CMS和G1你还要进一步区分。他们尝试以部分并发的方式收集老年代——在 G1 的情况下是小块收集——但如果他们遇到一些失败案例 或无法跟上,他们会退回到完全停止世界的 GC晋升率.
基本上过快地提升太多短生命周期的对象违反了构建 GC 的弱代假说。
一个对象可以在幸存者 space 之间复制 7 次,然后再重新定位到老年代 space,我知道这是为了让该对象有机会在之前被垃圾收集被放入老年代space。我正在听的讲座说这是为了避免从年轻一代 space 到老一代 space 的对象提升。
我的问题是为什么升级到老年代不好?讲座没有解释。
因为一旦对象处于旧 space 状态,唯一可以收集它的方法是 运行 完全垃圾收集;即收集整个堆的垃圾。
您想避免这种情况。
Why is old generation bad?
The lecture that I am listening to states that this is so to avoid object promotion from young generation space to old generation space.
并不是提升到老一代不好一般。只有当生命周期短的对象被意外提升时才糟糕。
您想要 老年代中的长期对象,这样它们就不会干扰次要集合。
分配率与对象生命周期大致相反(这导致了 weak generational hypothesis)。这意味着短命对象的生成率很高。 这反过来意味着:如果生命周期短的对象被提升到老一代,那么老一代将以很高的速度被填满。
次要 GC 通常比主要 GC 更便宜,尤其是在暂停时间方面,这就是为什么您希望 运行 后者更少。
对于CMS和G1你还要进一步区分。他们尝试以部分并发的方式收集老年代——在 G1 的情况下是小块收集——但如果他们遇到一些失败案例 或无法跟上,他们会退回到完全停止世界的 GC晋升率.
基本上过快地提升太多短生命周期的对象违反了构建 GC 的弱代假说。