Ben je ne vois que le profileur dans ce cas.
Dans le principe, ce n'est pas compliqué : tu lances ton programme sous le contrôle du profileur, comme si c'était un débogueur, sauf que tu ne l'interromps jamais. Et lorsque le programme se termine, le profileur te donne le temps passé et le nombre d'exécutions de chcune des lignes de ton programme (plus des informations détaillées sur qui a appelé qui, etc).
Il y a un profileur fourni en standard avec le JDK, mais ses résultats sont assez mal aisés à lire, car ils sont présentés sous la forme d'un banal fichier texte. Il y a aussi des logiciels beaucoup plus intuitifs, mais qui sont évidemment des logiciels commerciaux, donc payants (exemple : j'aime bien OptimizeIt, aujourd'hui distribué par Borland).