nanoTime() instead of currentTimeMillis()

System.nanoTime() is intended for calculating elapsed time, whereas System.currentTimeMillis() is intended for determining the actual calendar time.

This will also prevent elapsed time from being altered by the user changing the system clock (therefore preventing "faked" runtimes achieved by setting the clock back).