【发布时间】:2011-04-30 02:56:23
【问题描述】:
我正在测试一种排序算法,我想通过测试 1000 个随机向量来测试平均使用内存。问题是当我在循环中运行大约 20 个随机向量时,垃圾收集器运行并且我失去了计算。请问我该怎么办?不想手动一一测试=X。
for(int j = 0; j < 1000; j++)
{
int vetOriginal[] = Generate();
for(int i = 0; i < 10; i++)
{
int vetParaTeste[] = vetOriginal.clone();
long memoriaInicial = Runtime.getRuntime().freeMemory() / 1024;
mergeSort(vetParaTeste);
somaMemoriaKB += memoriaInicial - Runtime.getRuntime().freeMemory()/1024;
}
}
System.out.println("Average memory used: " + somaMemoriaKB / (1000* 10));
【问题讨论】:
-
听起来像是范围问题。可能是您需要的对象应该在更高级别进行实例化。有一些代码要发布吗?
-
为什么平均使用内存很重要?垃圾收集器在每个 JVM 中都将是一个常量,因此当它运行时,它正在做它应该做的事情,以及它在“真实”运行时会做的事情。丢弃 GC 的结果只会破坏您的结果。
-
理查德,我添加了代码。但我认为 stackoverflow 有点问题。 Joseph,但我的代码可能会产生负的可用内存:stackoverflow.com/questions/5812785/negative-free-memory
-
我的问题仍然存在:我不明白您要测试什么,或者您为什么要尝试找出始终成为运行时一部分的东西。
-
我只是在测试多个案例。我的主程序不会运行 1000 次。我想知道使用的平均内存。这是一项科学测试
标签: java memory memory-management garbage-collection