繁体   English   中英

GC(分配失败)VS OutOfMemoryError 异常

[英]GC (Allocation Failure) VS OutOfMemoryError Exception

'OutOfMemoryError':通常,当 Java 堆中没有足够的空间分配对象时会抛出此错误。

GC(Allocation Failure):Allocation Failure”表示有一个大于年轻代可用空间的分配请求。

这是否意味着当年轻代内存已满(Minor GC)并且在full GC中抛出“OutOfMemoryError”时会抛出Allocation Failure?

据我所知,这些可能会变得相关; 但它们是完全不同的东西。

OutOfMemory是一个您无法从中恢复的错误 - JVM 将在此时死亡。

GC (Allocation Failure): Allocation Failure是 GC 将启动(并进行次要收集)的原因。 此时可能会发生一些事情,例如:为新分配释放足够的空间以适应young generation 或者那没有发生并且一些对象将被提升到old generation 如果它们can't be promoted ,可能会触发一个full GC - 如果这不能释放足够的空间,则可能会抛出OutOfMemory

通常,当您超过已分配给 JVM 的最大内存时,会发生OutOfMemoryError 使用 jvm 参数启动 java 时可以更改此数量。 例如-Xmx2G 请注意,此金额不会立即使用。 见下文。

GC(分配失败)与此类似,不同之处在于它发生在垃圾收集器耗尽堆上的内存并尝试分配更多内存时。 如果您分配的内存高于可用的系统内存,这将失败。 本质上,JVM 会尝试分配不存在的内存。

查看更多信息

分配(疏散)失败

与CMS一样,G1收集器在应用程序继续运行时运行其集合的一部分,并且存在应用程序分配对象的速度快于垃圾收集器可以恢复可用空间的风险。 有关类似的CMS行为,请参阅并发标记扫描(CMS)收集器中的并发模式失败部分。 在G1中,G1正在将实时数据从一个区域(撤离)复制到另一个区域时发生故障(Java堆的耗尽)。 进行复制以压缩实时数据。 如果在撤离被垃圾收集的区域期间无法找到空闲(空)区域,则会发生分配失败(因为没有空间来分配来自撤离区域的活动对象)和停止世界( STW)完整收藏完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM