Medir tempo de execução

acho que hoje estou com muitas dúvidas.

Agora é se existe algum jeito de medir o tempo de execução de uma aplicação feita em java. Tipo quanto tempo levou para um método ser executado e talz.

Será que o único jeito de fazer isso é na unha mesmo? Sei que tem umas linguagens que tem umas funções prontas.

long t = System.nanoTime();
facaAlgumaCoisa();
t = System.nanoTime() - t; 
System.out.printf ("facaAlgumaCoisa levou %d nanossegundos%n", t);