Eu tenho um aplicativo JBoss em execução na plataforma Linux, ele tem saída superior como abaixo (dados não precisos, na verdade):
PID USER PR NI VIRT RES SHR S %CPU %MEM CODE DATA TIME+ COMMAND
1379 root 16 0 9.7g 1.6g 1980 S 0.7 1.3 36 9.7g 0:11.03 java
possui 1,6g de memória física no total e 9,7g de parte de DADOS. na verdade, o tamanho do heap é de aproximadamente 128m conforme configurado com JVM. minha pergunta é o que a parte DATA está armazenando para aplicativos Java? qualquer pista? e como eu poderia otimizá-lo?
obrigado, Emre
Responder1
DATA
significa memória alocada pelo aplicativo usando brk(2)
- ou seja, estendendo o segmento de dados.
Java tem muitas coisas diferentes que serão colocadas no segmento de dados:
- A pilha
- Qualquer memória alocada pela camada de tempo de execução nativa (código usando a
native
palavra-chave) - Qualquer memória alocada por DLLs/bibliotecas compartilhadas que você carrega de Java usando JNI/JNA
- Memória onde o código de bytes é carregado, interpretado e compilado pelo JIT (code cache)
- Estruturas de memória usadas pelo GC e outros códigos de suporte de tempo de execução
- A pilha
Observe que fornecer um heap de 128 MB a um programa alocará mais do que isso porque Java também criará algumas estruturas para gerenciar o heap que não fazem parte dele. Portanto, 128 MB significa que você terá 128 MB nos quais poderá alocar objetos Java.
Responder2
Esta é a quantidade de memória física dedicada a código diferente do executável, também conhecido como tamanho do 'conjunto residente de dados' ou DRS. Geralmente, você pode consultar uma página de manual que descreve todas as colunas em detalhes. Para obter uma página de manual, digite man top
.