Me gustaría saber exactamente el espacio real asignado en memoria para un objeto.Java y tamaño de referencia exacto para objetos, matriz y tipos primitivos
trato de explicar con cierta ejemplo: el uso de un 64 bits JVM, tamaño del puntero debe ser de 8 bytes, por lo que:
Object singletest = new Object();
tomarán 8 bytes para hacer referencia al objeto más el tamaño del objetoObject arraytest = new Object[10];
tomarán 8 byte para hacer referencia a la posición en la que se almacena la matriz más 8 * 10 bytes para almacenar la matriz más el tamaño de cada objetoint singleint = new int;
se llevará a sólo 2 bytes, porque int es un tipo primitivoint[] arrayint = new int[10];
se llevará a 8 bytes para hacer referencia a la posición y 10 * 2 bytes para los elementos
Por otra parte, esta es la razón por la cual Java permite escribir código como este:
int[][] doublearray = new int[2][];
int[0][] = new int[5];
int[1][] = new int[10];
Lo que realmente sucede es que una matriz producirá una referencia (alias puntero) como un objeto, por lo que realmente no importa el tamaño de la segunda dimensión en el momento de la declaración (y las dimensiones pueden ser diferentes, no hay un vínculo entre ellas) . Entonces el espacio tomado será: una referencia a doublearray (8 bytes), la primera dimensión es simplemente una referencia a la segunda, por lo que otros 8 bytes * 2 (primer tamaño de dimensión) y finalmente 2 bytes * 5 más 2 bytes * 10.
Así, por último, si tienen una clase real de la siguiente manera:
class Test {
int a, b;
int getA() {return A};
void setA(int a) {this.a = a;}
int getB() {return B};
void setB(int b) {this.b = b;}
}
cuando llame a una nueva para crear una instancia, un puntero (o el nombre que referencia, porque es Java) de 8 bytes se se puede usar más 2 + 2bytes para almacenar los enteros en la clase.
Las preguntas son: ¿estoy en lo cierto o escribí tonterías? Además, cuando no instalo un objeto pero lo declaro, ¿se asignarán 8 bytes para un uso posterior o no? ¿Y qué pasa si le asigno un valor nulo?
Mientras tanto para el tipo primitivo estoy bastante seguro de que al declarar asignará el espacio solicitado (si declaro un "int i" entonces puedo llamar inmediatamente a i ++ porque no se usa referencia, solo una parte de la memoria está configurada en "0").
He buscado en Internet sin respuesta inteligente ... Sé que escribí muchas preguntas, pero cualquier ayuda será apreciada! (Y tal vez no soy el único interesado)
posible duplicado de [¿Hay una manera simple de obtener el tamaño de un objeto java?] (Http://stackoverflow.com/questions/8775865/is-there-a-simple-way-to-get -the-size-of-a-java-object) –