1

为什么当我为新字节 [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);
4

1 回答 1

2

OpenJDK/Oracle HotSpot JVM 使用 TLAB(线程本地分配缓冲区)来支持并发对象分配。这意味着每个线程都会获取大量内存供其使用。如果关闭此功能,您将看到准确的内存记帐。

运行-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
于 2013-04-23T06:03:05.940 回答