getCurrentMillis uses getticks, which has an OS dependant resolution.
-win9x 50-55msec
-win2k/xp/etc 10msec
-linux 1msec
-mac 1msec
nanoTime uses queryperformancecounter, which is somewhat flaky on some systems. Mine for example shows the so called “qpc leaping” behaviour, which basically means that it jumps a few seconds into the future whenever it feels like doing so (under heavy busload… eg games).
LWJGL’s timer uses timegettime with 1msec resolution (there is some extra call required for changing the resolution to that) on windows and just getCurrentMillis under linux/mac, because thats already with 1msec resolution.
LWJGL’s one is imo the best choice. 1msec res is accurate enough for games (see all quake engine based games for example) and its also very robust.
If System.getCurrentMillis is still at a 55 ms resolution then it is no good for 3d interpolation.
Well, you can cheat a bit, but thats very fiddly and it needs some time to adapt… and there are over/understeer effects etc. The adaptive yield loop throttle thingy (used in fuzetsu) works even fine with a resolution of 250msec… well, that is as long as the time per frame doesnt fluctuate too much.