gpt4 book ai didi

java - Runtime.Freememory() 在两个连续调用之间初始化数组时返回变量值?

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:14 24 4
gpt4 key购买 nike

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

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

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

对于较小的索引值(<10000),输出为 = 零,但对于 >=100000 的值,值为 200016。对于每个零添加,它变为 2000016。

这怎么可能。[已编辑]我的目标是在内存中找到数据对象的大小(在代码中使用 - 就像这里我使用索引大小的 Char z[])。

最佳答案

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

这是一个合理的假设,但在异步垃圾收集器的存在下它是错误的,异步垃圾收集器会或不会按照他们认为合适的方式进行内存压缩。

即使你花了数年时间研究某个 JVM 的行为并积累了深刻的智慧和知识,使你能够预测分配对 freeMemory() 结果的影响,但当你切换到另一个 JVM 或仅更新您当前的 JVM。

因此,请相信我们这些前辈,并将 Runtime.freeMemory() 视为一种有趣的随机数生成器。

关于java - Runtime.Freememory() 在两个连续调用之间初始化数组时返回变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503839/

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