Java - maneira fácil de inspecionar a estrutura do objeto serializado?

Eu tenho uma classe e gostaria de ver quais sub-objetos ocupam mais espaço quando o objeto desta classe é serializado. Existe alguma boa ferramenta/maneira de fazer isso, exceto olhando o código e analisando-o manualmente?

Por exemplo, eu gostaria que a ferramenta dissesse "membro a ocupa 20%, b 30% e membro c ocupa 50%".

obrigado

P.S. Eu encontrei algumas questões relacionadas, mas não encontrei resposta para minha pergunta específica.

5
adicionado editado
Visualizações: 1
Ver meu comentário para # alexey28 - Estou interessado na estrutura do objeto serializado, não na estrutura do objeto na memória
adicionado o autor duduamar, fonte
Não há "sub-objetos" em java. E não é um problema semântico. Como você conta o compartilhamento se dois membros de um objeto possuem membros comuns?
adicionado o autor aalku, fonte
adicionado o autor npe, fonte

3 Respostas

A única maneira relativamente rápida de contar o tamanho do objeto é primeiro escrever todo o objeto, contar o uso (por exemplo, gravar em um ByteArrayOutputStream) e, em seguida, gravar cada objeto referido.

Há um par disso para levar em conta:

  • O ObjectOutputStream faz algum cache para poder se referir a um objeto previamente escrito com um simples ponteiro. Use o método reset() para limpar esse cache.
  • Cada novo tipo de objeto que está escrito, primeiro tem a descrição da classe. A sobrecarga disso depende do número de objetos do mesmo tipo aos quais você está se referindo.
  • Há uma sobrecarga (pequena, de 4 bytes) para inicializar o ObjectOutputStream.

Para a descrição do protocolo, leia esta descrição .

1
adicionado
Foi assim que pensei em fazer, a menos que eu tenha uma resposta melhor, esse será o caminho. Obrigado.
adicionado o autor duduamar, fonte
1
adicionado

Bem, eu nunca ouvi sobre essa ferramenta. Mas acho que há alguma relação entre o tamanho do objeto na memória e o tamanho do objeto serializado. Então você pode tentar usar um profiler: VisualVM , que está incluído no JDK ou no meu favorito YourKit Profiler .

1
adicionado
Existe alguma relação, mas não essa relação forte - a classe pode optar por serializar alguns membros e descartar outros. Isso pode mudar totalmente a imagem ...
adicionado o autor duduamar, fonte
Deixa o caminho para algumas outras respostas. Se ninguém conhece tal ferramenta e você precisa de medição de precissionamento - você tem que escrever a sua própria para fazê-lo.
adicionado o autor alexey28, fonte