Monitorar memória e objetos

4 respostas
prchakal

como q eu faço no java para apontar para o endereço de um objeto qualquer do java q eu tnha criado e destrua esse objeto?

exemplo: eu tenho a referencia do objeto na memória (x12FFAB) , eu quero destruir o objeto q está nessa referencia ai.

eu sei que o GC faz automaticamente isso, mas quero monitorar os objetos na mão, pois to fazendo um monitor de objetos/memória no sistema.

4 Respostas

T

prchakal:
como q eu faço no java para apontar para o endereço de um objeto qualquer do java q eu tnha criado e destrua esse objeto?

A rigor não dá para fazer isso.
O que você pode fazer é chamar eventuais métodos desse objeto que limpam outros objetos para os quais ele aponte, e então remover todas as instâncias desse objeto. Por exemplo, uma conexão a banco de dados, ou um resultset, devem ser sempre fechados, para que os recursos alocados possam ficar disponíveis para serem limpos.

prchakal

Vou tentar explicar melhor a idéia:

Seguinte, eu tava querendo implementar um gerenciador de memória no java, é claro que ele já tem o GC, mas o que quero fazer é o monitoramento dos objetos criados, então eu criaria o objeto e através de um objeto meu especifico que vai ser o que guardará as informações deste objeto criado eu enviaria as informações para o monitorador, e esse monitor de objetos exibiria a referência dele na memoria numa lista e eu poderia saber quanto tempo ele esta ficando ativo na memoria, quanto esta consumindo, e de onde ele é(de que form por exemplo ou de que classe melhor dizendo).

Exemplo:

++NO CÓDIGO JAVA++

String teste = new String(“paulo”);

Monitor.adicionarObjeto( String ); <- a classe Monitor contem esse metodo estático que envia as informações dele para o monitor de objetos

++NO MONITOR - VISUALIZAÇÃO++

OBJETO CRIADO EM MEMORIA USADA CLASSE
0x123456 01/01/01 12:00 1MB String [BOTÃO DESTRUIR] [BOTÃO ATUALIZAR]

O botão destruir iria obviamente destruir esse objeto apartir da referencia na memoria (0x123456) <- como fazer para destruir?

O botão atualizar iria verificar através da referência do objeto, se ele ainda está instanciado lá <- como fazer essa verificação?

T

Se houver uma referência “forte” a um objeto, ele não poderá ser recolhido pelo GC. Obviamente acrescentar um objeto ao seu monitor irá adicionar uma referência “forte” e ele não poderá ser recolhido. Talvez você possa usar “weak references”.

http://java.sun.com/javase/6/docs/api/java/lang/ref/package-summary.html

Você não pode destruir explicitamente um objeto; o que você pode fazer é rodar explicitamente o GC e, através de uma “weak reference”, ver se ele ainda está vivo.

Tchello

Desculpe pelo ress do tópico mas me pairou uma dúvida:
Como você estima o consumo de memória de um objeto, como o exemplo dado por você de uma string, comom sabe que esse objeto String consome 1mb de memória?

Abraços.

Criado 18 de março de 2009
Ultima resposta 28 de jan. de 2010
Respostas 4
Participantes 3