执行循环需要多长时间?

有没有办法知道在java中执行循环需要多少秒?

例如:

for(int i=0; i < 1000000; i++) { //Do some difficult task goes in here } 

它不必是100%准确,但它只是想知道它可能需要多长时间。 里面的算法是某种写入.txt文件的密钥生成器。 我希望它甚至需要几分钟,所以对于我的第一次测试,我想计算秒数。

在Java中编写微基准时,您需要非常小心。 例如:

  • 如果JIT编译器可以确定循环体不会影响代码的结果,那么它可以优化它。 例如:

     for (int i = 0; i < 1000000; i++) { int j = i + 1; } 

    很可能“跑”得很快。

  • 在JIT编译之后,代码运行得更快。

  • 在进行JIT编译 ,代码似乎运行得慢得多。

  • 如果代码分配对象,那么您需要考虑由于GC运行导致的测量性能的潜在可变性,初始或最大堆大小太小等等。

当然,性能取决于您的硬件,操作系统,JVM的版本和补丁级别以及JVM启动选项。

在这里你可以试试这个:

 long startTime = System.currentTimeMillis(); long endTime = 0; for(int i=0; i < 1000000; i++) { //Something } endTime = System.currentTimeMillis(); long timeneeded = ((startTime - endTime) /1000); 

对一个操作进行计时的一种方法是使用nanoTime()获取平均值。您可能希望调整迭代次数,并且您将获得较少的平均值变化。 nanoTime比currentTimeMillis更好,因为它更准确,单调递增(在应用程序运行时不会倒退)

 long start = System.nanoTime(); int runs = 1000*1000; for(int i=0;i 

使用printf可以格式化结果。 您可以除以1000以获得微秒或1000000微秒。

这取决于循环内的操作,所以你应该做的是记录循环的开始时间和循环的结束时间,然后计算差异。 您将获得完成循环所需的时间。 例:-

 long st = System.currentTimeMillis(); for(int i=0; i < 1000000; i++) { // --- loop operation } System.out.print("time to execute loop"+ ((st - System.currentTimeMillis()) /1000));