为什么我得到以下代码的变量输出:

Runtime rt = Runtime.getRuntime();
long x,y;
x = rt.freeMemory();
char z[] = new char[Index];
y = rt.freeMemory();

System.out.println("Difference = " + (x-y))

对于较小的索引值( = 100000的值为200016.对于每个零添加,其值为2000016。

这怎么可能。
我的目的是在内存中找到数据对象的大小(在代码中使用,就像这里我使用Index Size的Char z []一样)。

最佳答案

您的假设似乎是,如果您有n字节的可用内存,并分配m字节,那么之后您将有n-m字节的可用内存。

这是一个合理的假设,但是在异步垃圾收集器存在的情况下是错误的,该垃圾收集器会或不会按照自己的意愿进行内存压缩。

即使您花费数年时间研究某个JVM的行为并积累了深厚的智慧和知识,这些知识和知识可以让您预测分配对freeMemory()结果的影响,但是当您切换到另一个JVM时,这些知识可能突然变得一文不值。只更新您当前的一个。

因此,请信任我们的年长者,并将Runtime.freeMemory()视为一种有趣的随机数生成器。

08-07 19:07