Java: ¿una forma fácil de inspeccionar la estructura del objeto serializado?

Tengo una clase y me gustaría ver qué subobjetos ocupan más espacio cuando el objeto de esta clase se serializa. ¿Hay alguna buena herramienta/forma de hacerlo, excepto mirar el código y analizarlo manualmente?

Por ejemplo, me gustaría que la herramienta diga "miembro a ocupa el 20%, b el 30% y el miembro c ocupa el 50%".

Gracias

PD Encontré algunas preguntas relacionadas, pero no encontré respuesta a mi pregunta específica allí.

5
Ver mi comentario a # alexey28 - Estoy interesado en la estructura del objeto serializado, no en la estructura del objeto en la memoria
agregado el autor duduamar, fuente
No hay 'sub-objetos' en java. Y no es un problema semántico. ¿Cómo se cuenta el porcentaje si dos miembros de un objeto tienen miembros comunes?
agregado el autor aalku, fuente
agregado el autor npe, fuente

3 Respuestas

La única forma relativamente rápida de contar el tamaño del objeto es escribir primero el objeto completo, contar el uso (por ejemplo, escribir en ByteArrayOutputStream) y luego escribir cada objeto al que se hace referencia.

Hay un par de esto para tener en cuenta:

  • ObjectOutputStream hace algo de caché para poder referirse a un objeto previamente escrito con un simple puntero. Use el método de reinicio() para borrar este caché.
  • Cada nuevo tipo de objeto que se escribe, primero tiene la descripción de la clase. La sobrecarga de esto depende de la cantidad de objetos del mismo tipo a los que te refieres.
  • Hay una sobrecarga (pequeña de 4 bytes) para inicializar ObjectOutputStream.

Para la descripción del protocolo, lea esta descripción .

1
agregado
Esa es la forma en que pensé hacerlo, a menos que obtenga una mejor respuesta, este será el camino. Gracias.
agregado el autor duduamar, fuente
1
agregado

Bueno, nunca escuché sobre tal herramienta. Pero creo que hay alguna relación entre el tamaño del objeto en la memoria y el tamaño del objeto serializado. Así que puedes intentar usar un generador de perfiles: VisualVM , que está incluido en JDK o mi YourKit Profiler .

1
agregado
Existe cierta relación pero no esa relación fuerte: la clase puede elegir serializar algunos miembros y descartar otros. Esto puede cambiar totalmente la imagen ...
agregado el autor duduamar, fuente
Deja el camino para algunas otras respuestas. Si nadie conoce esta herramienta y necesita una medición de precisión, debe escribir la suya para hacerlo.
agregado el autor alexey28, fuente