簡體   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