The implementation of the class StopWatch in graphhopper/core/…/util (see StopWatch on Github) relies on System.nanoTime() returning a positive long value. However, the Java documentation explicitly states that System.nanoTime() may return a negative value:
The value returned represents nanoseconds since some fixed but arbitrary origin time (perhaps in the future, so values may be negative).
(see JavaDoc System.nanoTime)
Is there a specific reason for checking against negative values or is this a bug?
Further, I suggest implementing a method reset() that resets a StopWatch to 0, so that it can be re-used in later measurements. This would be more friendly to the GC.