gpt4 book ai didi

java - 为什么单独的方法比内联相同的代码工作得更快

转载 作者:行者123 更新时间:2023-11-30 09:01:03 25 4
gpt4 key购买 nike

例如在大数组中搜索最大值。单独方法中带有循环的代码比 main 中相同的内联代码运行得更快。这里运行 10 次以获得平均消耗时间:

  Max generated: 999999  Max is 999999  Time consumed main: 1.8210982999999998 ms  Max is 999999 Time consumed method: 0.6809502000000001 ms

Can someone please explain why such a difference? Thanks.

import java.util.Random;

public class Main {
private static int[] data = new int[1000000];
private final static int COUNT = 10;


public static void main(String[] args) {
initData(data);
long consumedTime;
long startTime = System.nanoTime();
int max = 0;
for (int x = 0; x < COUNT; x++) {
max = data[0];
for (int i = 0; i < data.length; i++) {
if (data[i] > max) {
max = data[i];
}
}
}
consumedTime =(System.nanoTime() - startTime);
System.out.println("Max is "+max+ " Time consumed main: " + (double) (consumedTime)/1000000/COUNT + " ms");


startTime = System.nanoTime();
for (int x = 0; x < COUNT; x++) {
max = getMaxOnPart();
}
consumedTime=(System.nanoTime() - startTime);
System.out.println("Max is "+max+" Time consumed method: " + (double) (consumedTime)/1000000/COUNT + " ms");
}

private static void initData(int[] data) {
final Random random = new Random();
int max = 0;
for (int i = 0; i < data.length; i++) {
data[i] = random.nextInt(1000000);
if (max < data[i]) {
max = data[i];
}
}
System.out.println(" Max generated: " + max);
}

private static int getMaxOnPart() {
int max = data[0];
for (int i = 0; i < data.length; i++) {
if (data[i] > max) {
max = data[i];
}
}
return max;
}
}

最佳答案

您的测量不正确/不一致。在第一个循环中

long startTime = System.nanoTime();

在 10 次重复循环之外,因此

consumedTime+=(System.nanoTime() - startTime);

测量 1x + 2x + 3x + ... 会将结果夸大 55 倍(如果我的数学是正确的)。

而第二个调用的函数测量重置了 repeat x 10 循环内的 startTime:

 startTime = System.nanoTime();
max = getMaxOnPart();
consumedTime+=(System.nanoTime() - startTime);

这将仅对方法中花费的时间求和。

关于java - 为什么单独的方法比内联相同的代码工作得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509458/

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