JVM1.8オブジェクトの割り当て

JVMを深く理解することはJVM1.7についてであり、1.8では多くの点が異なります

たとえば、本のP91-P93オブジェクトは、Edenで優先的に割り当てられます。

そして次のコード

public class JVM {
    private static final int __1MB = 1024*1024;

    public static void main(String[] args) {
        // 10M young  10M old
        byte[] a1,a2,a3,a4;
        a1 = new byte[2*__1MB];
        a2 = new byte[2*__1MB];
        a3 = new byte[2*__1MB];
        // 直接分配到了老年代
        a4 = new byte[4*__1MB];
    }
}

本書はal4 ==マイナーGC ==を割り当てた時期があったと述べて
いますが、1.8ではGCは発生せず、Eden領域に直接割り当てられました。Al4は古い
1.8 に直接割り当てられました。動作図は次のとおりです。

ここに画像の説明を挿入

次のコードを見てください

public class JVM {
    private static final int __1MB = 1024*1024;

    public static void main(String[] args) {
        // 10M young  10M old
        byte[] a1,a2,a3,a4;
        // 发生GC时按照分配顺序进入了老年代
        a1 = new byte[2*__1MB];
        // 分配在Eden区
        a2 = new byte[2*__1MB];
        // Eden满了a3直接进入老年代
        a3 = new byte[4*__1MB];
        // 分配到老年代满了  发生FullGC
        a4 = new byte[6*__1MB];
    }
}

演算結果を図に示します。
ここに画像の説明を挿入
コードを検証するために、の図に示すように、
al3の
実行結果を3MBに変更しました。この
ここに画像の説明を挿入
図は、2つのGCが発生し、1つのFullGCが
al1とal2によって発生したことを示しています。jVMがal3に割り当てようとすると、eden領域は十分ではありません。歳AL2プロモーションは、これが最初のGCである
エデン地区に割り当てられ、AL3
AL4の割り当てで、エデンの領域は、十分に入力するレッツ・AL3古い十分ではありません、GCはそうと、FullGCが発生し、少なくともFullGC GCの一回を伴う
不完全サイズはい、メモリ容量はオリジナルよりも大きくなっています。

元の記事を22件公開 Likes2 Visits 881

おすすめ

転載: blog.csdn.net/weixin_41685373/article/details/102876518