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の一回を伴う
不完全サイズはい、メモリ容量はオリジナルよりも大きくなっています。