2017-10-11 8 views
3

私は、グレーブコレクションアルゴリズムの動作原理を理解しようとしています。私はこれを読んでいるarticle。私の知る限り、それぞれの割り当てはで発生しています。若い世代です。十分な空き容量がない場合、Minor GCがトリガーされてYoung世代(Eden、S1、S2)がクリーニングされます。しかし、今、我々はいくつかのようなクラスを持っていると想像:メモリ割り当てとJavaでのGCの理解

public class TestYoungCrash{ 
    private long l1; 
    private long l2; 
    //... 
    private long l100000000; 
    //tons of other fields 
} 

だから、クラスのオブジェクトが生成が完全にクリアされた場合でも、若い世代には適合しません。

何が起こるのですか?それは標準化されていますか?

答えて

5

このような量のメモリを必要とする単一のオブジェクトを持つことはできません。しかし、ではないため、メモリ制限のが、より実用的な理由のために - JVMは、クラスごとのフィールドの数を制限し、hereを参照してください。クラスまたはインタフェースによって宣言されるフィールドの数が65535に制限されて

ClassFile構造体(§4.1)のfields_count項目のサイズで指定します。

クラス内にメモリを爆発させるフィールドはあまりありません。私はかなり確信しています:もしそれらの65535の長いフィールドを含む単一のオブジェクトが収まらないヒープを持つJVMを起動すると、JVMはおそらく起動しなくなるでしょう。

この意味で、あなたの質問は、JVMに提供されるヒープスペースに収まらない大きすぎる配列を作成するとどうなりますか?そして、あなたは基本的にこれに戻りますquestion ...と言う:OutOfMemoryError

+0

Young Generationgのサイズを変更することはできますか? –

+0

実際には合理的だと思います。ありがとうございました。 –

+0

あなたは大歓迎です;-) – GhostCat

関連する問題