web-dev-qa-db-ja.com

GC(割り当て失敗)VS OutOfMemoryError例外

'OutOfMemoryError':通常、このエラーは、Javaヒープにオブジェクトを割り当てるのに十分なスペースがない場合にスローされます。

GC(割り当ての失敗):割り当ての失敗」とは、若い世代の使用可能なスペースよりも大きい割り当て要求があることを意味します。

これは、若い世代のメモリがフル(マイナーGC)であり、フルGCで "OutOfMemoryError"がスローされると、割り当てエラーがスローされることを意味しますか?

7
user3024119

これらcouldは、私が知る限り、関連性があります。しかし、それらはまったく異なるものです。

OutOfMemoryは回復できないエラーです-この時点でJVMは停止します。

GC (Allocation Failure): Allocation Failureは、GCが起動する(そしてマイナーコレクションを行う)理由です。この時点で、次のようないくつかのことが発生する可能性があります。新しい割り当てがyoung generationに収まるのに十分なスペースが解放されます。または、それは発生せず、一部のオブジェクトはold generationに昇格されます。それらがcan't be promotedの場合、full GCがトリガーされる可能性があります。それでも十分なスペースが解放されない場合は、OutOfMemorymightがスローされます。

7
Eugene

一般に、OutOfMemoryErrorは、JVMにすでに割り当てている最大メモリを超えたときに発生します。この量は、開始時に変更できますJava jvmパラメータを使用して。例:-Xmx2G。この金額はすぐには使用されないことに注意してください。下記参照。

GC(割り当ての失敗)も同様ですが、ガベージコレクターがヒープ上のメモリを使い果たし、さらに多くのメモリを割り当てようとしたときに発生します。割り当てられたメモリが使用可能なシステムメモリよりも大きい場合、これは失敗します。基本的に、JVMはそこにないメモリを割り当てようとします。

詳細については参照

1
killjoy

割り当て(避難)失敗

CMSと同様に、アプリケーションの実行中にG1コレクターがコレクションの一部を実行します。アプリケーションがガベージコレクターが空き領域を回復するよりも速くオブジェクトを割り当てるリスクがあります。類似のCMS動作については、「並行マークスイープ(CMS)コレクターの並行モード障害」セクションを参照してください。 G1では、障害(Javaヒープの枯渇)は、G1がある領域から別の領域にライブデータをコピー(退避)しているときに発生します。コピーは、ライブデータを圧縮するために行われます。ガベージコレクションされているリージョンの退避中に空き(空の)リージョンが見つからない場合、割り当てエラーが発生し(退避されているリージョンからライブオブジェクトを割り当てるスペースがないため)、ストップザワールド(STW) )完全な収集が行われます。

0
user3024119