long timeMillis = System.currentTimeMillis(); //do something to be timed timeMillis = System.currentTimeMillis() - timeMillis; System.out.println("millis: " + timeMillis);Sometimes it's in a loop to trap averages, standard deviation, has pre-runs to try to eliminate timing JIT steps, and so on. However, the API choice means this is not going to work terribly well. The issue is that currentTimeMillis() "Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond, the granularity of the value depends on the underlying operating system and may be larger. For example, many operating systems measure time in units of tens of milliseconds." (see docs). This issue is theoretically common knowledge, yet it keeps on coming up, particularly from coders who did most of their learning on Java 1.4.2.
In Java 1.5 an API allowing access to the high resolution timer was finally added, System.nanoTime() (see docs).
Knowing that times around tens of milliseconds are the probably a good point to see problems we can whip up a quick and dirty little program to demonstrate the problem with using System.currentTimeMillis():
public class TimeTest { public static void main(String...argv) throws Exception { int spins = 99; int sleepMillis = 12; for (int i=0; i<spins; i++) { long timeMillis = System.currentTimeMillis(); Thread.sleep(sleepMillis); timeMillis = System.currentTimeMillis() - timeMillis; System.out.println("millis: " + timeMillis); } for (int i=0; i<spins; i++) { long timeNanos = System.nanoTime(); Thread.sleep(sleepMillis); timeNanos = System.nanoTime() - timeNanos; long timeMillis = timeNanos / (1000 * 1000); System.out.println("millis from nanos: " + timeMillis + ", nanos: " + timeNanos); } } }
The results on a Windows 2k3 Java 1.6.0_21-b07 system tend to 15 or 16 with fairly regular 0's; nanoTime is bang on:
millis: 16
millis: 0
millis: 15
millis: 16
millis from nanos: 12, nanos: 12557445
millis from nanos: 12, nanos: 12593718
millis from nanos: 12, nanos: 12423730
millis from nanos: 12, nanos: 12576676
On a Solaris 5.10 VM the results are somewhat better:
millis: 12
millis: 12
millis: 12
millis: 12
millis from nanos: 12, nanos: 12051729
millis from nanos: 12, nanos: 12113813
millis from nanos: 12, nanos: 12089188
millis from nanos: 12, nanos: 12013906
Mac OS X also appears to have a more accurate currentTimeMillis(), with Java 1.6.0_22:
millis: 12
millis: 12
millis: 12
millis: 12
millis from nanos: 12, nanos: 12111000
millis from nanos: 12, nanos: 12087000
millis from nanos: 12, nanos: 12096000
millis from nanos: 12, nanos: 12083000
Moral of story: if you read no other manual, at least read the one for your timing API! Consider reading Robust Java Benchmarking parts 1 and 2 as well.
11 comments:
Good one!
Business intelligence analytics
Sqiar (http://www.sqiar.com/services/bi-strategy/) is Leading Business intelligence company.Sqiar Provide Business Intelligence Services.
This is quite educational arrange. It has famous breeding about what I rarity to vouch. Colossal proverb. This trumpet is a famous tone to nab to troths. Congratulations on a career well achieved. This arrange is synchronous s informative impolite festivity to pity. I appreciated what you ok extremely here.
Data Science training in rajaji nagar
Data Science with Python training in chennai
Data Science training in electronic city
Data Science training in USA
Data science training in pune
Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials…
Best Devops Training in pune
Devops Training in Bangalore
Microsoft azure training in Bangalore
Power bi training in Chennai
INDOBOLA303 | SITUS JUDI BOLA SBOBET | MAXBET TERPERCAYA
Permainan Taruhan Bola Uang Asli Di Situs Judi Online Terpercaya
Pengalaman Menang Bermain Judi Online Bola Sbobet Terpercaya
Strategi Pemula Dalam Melakukan Permaian Poker Online
Tips dan Saran Panduan Bermain Ceme Online Untuk Pemula
it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.
sap training in chennai
sap training in tambaram
azure training in chennai
azure training in tambaram
cyber security course in chennai
cyber security course in tambaram
ethical hacking course in chennai
ethical hacking course in tambaram
After seeing your article I want to say that the presentation is very good and also a well-written article with some very good information..
oracle training in chennai
oracle training in omr
oracle dba training in chennai
oracle dba training in omr
ccna training in chennai
ccna training in omr
seo training in chennai
seo training in omr
Trade FX At Home On Your PC: tradeatf Is A Forex Trading Company. The Company States That You Can Make On Average 80 – 300 Pips Per Trade. tradeatf States That It Is Simple And Easy To Get Started.
Login Your tradeatf Account To Read The Latest News About The Platform.s
What is Seo Service Provider For Forex ? In short, it is the art of optimizing your online business through a careful balance of content, social media, and external search criteria such as links and citations. This can have a significant impact on traffic volume coming to your site.
Get the latest Fxit Stock price with our real-time quote and chart. Check the performance of Fxit Stock with historical data and read summary analysis on this stock in Our Servlogin Webpage.
Post a Comment