2009-12-01 11 views
6

Supongamos que tengo una clase Java que tiene 100K valor de código de método que contiene NO variables, pero solo 20 bytes de atributos.¿Cuál es la huella de memoria de un método objeto Java intensivo?

I instancia 1000 objetos de esta clase.

¿He consumido 100,000K de memoria? ¿O solo 100K + (20bytes * 1000)? O algo completamente diferente?

+1

puede ejecutarlo y comprobar el administrador de tareas/o arriba si está en linux .... – Dani

Respuesta

10

La huella de memoria para cargar la clase corresponderá aproximadamente al tamaño del código, pero el código no se duplicará para cada instancia de la clase. Una instancia solo requerirá tanta memoria como los atributos de la instancia + cierta sobrecarga para administrar la instancia del objeto en sí.

0

Habrá instanciado solo la parte 'variable' de los objetos, por lo que solo los atributos (y supongo que algunos bytes sobrecargen aquí y allá). Tu última suposición es la correcta.

2

He aquí una guía general para determinar el uso de la memoria de los objetos en Java: http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

Sospecho que el uso de la memoria incurrido de definiciones de métodos será una cantidad fija, (posiblemente poner en el espacio PermGen cuando la clase es cargado) en lugar de proporcional al número de instancias.

0

Intenta conectar con jvisualvm (en el JDK) y cuéntanos lo que ves.

Cuestiones relacionadas