新しいバイト [1000] を作成し、新しいバイト [1000 * 1000] に対して 1000016 を作成すると、このプログラムが 0 を出力するのはなぜですか?
long m0 = Runtime.getRuntime().freeMemory();
Object obj = new byte[1000];
long m1 = Runtime.getRuntime().freeMemory();
System.out.println(m0 - m1);
新しいバイト [1000] を作成し、新しいバイト [1000 * 1000] に対して 1000016 を作成すると、このプログラムが 0 を出力するのはなぜですか?
long m0 = Runtime.getRuntime().freeMemory();
Object obj = new byte[1000];
long m1 = Runtime.getRuntime().freeMemory();
System.out.println(m0 - m1);
OpenJDK/Oracle HotSpot JVM は、TLAB (Thread Local Allocation Buffer) を使用して同時オブジェクト割り当てをサポートします。これは、各スレッドが使用するメモリの塊を取得することを意味します。これをオフにすると、正確なメモリ アカウンティングが表示されます。
で実行-XX:-UseTLAB
long m0 = Runtime.getRuntime().freeMemory();
Object obj = new Object();
long m1 = Runtime.getRuntime().freeMemory();
if (m1 == m0)
throw new AssertionError("Please disable the TLAB with -XX:-UseTLAB");
System.out.println(m0 - m1);
版画
16