La pregunta no es significativa, al menos no sin contexto adicional.
La noción de "tamaño" en Java sólo es razonablemente bien definido para las primitivas: Un byte es 8 bits (como era de esperar) un int
es de 32 bits, una de 64 bits long
, etc. (véase, por ejemplo http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html para una lista completa).
Para instancias de objeto, que es más complicado, porque:
- instancias de objetos pueden (y por lo general serán) contener referencias a otras instancias internamente, por lo que debe decidir si se contará estos casos dependientes, y cómo. ¿Qué sucede si varias instancias comparten una dependencia?
- A veces, las instancias de objeto pueden reutilizarse (por ejemplo, internamiento de
java.lang.String
, ver http://en.wikipedia.org/wiki/String_interning). Entonces, si usa x objetos de tamaño y, el tamaño total puede ser menor que x * y
- La JVM tiene mucha libertad de acción sobre cómo implementar objetos e instancias internamente. Puede utilizar diferentes técnicas para diferentes instancias (por ejemplo, compartir estructuras de datos internas), por lo que puede que ni siquiera haya un "tamaño" significativo para asignar a un solo objeto.
Quizás podría explicar por qué está interesado en el tamaño de los objetos.
Existen algunas reglas generales para estimar la memoria de pila utilizada por las instancias (por ejemplo, en Sun JVM, una instancia de java.lang.Object
utiliza 8 bytes), pero esto dependerá de la JVM que utilice.
Generalmente, si desea conocer el uso de su pila, utilice un generador de perfiles de memoria/montón.
Editar:
Bueno, no es (a partir de JDK 6) una forma de obtener una aproximación de la cantidad de memoria utilizada por un objeto: http://download.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize%28java.lang.Object%29
Todavía es sólo una aproximación ..
¿Por qué necesita saber el tamaño del objeto? –
Si realmente necesita saber ... http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object –
Consideremos el escenario en el que tenemos memoria limitada y la aplicación tiene varios objetos ocupando espacio, cómo identificaríamos qué objeto toma más espacio y lo manejaremos en consecuencia. – daydreamer