Usando o Gerenciador de Perfis HPROF

O HPROF é um gerenciador de perfis de demonstração enviado com o IBM® SDK que usa a JVMTI para coletar e registrar informações sobre a execução Java™ É possível usar HPROF para saber quais partes de um programa estão usando a maior tempo de memória ou do processador.

Para melhorar a eficiência de seus aplicativos, você deve saber quais partes do código estão usando grandes quantidades de memória e recursos do processador. HPROF é um exemplo de agente JVMTI e é iniciado usando a seguinte sintaxe:
java -Xrunhprof[:<option>=<value>,...] <classname>

Quando você executa Java com HPROF, um arquivo é criado quando o programa termina. Esse arquivo é colocado no diretório ativo atual e é denominado java.hprof.txt (java.hprof, se o formato binário for usado), a menos que um nome de arquivo diferente tenha sido fornecido. Esse arquivo contém diversas seções diferentes, mas o formato exato e o conteúdo dependem das opções selecionadas.

Se precisar de mais informações sobre HPROF do que está contido nesta seção, consulte https://docs.oracle.com/javase/8/docs/technotes/samples/hprof.html.

O comando java -Xrunhprof:help mostra as opções disponíveis:

heap=dump|sites|all
Essa opção ajuda na análise de uso da memória. Informa o HPROF para gerar rastreios de pilha a partir dos quais é possível ver onde a memória foi alocada. Se você usar a opção heap=dump, obtém-se um dump de todos os objetos ativos no heap. Com heap=sites, você obtém uma lista classificada de sites com os objetos alocados mais intensamente no início. O valor padrão all fornece ambos os tipos de saída.
cpu=samples|times|old
A opção cpu fornece informações que são úteis para determinar onde o processador gasta a maior parte de seu tempo. Se cpu for configurado para samples, a JVM pausa a execução e identifica qual chamada de método está ativa. Se a taxa de amostragem for alta o suficiente, obtém-se uma boa imagem de onde seu programa gasta a maior parte de seu tempo. Se cpu for configurado como times, você receberá medidas precisas de quantas vezes cada método foi chamado e qual foi a duração de cada execução. Embora essa opção sejam mais precisa, ela causa lentidão no programa. Se cpu for configurada como old, os dados de criação de perfil serão produzidos no formato HPROF antigo.
interval=y|n
A opção interval aplica-se somente a cpu=samples e controla o tempo que o encadeamento de amostragem fica suspenso entre amostras das pilhas de encadeamentos.
monitor=y|n
A opção monitor pode ajudar a entender como a sincronização afeta o desempenho de seu aplicativo. Os monitores implementam a sincronização de encadeamento. Obter informações sobre monitores pode ajudá-lo a saber quanto tempo diferentes encadeamentos estão gastando ao tentar acessar recursos que já estão bloqueados. HPROF também fornece uma captura instantânea dos monitores em uso. Estas informações são úteis para detectar conflitos.
format=a|b
O padrão para o arquivo de saída é o formato ASCII. Configure format como 'b' se quiser especificar um formato binário, que é necessário para alguns utilitários como o Heap Analysis Tool.
file= < filename>
Use a opção file para alterar o nome do arquivo de saída. O nome padrão para o arquivo ASCII é java.hprof.txt. O nome padrão para um arquivo binário é java.hprof.
force=y|n
Geralmente, o padrão (force=y) sobrescreve quaisquer informações existentes no arquivo de saída. Portanto, se você tiver diversas JVMs em execução com HPROF ativado, use force=n, que anexará caracteres adicionais ao nome do arquivo de saída, conforme necessário.
net= < host>: < port>
Para enviar a saída por meio da rede, em vez de para um arquivo local, use a opção net.
depth= < size>
A opção depth indica o número de quadros do método a exibir em um rastreio de pilha. O padrão é 4.
thread=y|n
Se você configurar a opção thread como y, o ID do encadeamento será impresso ao lado de cada rastreio. Essa opção será útil se você não puder ver qual encadeamento está associado a qual rastreio. Esse tipo de problema poderá ocorrer em um aplicativo multiencadeado.
doe=y|n
O comportamento padrão é coletar informações de perfil quando existe um aplicativo. Para coletar os dados de criação de perfil durante a execução, configure doe (dump on exit) para n.
msa=y|n
Esse recurso não é suportado em plataformas SDK da IBM
cutoff= < valor>
Muitas entradas de amostra são produzidas para uma pequena porcentagem de tempo total de execução. Por padrão, HPROF inclui todos os caminhos de execução que representam pelo menos 0,0001 por cento do tempo gasto pelo processador. Você pode aumentar ou diminuir esse ponto de corte usando essa opção. Por exemplo, para eliminar todas as entradas que representam menos de um quarto de um por cento do tempo total de execução, especifica-se cutoff=0.0025.
verbose=y|n
Essa opção gera uma mensagem quando dumps são obtidos. O padrão é y
lineno=y|n
Cada quadro normalmente inclui o número de linhas que foram processadas, mas é possível usar essa opção para suprimir os números de linhas da lista de saída. Se ativado, cada quadro conterá o texto Unknown line em vez do número da linha
TRACE 1056:
java/util/Locale.toUpperCase(Locale.java:Unknown line)
java/util/Locale.<init>(Locale.java:Unknown line)
java/util/Locale.<clinit>(Locale.java:Unknown line)
sun/io/CharacterEncoding.aliasName(CharacterEncoding.java:Unknown line)