簡體   English   中英

垃圾收集器的解釋-分配失敗

[英]explanation for Garbage Collector - Allocation Failure

我目前正在調查《我的世界》游戲中的性能錯誤( 原始帖子 )。 我需要檢查的最后一件事是垃圾收集器的輸出。 當我這樣做時,我注意到所有輸出的99%是[GC (Allocation Failure)....這是輸出的一小部分示例:

13.238: [GC (Allocation Failure)  805728K->167001K(1601024K), 0.0251328 secs]
13.907: [GC (Allocation Failure)  805977K->167208K(1618432K), 0.0257168 secs]
14.559: [GC (Allocation Failure)  802088K->167520K(1597440K), 0.0262393 secs]
15.257: [GC (Allocation Failure)  802400K->168597K(1622016K), 0.0281692 secs]
15.925: [GC (Allocation Failure)  805525K->170531K(1618944K), 0.0202619 secs]
27.474: [GC (Allocation Failure)  807459K->178239K(1626624K), 0.0239986 secs]
27.884: [GC (System.gc())  215249K->179128K(1624576K), 0.0286153 secs]
27.913: [Full GC (System.gc())  179128K->167443K(1624576K), 0.4367059 secs]

這到底是什么意思? 我發現了另一篇有關它的文章 ,但我不太明白它們的意思。 有人可以用“嬰兒語言”向我解釋嗎?

作為一個問題建議,我將嘗試用嬰兒語言重新解釋Java GC(分配失敗)的答案。

JVM始終在堆中維護大量的空閑內存以用於新分配。

通常,當您執行new Something() ,一部分內存將從該空閑內存塊中剔除。 那是正常分配。

但是,最終空閑塊耗盡了,下一次嘗試插入一些內存的嘗試將失敗,即allocation failure

這是垃圾回收開始的信號。垃圾回收發揮其魔力,發現死亡的物體,將回收的內存壓縮為較大的空閑塊,並繼續循環。

換句話說, allocation failure -對於JVM來說是完全正常的情況。

實際上,事情要稍微復雜一些。 堆有兩個部分(年輕空間和舊空間),線程本地分配緩沖區等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM