gpt4 book ai didi

java - 为什么老年代的 gc 比年轻代的 gc 花费的时间更长

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:09 25 4
gpt4 key购买 nike

在执行 GC 时,JVM 会遍历 Activity 对象,并清除未标记的对象。

根据: How to Tune Java Garbage Collection

“Full GC的执行时间相对Minor GC要长一些”

会一直这样吗?

如果我们在老年代空间中有大约 100 个对象,并且伊甸园空间中 Activity 对象(创建和清理对象)的平均数量超过 100,这仍然正确吗?

此外,假设我们执行压缩阶段,那么一条经验法则是复制少量大尺寸对象比复制大量小尺寸对象获得更好的性能。

那么我在这里错过了什么?

最佳答案

"The execution time of Full GC is relatively longer than that of Minor GC"

是的。

当垃圾收集发生时,内存被分成,即单独的池保存不同年龄的对象。几乎所有最常用的配置都使用两代,一组用于年轻对象(年轻一代),另一组用于旧对象(老一代)

不同的算法可用于在不同的世代中执行垃圾收集,每种算法都根据该特定世代的普遍观察到的特征进行优化。

分代垃圾回收利用以下观察结果,称为弱分代假设,关于用多种编程语言(包括 Java 编程语言)编写的应用程序:

  • 大多数分配的对象都不会长时间被引用(被认为是存活的),也就是说,它们会早逝

  • 很少有从旧对象到新对象的引用

年轻代收集发生的频率相对较高,效率高,速度快,因为年轻代空间通常很小,很可能包含很多不再被引用的对象。

在一定数量的新生代收集中幸存下来的对象最终会被提升或保留到老年代。

Generational garbage collection

这一代通常大于年轻一代及其占用长得更慢。因此,年老代收集并不频繁,但需要更长的时间才能完成。

为年轻代选择的垃圾收集算法通常会优先考虑速度,因为年轻代收集很频繁。

另一方面,老年代通常由算法管理这更节省空间,因为老年代占用了大部分堆,而老年代算法必须在低垃圾密度下运行良好。

阅读此 white paper为了更好地理解。以上内容是从那里引用的。

关于java - 为什么老年代的 gc 比年轻代的 gc 花费的时间更长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com