Here you can find the source of nanoTime()
public static long nanoTime()
//package com.java2s; /*// ww w . j a v a2 s . co m * Written by Dawid Kurzyniec, based on code written by Doug Lea with assistance * from members of JCP JSR-166 Expert Group. Released to the public domain, * as explained at http://creativecommons.org/licenses/publicdomain. * * Thanks to Craig Mattocks for suggesting to use <code>sun.misc.Perf</code>. */ public class Main { /** * Returns the current value of the most precise available system timer, * in nanoseconds. This method can only be used to measure elapsed time and * is not related to any other notion of system or wall-clock time. The * value returned represents nanoseconds since some fixed but arbitrary * time (perhaps in the future, so values may be negative). This method * provides nanosecond precision, but not necessarily nanosecond accuracy. * No guarantees are made about how frequently values change. Differences * in successive calls that span greater than approximately 292 years * (2^63 nanoseconds) will not accurately compute elapsed time due to * numerical overflow. * <p> * <em>Implementation note:</em>By default, this method uses * <code>sun.misc.Perf</code> on Java 1.4.2, and falls back to * System.currentTimeMillis() emulation on earlier JDKs. Custom * timer can be provided via the system property * <code>edu.emory.mathcs.backport.java.util.concurrent.NanoTimerProvider</code>. * The value of the property should name a class implementing * {@link NanoTimer} interface. * <p> * Note: on JDK 1.4.2, <code>sun.misc.Perf</code> timer seems to have * resolution of the order of 1 microsecond, measured on Linux. * * @return The current value of the system timer, in nanoseconds. */ public static long nanoTime() { return System.nanoTime(); } }