gpt4 book ai didi

java.lang.OutOfMemoryError GC 开销限制超过 Java 堆空间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:28:21 25 4
gpt4 key购买 nike

java.lang.OutOfMemoryError: Java heap space 是什么意思该消息意味着应用程序只需要比正常运行可用的更多 Java 堆空间。

java.lang.OutOfMemoryError: GC overhead limit exceeded 是什么意思此消息意味着由于某种原因,垃圾收集器占用了过多的时间(默认情况下占进程所有 CPU 时间的 98%),并且在每次运行中回收的内存很少(默认情况下占堆的 2%)。这在内部也意味着当应用程序只需要比正常运行可用的更多 Java 堆空间时。

那么我的问题是,以上两种情况会触发哪种情况?

所以这是我的理解,何时会根据场景抛出特定异常:-

假设我分配了 1GB 的堆大小。当前使用的堆内存为 970 MB。线程启动(JVM 预先不知道它将消耗多少内存)。现在 GC 可以采取以下步骤之一

1) JVM 开始分配内存,然后在某一时刻耗尽 1GB 内存并抛出 java.lang.OutOfMemoryError: Java heap space

2) GC 提前运行并尝试释放一些内存,因为它知道当前使用的内存接近 1 GB 已分配,堆。但是它不能在每个空间中释放超过 2% 的空间后续运行。然后会抛出java.lang.OutOfMemoryError: GC overhead limit exceeded

根据我的问题,我的理解是否正确?

最佳答案

OutOfMemoryError: Java heap space

JVM 无法满足分配请求,即使在它可以支配的所有最后努力之后也是如此。

OutOfMemoryError GC overhead limit exceeded

意味着 JVM 可能能够满足分配请求,但在最近它不得不频繁地进行 GC,以至于花费在 GC 上的 CPU 时间量超过了 java 使用的总 CPU 时间的(可配置的)分数过程。

JVM 会自行终止,而不是徘徊在半工作状态、效率极低的状态,这种状态可能只会随着时间的推移变得更糟。

通常禁用 GC 开销 OOM 只会在几分钟后导致 Java 堆空间 OOM。

它基本上是一种快速失败机制。

关于java.lang.OutOfMemoryError GC 开销限制超过 Java 堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329785/

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