Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示错误时间的Java计时器_Java_Performance_Time_Merge - Fatal编程技术网

显示错误时间的Java计时器

显示错误时间的Java计时器,java,performance,time,merge,Java,Performance,Time,Merge,我一直在研究一种3路合并排序算法,教授希望我在10次试验中平均对1000、10000、100000、1000000和10000000个随机整数的数组进行合并排序所需的时间。但是,我在计算运行时间时遇到了一个问题;例如,当我计算100万个元素的运行时间时,它显示大约需要300毫秒,而实际上大约需要40秒。我将保留主函数的代码,我还尝试将startTime放在开始处,它将显示相同的运行时间 public static void main(String args[]) { Random r =

我一直在研究一种3路合并排序算法,教授希望我在10次试验中平均对1000、10000、100000、1000000和10000000个随机整数的数组进行合并排序所需的时间。但是,我在计算运行时间时遇到了一个问题;例如,当我计算100万个元素的运行时间时,它显示大约需要300毫秒,而实际上大约需要40秒。我将保留主函数的代码,我还尝试将
startTime
放在开始处,它将显示相同的运行时间

public static void main(String args[]) {
    Random r = new Random();

    int[] arr = new int[1000000];
    for (int i = 0; i < arr.length; i++)
        arr[i] = r.nextInt();

    long startTime = System.currentTimeMillis();
    MergeSort test = new MergeSort(); 
    test.sort(arr, 0, arr.length); 
    
    long endTime = System.currentTimeMillis();
    long timeElapsed = endTime - startTime;
    print(arr);
    System.out.println("Execution time in milliseconds: " + timeElapsed);
}
publicstaticvoidmain(字符串参数[]){
随机r=新随机();
int[]arr=新int[1000000];
对于(int i=0;i
我想我在某个地方读到过,java应用程序的基准测试并不那么容易和可靠。也许你会看到。您可以尝试使用
System.nanoTime()
而不是
System.currentTimeMillis()
。也许这会给你更准确的结果。另外,也许看看随机数数组的填充需要多长时间也很有趣。您可以在那里添加另一个度量来查看时间花在哪里。使用Java8流API也可以更快地填充阵列。例如,类似于
int[]array=new Random().ints(大小、下限、上限).toArray()
此外,打印1000000数组也可能需要一些时间(但不是40秒)提示:要么您的
MergeSort测试
变量应该是单例变量,要么您应该使
MergeSort.sort
为静态变量。如果
分拣
分拣机
界面上的一种接口方法,则将
测试
设为单件。我认为没有必要多次实例化它。如果您需要在一个循环中对多个阵列进行性能测试,请执行此操作。您如何知道“实际上大约需要40秒”?用挂钟衡量的不仅仅是排序,还有初始化+排序+打印,显然打印是最耗时的部分。尝试注释掉
print(arr)