Timers e Contadores em Java

estava lendo sobre um site de jogo q foi postado aqui no forum java básico com o titulo “jogo fácil”.

Nesse tutorial ele explica q não devemos usar o metodo currentTimeMillis() ( dado em milisegundos)para guardar o valor do tempo em uma variavel que será utilizada em um metodo sleep(), pq currentTimeMillis depende do SO. ele fala q devemos usar o metodo nanoTime()( dado em nanosegundos) do j2se 1.5 e também fala da classe Perf q tem o metodo highResCounter() (dado em microsegundos).

alguém poderia me dar uma esclarecida nesses métodos.

pq o SO só influencia currentTimeMillis e não os outros.

currentTimeMillis depende do SO pq usa o clock do scheduler, que tem uma resolução muito ruim.

As outra funções provavelmente usam clocks de hardware.

pelo q ando lendo currentTimeMillis() retorna tipo o tempo (hora) do computador e as outras são tratadas como se estivessem contadores internos idependentes.