gpt4 book ai didi

java - 为什么 Runtime.freeMemory() 仅在创建大对象时才会更改?

转载 作者:行者123 更新时间:2023-11-30 04:24:58 24 4
gpt4 key购买 nike

为什么当我创建新的字节[1000]时,这个程序打印0,并为新的字节[1000 * 1000]打印1000016?

    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(线程本地分配缓冲区)来支持并发对象分配。这意味着每个线程都会获取大量内存供其使用。如果您关闭此功能,您将看到准确的内存统计。

使用-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

关于java - 为什么 Runtime.freeMemory() 仅在创建大对象时才会更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com