I need to measure the time it takes for a function to complete in Java. How can I do that?
Note:
I want to measure the function's time consumption, not that of the full program.
I need to measure the time it takes for a function to complete in Java. How can I do that?
I want to measure the function's time consumption, not that of the full program.
If you are using Guava, consider using the
Stopwatch
, e.g.:The profiler is the right answer if you have more than one function.
Another problem that I see with all the suggestions given so far is that they work fine for a single function, but your code will be littered with timing stuff that you can't turn off.
If you know how to do aspect oriented programming, it's a good way to keep the timing code in one place and apply it declaratively. If you use something like Log4J to output the values, you'll have the option of turning it off or on. It's a poor man's profiler.
Have a look at AspectJ or Spring's AOP.
All of the code snippets above measure the approximate time elapsed from the time the method was invoked to the time the method returns/throws an exception. Such techniques do not address thread scheduling, pauses due the GC, etc.
Yes, some profilers will do a reasonable job.
If you are using Java 1.6 onwards, you can use the JMX based VM management and monitoring support. For example, you may find ThreadMXBean.getCurrentThreadCpuTime() of value. Calculating the difference of this value before and after the method invoke will give you:
If your method spawns off worker threads, then your computation will need to get far more elaborate ;-)
In general, I recommend nosing around the java.lang.mangement package.
If you want to get current time, use
java.util.Date
.Use either System.currentTimeMillis() or System.nanoTime():