如何找到运行Java程序的时间?

我有一个Java应用程序,我一直在努力,我只是意识到该程序必须在不到一分钟内返回一个值,但不知道如何查找或显示运行该程序所需的时间。 如何找到运行程序的时间?

long startTime = System.nanoTime(); //code long endTime = System.nanoTime(); System.out.println("Took "+(endTime - startTime) + " ns"); 

看到

  • System.nanoTime()

没有内置方法可以查看程序运行的时间。 但是,您可以在程序开始时只存储当前时间,以便稍后您可以看到已经过了多长时间。

 public class MyProgram { private static long startTime = System.currentTimeMillis(); public static void main(String[] args) { // Do stuff... // At the end long endTime = System.currentTimeMillis(); System.out.println("It took " + (endTime - startTime) + " milliseconds"); } } 

如果您只想知道程序运行多长时间,请在程序的开头和结尾使用System.currentTimeMillis()。

如果您将Spring作为项目的依赖项(或者不介意添加它),则可以使用StopWatch 。 顾名思义,一旦初始化它将计算时间,直到你停止它。 然后,您可以检查任务所用的时间。 多个StopWatches可以同时用于多个任务,保持代码清洁。

除了保持代码清洁外,StopWatches还有助于格式化时间和其他实用程序方法。

 public void myMethod(){ StopWatch stopWatch = new StopWatch(); stopWatch.start("Task1"); // ... // Do my thing // ... stopWatch.stop(); System.out.println("Task executed in " + StopWatch.getTotalTimeSeconds() + "s"); } 

您可以使用System类提供的2个API

  1. System.currentTimeMillis()如果代码在毫秒范围内花费时间
  2. System.nanoTime()如果代码需要纳秒范围内的时间

示例代码

 public class TestTimeTaken { public static void main(String args[]) throws InterruptedException{ long startTimeNanoSecond = System.nanoTime(); long startTimeMilliSecond = System.currentTimeMillis(); //code Thread.sleep(1000); //code long endTimeNanoSecond = System.nanoTime(); long endTimeMilliSecond = System.currentTimeMillis(); System.out.println("Time Taken in "+(endTimeNanoSecond - startTimeNanoSecond) + " ns"); System.out.println("Time Taken in "+(endTimeMilliSecond - startTimeMilliSecond) + " ms"); } } 

这是方面的典型用例,例如使用Spring AOP :

 @Aspect public class TimerAspect { private static final Logger LOG = Logger.getLogger(TimerAspect.class); @Around("com.xyz.myapp.MyClass.myMethod()") public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { long startTime = System.nanoTime(); Object retVal = pjp.proceed(); long endTime = System.nanoTime(); LOG.info(String.format("Call to %s.%s with args %s took %s ns", pjp.getTarget(), pjp.getSignature(), Arrays.toString(pjp.getArgs()), endTime - startTime)); return retVal; } } 

在您的应用程序上下文中: