gpt4 book ai didi

java - OutOfMemoryError 之前的垃圾收集

转载 作者:行者123 更新时间:2023-11-30 11:49:13 25 4
gpt4 key购买 nike

这是一个关于 java 中的垃圾收集的问题:如果分配了一大块内存(使用 new int[BIG_NUMBER] 或其他),是否可以保证垃圾收集器会在抛出 OutOfMemoryError 之前收集垃圾?这是行为吗垃圾收集器现在已成为 Java 规范的一部分?

我了解到垃圾收集器本身可能会抛出此类异常,以防收集垃圾的时间过长,至少在 Sun Hotspot Java 虚拟机的情况下是这样

«如果在垃圾收集上花费了太多时间,并行/并发收集器将抛出一个 OutOfMemoryError:如果超过 98% 的总时间花在了垃圾收集上并且只有不到 2% 的堆被回收,一个将抛出 OutOfMemoryError。此功能旨在防止应用程序长时间运行而由于堆太小而进展甚微或根本没有进展。如有必要,可以通过将选项 -XX:-UseGCOverheadLimit 添加到命令行来禁用此功能。 »

但根据引文,这可能会被禁用,方法是向命令添加一个选项行。

最佳答案

AFAIK,它一直是规范的一部分。

如果 VM 的内存非常低,早期的 OutOfMemoryError 是 Java 6 的一个特性,它被引入是为了在 VM 变得不可用但还没有完全死机时停止它。

我不会关闭这个功能,你最好设计你的系统,这样你就不会接近 98% 的内存使用率。我建议 30% 是一个更舒适的运行水平。

来自 Java 1.4.2 的 Javadoc(2002 年推出)http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/OutOfMemoryError.html

Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.

关于java - OutOfMemoryError 之前的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8487553/

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