'OutOfMemoryError':通常、このエラーは、Javaヒープにオブジェクトを割り当てるのに十分なスペースがない場合にスローされます。
GC(割り当ての失敗):割り当ての失敗」とは、若い世代の使用可能なスペースよりも大きい割り当て要求があることを意味します。
これは、若い世代のメモリがフル(マイナーGC)であり、フルGCで "OutOfMemoryError"がスローされると、割り当てエラーがスローされることを意味しますか?
これらcouldは、私が知る限り、関連性があります。しかし、それらはまったく異なるものです。
OutOfMemory
は回復できないエラーです-この時点でJVMは停止します。
GC (Allocation Failure): Allocation Failure
は、GCが起動する(そしてマイナーコレクションを行う)理由です。この時点で、次のようないくつかのことが発生する可能性があります。新しい割り当てがyoung generation
に収まるのに十分なスペースが解放されます。または、それは発生せず、一部のオブジェクトはold generation
に昇格されます。それらがcan't be promoted
の場合、full GC
がトリガーされる可能性があります。それでも十分なスペースが解放されない場合は、OutOfMemory
mightがスローされます。
一般に、OutOfMemoryError
は、JVMにすでに割り当てている最大メモリを超えたときに発生します。この量は、開始時に変更できますJava jvmパラメータを使用して。例:-Xmx2G
。この金額はすぐには使用されないことに注意してください。下記参照。
GC(割り当ての失敗)も同様ですが、ガベージコレクターがヒープ上のメモリを使い果たし、さらに多くのメモリを割り当てようとしたときに発生します。割り当てられたメモリが使用可能なシステムメモリよりも大きい場合、これは失敗します。基本的に、JVMはそこにないメモリを割り当てようとします。
割り当て(避難)失敗
CMSと同様に、アプリケーションの実行中にG1コレクターがコレクションの一部を実行します。アプリケーションがガベージコレクターが空き領域を回復するよりも速くオブジェクトを割り当てるリスクがあります。類似のCMS動作については、「並行マークスイープ(CMS)コレクターの並行モード障害」セクションを参照してください。 G1では、障害(Javaヒープの枯渇)は、G1がある領域から別の領域にライブデータをコピー(退避)しているときに発生します。コピーは、ライブデータを圧縮するために行われます。ガベージコレクションされているリージョンの退避中に空き(空の)リージョンが見つからない場合、割り当てエラーが発生し(退避されているリージョンからライブオブジェクトを割り当てるスペースがないため)、ストップザワールド(STW) )完全な収集が行われます。