Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 超出GC开销限制_Java_Garbage Collection_Jvm - Fatal编程技术网

Java 超出GC开销限制

Java 超出GC开销限制,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,JVM用于抛出“java.lang.OutOfMemoryError:超出GC开销限制”的采样时间是多少? 我知道您可以使用参数GCTimeLimit和GCHeapFreeLimit控制98%和2%,但采样时间是多少 以下 GC时间过长和OutOfMemoryError错误 如果太多,并发收集器将抛出OutOfMemoryError 在垃圾收集中花费的时间:如果超过98% 垃圾收集所花费的总时间不到 堆恢复后,将抛出OutOfMemoryError。此功能 旨在防止应用程序运行较长时间 一段时间

JVM用于抛出“java.lang.OutOfMemoryError:超出GC开销限制”的采样时间是多少? 我知道您可以使用参数GCTimeLimit和GCHeapFreeLimit控制98%和2%,但采样时间是多少

以下

GC时间过长和OutOfMemoryError错误

如果太多,并发收集器将抛出OutOfMemoryError 在垃圾收集中花费的时间:如果超过98% 垃圾收集所花费的总时间不到 堆恢复后,将抛出OutOfMemoryError。此功能 旨在防止应用程序运行较长时间 一段时间,但由于堆是 太小了。如有必要,可通过添加 选项 -XX:-usegcoveredlimit到命令行

该策略与并行收集器中的策略相同,只是 执行并发收集所花费的时间不计入 98%的时限。换句话说,只有集合在 由于GC时间过长,应用程序停止计数。这样的 集合通常是由于并发模式故障或 显式收集请求(例如,调用System.gc()

与下面的通道相连

显式垃圾最常见的用法之一 使用RMIs分布式垃圾收集(DGC)进行收集。 使用RMI的应用程序引用其他虚拟机中的对象。 在这些分布式应用程序中,如果没有 偶尔收集本地堆,因此RMI强制进行完全收集 定期地这些收集的频率可以控制 具有属性。比如说,

java -Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
指定每小时一次的显式收集,而不是默认的每小时一次 分钟。但是,这也可能会导致某些对象花费更长的时间 被回收。这些属性可以设置为与Long.MAX_值一样高 要使显式集合之间的时间有效地无限长,如果 对于DGC的及时性,不希望有一个上限 活动

这似乎意味着确定98%的评估周期为一分钟,但它可以在Sun的JVM上使用正确的定义进行配置


当然,也可能有其他解释。

RMI分布式垃圾收集是与常规垃圾收集无关的活动。所以我不明白你怎么能推断出你刚才做了什么。这个推断并不完美,甚至不正确,这就是为什么用“似乎暗示”代替“暗示”。如果您同意这样的观察结果,即如果Sun的员工使用一分钟来确定RMI的垃圾收集间隔,那么并发收集中的收集时间只有在主程序停止时才进行累积计算,并且做出了一点信心的飞跃,那么在一分钟内收集98%的垃圾的几率是很高的。这是一个神奇的数字,但与3.5分钟相比,一分钟是一个神奇的数字。@StephenC你的意思是即使我们设置
-XX:+DisableExplicitGC
,它也不会影响RMI相关的配置,系统将以参数
-Dsun.RMI.dgc.server.gcInterval
@stophen-No.设置的频率调用gc。我不是这么说的。我说的是这样一句话:“似乎意味着确定98%的评估期是一分钟……”。请注意,Edwin同意这个推论是“不完美的”。该推断基于这样的假设,即实现RMI(&DGC)的Sun人员与实现GC开销限制机制的人员进行了密切的通信。我怀疑这两种情况实际上发生在不同的时间。请注意,
-Dsun.rmi.dgc.server.gcInterval
属性从Java1.2开始就存在了。无论如何,找到这个问题真正答案的更好方法是查看OpenJDK源代码。