首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QuickSort的多次运行中,System.nanoTime()返回的时间是连续递减的,是如何实现的?

在QuickSort的多次运行中,System.nanoTime()返回的时间是连续递减的,是如何实现的?
EN

Stack Overflow用户
提问于 2017-09-21 20:17:46
回答 1查看 80关注 0票数 0

我实现了一个标准的快速排序算法,并在多次运行中对其进行了测试,并将运行时间存储在一个数组中。

代码语言:javascript
复制
int max = 100;
int runs = 1000;
int[] arr = new int[max];
Long[] times = new Long[runs];  

while(n < runs){
        for(int i =0 ; i<max; i++){
        arr[i]=(int)(Math.random()*99);
        //arr[i] = i;  
        }

        Long start = System.nanoTime();
        quicksortsimple(arr,0,max-1);
        Long now = System.nanoTime();

        times[n++] = now-start;
    }

现在发生的情况是,输出的"times“数组从更大的值开始,然后逐渐减小,在第100次索引(快速排序的100次)之后,它变成一个位常量,但这个值不到初始2-3值的十分之一。在程序的多个符文中,为n= 1000返回的平均值是相同的。

即使我将数组初始化为已排序(注释掉行),也会发生同样的事情,尽管需要更多的平均时间(这是应该的)。

但这不应该在相同的数组上为相同的算法返回如此不同的运行时间。如果有什么东西的话,那么递减模式表明了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-09-21 20:33:10

(下面的解释并不准确到最后的细节,但足以理解发生了什么)

开始时,JRE以解释模式(慢速)运行程序,直到其Hotspot引擎检测到排序值得加速,并创建本机编译的翻译,然后使用该翻译,并且运行速度比第一次迭代中的解释代码快得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46343740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档