O que você está procurando é profiling :
Na engenharia de software, a criação de perfil ("criação de perfil de programa", "criação de perfil de software") é uma forma de análise dinâmica de programa que mede, por exemplo, a complexidade do espaço (memória) ou de tempo de um programa, o uso de instruções específicas ou a frequência e duração das chamadas de função. O uso mais comum das informações de criação de perfil é ajudar na otimização do programa.
Existem várias aplicações desse tipo. Às vezes, eles são criados no próprio IDE. O ide netbeans é uma dessas ferramentas que possui um criador de perfil .
Outra ferramenta é o visual vm .
Os criadores de perfil podem trabalhar de maneiras diferentes - e é preciso estar ciente das diferenças. Uma abordagem é a cada segundo para obter uma captura instantânea dos threads em execução e ver quais métodos estão sendo chamados atualmente para cada thread. Isso usa uma amostra do que está lá fora.
A outra abordagem é instrumentar o bytecode java para relatar o início e o tempo de parada para outro aplicativo.
Escrever um criador de perfil não é muito difícil para um java habilidoso. A IBM possui um artigo sobre como escrever seu próprio criador de perfil (com código fonte!). Este é baseado no Java Interactive Profiler .
Há uma infinidade de criadores de perfil por aí - gratuitos e comerciais (que tal um criador de perfil conectado a instâncias da JVM em execução que podem relatar para você (email ou alguma outra notificação) quando métodos específicos excederem o tempo de execução esperado? programa que relata quando as solicitações da Web demoram muito tempo - o perfil histórico dessa solicitação é salvo para inspeção posterior?). Você só precisa saber o que está procurando para começar a encontrá-los e partir daí.
Depois de obter o criador de perfil, você começa a interpretar os resultados da criação de perfil .