GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como medir o tempo de execução de um programa?


#1

Olá Amigos!

eu tenho que medir o tempo que um algoritmo demora pra realizar seus calculos, gostaria de saber se alguem sabe alguma classe java que tenha um método que possa me ajudar!

obrigado pela atenção


#2

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#currentTimeMillis()


#3

exemplo:

long tempoInicial = System.currentTimeMillis();
// método que deve ser verificado o tempo de execução
calculo();
long tempoFinal = System.currentTimeMillis();
System.out.println( tempoFinal - tempoInicial );

A saída será em milesegundos;


#4

Uma maneira mais sofisticada consiste na utilização de um profilador.
Se quer um como sugestão, experimente o do Netbeans.


#5

o que seria um profilador?


#6

Um profilador??? :shock:

Um profiler é um programa que se conecta na sua JVM e descobre várias informações úteis à análise de preformance, como por exemplo: Vazamento de memória, Utilização de CPU e memória, Tempo de execução por métodos, monitoramento de threads.

Confira mais aqui.
http://www.netbeans.org/products/profiler/index_pt_BR.html

Obs: Essa página ai já foi traduzida e revisada, mas ainda não atualizaram para versão revisada. :lol:


#7

então gente... valeu pelas dicas, mas eu queria uma coisa mais simples mesmo, nao precisa ter precisão total.

Apenas para eu ter uma ideia do tempo que demora a execução do programa... algo como uma espécie de cronometro, no meio do algoritmo

na classe System não deu certo.
o metodo currentTimeMillis(), assim como o nanoTime(), não dão um tempo contínuo.

se eu faço o exemplo do marcuscruz, a subtraçao do inicio e do fim será sempre 0


#8

Tenta algo assim, seguindo o conselho do Sombriks:

long start = System.currentTimeMillis();
/* Aqui vai o código cuja execução você que cronometrar */
long delay = System.currentTimeMillis() - start;
syso("Demorou " + delay + " milissegundos");

Divirta-se!


#9

[quote=Mantu]Tenta algo assim, seguindo o conselho do Sombriks:

long start = System.currentTimeMillis();
/* Aqui vai o código cuja execução você que cronometrar */
long delay = System.currentTimeMillis() - start;
syso("Demorou " + delay + " milissegundos");

Divirta-se![/quote]

Apenas para te deixar avisado, dessa maneira vc estará medindo o tempo total da execução do seu programa + o tempo de espera no processador + tempo de escalonamento e outras coisas que envolvem SO.

Já fiz isso quando fazia universidade e depois de muito usar cheguei a conclusão de que o profiler era a melhor opção.


#10

Eu também acho, mas como o OP pediu algo mais simples, taí... :lol:


#11