gpt4 book ai didi

java - 尝试计算时间差来比较两种排序算法

转载 作者:行者123 更新时间:2023-12-01 17:33:23 26 4
gpt4 key购买 nike

public static void main(String[] args){
int[] nums;
int n = 1000000;
int m = 1000;
List<Long> results = new ArrayList<Long>();
Instant before, after;
long delta;

// for(int i = 0; i < 5; i++){
// nums = IntStream.rangeClosed(1, n).toArray();
// shuffle(nums);
// before = Instant.now();
// findKthSmallest(nums, m);
// quickSort(nums,0 , m-1);
// after = Instant.now();
// delta = Duration.between(before, after).toMillis();
// System.out.println(delta);
// }

nums = IntStream.rangeClosed(1, n).toArray();
shuffle(nums);
before = Instant.now();
findKthSmallest(nums, m);
quickSort(nums,0 , m-1);
after = Instant.now();
delta = Duration.between(before, after).toMillis();
System.out.println(delta);
}

在 main 方法中,我尝试打印 delta 5 次。当我在循环(注释掉的 block )内执行此操作时,增量随着时间的推移而减少,这很奇怪。当我在循环外执行此操作(运行代码 5 次)时,增量似乎是一致的。为什么会发生这种情况以及如何解决它?谢谢。

最佳答案

当您编译 java 代码时,它会编译为 java 字节码。当您的程序运行时,它将字节码解释为机器代码。代码的大部分部分只运行一次,因此JVM只解释一次并且不存储机器代码。当 JVM 注意到您一遍又一遍地运行相同的代码时,它会将该部分编译为机器代码并尝试尽可能优化。这称为Just-in-time compilation .

您可以禁用此功能,并使用命令行参数 -nojit 强制程序在禁用 JIT 编译器的情况下持续运行解释型编译器。这将导致更差但更一致的性能。

为了准确测量程序的预热性能,我建议您确定 JVM 预热需要多长时间,然后开始测量。

关于java - 尝试计算时间差来比较两种排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61081225/

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