Pergunta

é System.currentTimeMillis () a melhor medida de desempenho tempo em Java? Há algum do pegadinha quando se usa este para comparar o tempo antes sejam tomadas medidas para o tempo após a ação é tomada? Existe uma alternativa melhor?

Foi útil?

Solução

Espero que não - é o que eu uso quando eu não uso nanoTime() .

Outras dicas

Além System.nanoTime(), JMX é provavelmente a melhor opção viável:

java.lang.management.ManagementFactory.getThreadMXBean()

Você pode consultar o tempo de discussão atual da CPU (medido em segundos nano, mas não com nano segundos de precisão, como por System.nanoTime ())

Você pode usar cronômetro do Google Guava que torna tempo de medição super-fácil.

Se precisar de medições de tempo monótona, System.nanoTime é uma escolha melhor. System.currentTimeMillis está sujeita a variações UTC Timing - segundo salto, atualizações NTP e jitter, bem como usuários de ajuste do relógio do sistema *. Isso pode causar alguns fracassos espetaculares em certos tipos de aplicações de tempo. System.nanoTime é suposto ser imune a tudo isso.

Os problemas com System.nanoTime incluem sobrecarga numérica periódica e imprecisão tempo longo prazo, tornando System.currentTimeMillis melhor para períodos de tempo mais longos (desde que os usuários deixam o relógio do sistema sozinho). Note-se que mudanças de fuso horário de verão e hora não deve afetar System.currentTimeMillis.

* Windows "Sync com o tempo internet" faz mudanças graduais. Isto pode ser muito perturbador, em oposição a uma implementação do cliente NTP apropriado que "perseguições" O servidor ajustando a frequência timebase cliente.

Antes de Java 1.5 havia apenas System.currentTimeMillis. No entanto, a granularidade do valor depende do sistema operacional subjacente e pode ser grande. No Windows XP, por vezes, acabei com lacunas de 20ms. Ouvi Linux é muito melhor com lacunas na gama de 1-2ms.

Com Java 1.5 você também pode usar System.nanoTime. Eu nunca tive problemas com este.

Uma pegadinha é que esta medidas em tempo real decorrido, não tempo de CPU - por isso, é muito dependente de carga do sistema. Isso é bom se o seu em uma máquina de outra forma livre, mas às vezes pode produzir resultados interessantes se outros processos estão tentando fazer o trabalho.

Este artigo tem uma solução interessante para o problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top