【发布时间】:2020-04-07 13:32:35
【问题描述】:
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 次。 当我在循环(注释掉的块)内执行此操作时,增量随着时间的推移而减少,这很奇怪。 当我在循环之外执行此操作时(运行代码 5 次),增量似乎是一致的。 为什么会发生这种情况,我该如何解决? 谢谢。
【问题讨论】:
-
您的增量获得了哪些价值?它在循环中增加了多少?
-
使用JMH 进行此类测试。
-
@matt 15, 19, 29, 27, 23 用于循环外。 20,8,9,13,10 for 循环内
-
@ndang6 使用循环时值会减少多少。如果在没有循环的情况下运行您的应用程序需要 15 到 30 毫秒,我不知何故怀疑您是否看到 jvm 预热时间差异。