Olá pessoal,
Estou fazendo um estudo de complexidade de algoritimos.
Estou querendo saber como faço para ligar um relógio e desligá-lo assim que a função acabar seu trabalho.
Em C, faço assim, eu já testei e está funcionando, agora em Java estou me enrolando um pouco:
clock_tstart,end;doublecpu_time_used;start=clock();.../* A função */end=clock();cpu_time_used=((double)(end-start))/CLOCKS_PER_SEC;
Se vc soh quiser saber qnto tempo demora, o que vc pode fazer, acho que é mais simples, é no inicio da função colocar:
longinicio=System.currentTimeMillis();
e qndo acabar vc pode fazer:
longfim=System.currentTimeMillis()-inicio;
Aí vc tem no fim o tempo em ms.
pcalcado
Você pdoe utilizar System e pegar os milissegundos quando o método inicia e quando ele termina, subtraindo e tal.
Se for mais de um método ou quiser medir um sistema grande, considere AOP.
[]s
rodrigo.achilles
Valeu galera, funcionou.
Eu estava fazendo com o método getTime().
Mais me retornava o mesmo tempo no final.
Obrigadão.
Abraços :lol:
T
thingol
Se milissegundos não são suficientes para você, e se você está usando o Java 5.0, você pode usar System.nanoTime().
Desvantagens -
a) Embora System.nanoTime lhe retorne um valor em nanossegundos (bilionésimos de segundos!), na prática o valor cronometrado depende do hardware e do sistema operacional (que normalmente não consegue medir um tempo inferior a 1 ms). OK, ok, eu sei que o Pentium III e IV conseguem medir um tempo que é 1 clock (ou seja, para um Pentium IV 3.8 GHz isso seria 0,2632 ns) mas não sei se o sistema operacional acessa esse contador do Pentium III e IV.
b) Se com System.currentTimeMillis você tem de repetir o seu teste várias vezes e tirar uma média, porque por vários motivos (JIT compilation, garbage collection, memory swapping, disk caching, deoptimization etc) o tempo nunca se repete, imagine com System.nanoTime.
danieldestro
thingol, to cada vez mais impressionado com você, cara. O que você não sabe? Nas 24 horas do dia, você faz algo fora estudar?
rodrigo.achilles
Entendi thingol,
Boa explicação, valeu, mesmo dependendo dessas coisas todas, eu consegui com o Milisegundos, vou usar o nanosegundos e ver o que vai dar.
Abraços
louds
Se for mais de uma função, use um profiler que os resultados vão ser bem mais precisos. java -Xprof ou java -Xrunhprof já quebram um galho legal.
Lipe, olhei essa classe e me veio uma dúvida enorme.
Lá fala que o método não é thread-safe, ate ai tudo bem. Mas o método não ser reentrante, ai fiquei bolado.
Desde quando java tem problemas de reentrancia para métodos que não chamam outros diretamente? Ou alguem seria estúpido o suficiente para usar JNI em um signal handler?
rodrigo.achilles
Valeu galera por tudo.
Eu estou usando o Java 1.5
Mas com o System.nanoTime() eu consigo numa boa e consigo ter essa precisão, embora, dependa do hardware, entre outros. Pois maior precisão seria se eu só tivesse rodando apenas esse processo.
Mas só pra comparar duas funções está ótimo.
Valeu mesmo!
louds
Para aumentar a precisão não esqueça de usar -Xcomp e -Xbatch