java为什么不支持运行时。freeMemory()仅在创建大型对象时更改?
当我为新字节[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);
# 1 楼答案
OpenJDK/Oracle HotSpot JVM使用TLAB(线程本地分配缓冲区)来支持并发对象分配。这意味着每个线程都会抓取内存块供其使用。如果关闭此选项,您将看到精确的内存记帐
与
-XX:-UseTLAB
一起运行印刷品