为什么我的低精度 java 内存访问基准测试不能正确计算纳秒?

Why my low precision java memory access benchmarking does not count nanoseconds correctly?

提问人:Kudor 提问时间:11/13/2023 最后编辑:Kudor 更新时间:11/13/2023 访问量:59

问:

我正在尝试编写一个代码,该代码使用 测量 100,000 个元素数组中整数的内存访问时间。以下是问题的片段:System.nanoTime()

// array declaration
int[] array = new int[100000];
for (int i = 0; i < 100000; i++)
     array[i] = random.nextInt(10000);


int a = 0;
long aux_sum = 0;
long sum = 0;

for (int i = 0; i < TRIES; i++) {

     long startTime = System.nanoTime();

     for (int j = 0; j < 100000; j++)
          a = array[j];

     long endTime = System.nanoTime();
     sum += endTime - startTime;
     aux_sum += a;
}

// printing aux_sum such that the compiler
// does not optimize the memory accesses of a=array[j];
System.out.println(aux_sum);
System.out.println(sum/TRIES);

表达式计算的时间输出一个非常小的值,如 85、65 等,这不是我所期望的。某些编译器优化是否仍处于激活状态,还是存在其他问题?sum/TRIES

我想提一下,测量不需要非常准确,也不需要深入了解JVM内存管理。

Java 基准测试内存 访问

评论


答: 暂无答案