programacion - llenar arreglo string java



¿Cuál es el tamaño de la memoria de una matriz de objetos Java después de haber sido creada? (2)

Creo que esto te será útil

public static void main(String[] args) {
        Runtime r = Runtime.getRuntime();
        System.gc();
        System.out.println("Before " + r.freeMemory());
        Object[] objArr = new Object[10];
        System.out.println("After " + r.freeMemory());
        objArr[0] = new Integer(3);
        System.gc();
        System.out.println("After Integer Assigned " + r.freeMemory());
    }

Salida

Before 15996360
After 15996360
After Integer Assigned 16087144

https://src-bin.com

Probablemente, esto ni siquiera necesite preguntar, pero quiero asegurarme de estar en lo cierto. Cuando creas una matriz de cualquier objeto en Java, así:

Object[] objArr = new Object[10];

La variable objArr se encuentra en la memoria de la pila, y apunta a una ubicación en el montón donde se encuentra el objeto de la matriz. El tamaño de esa matriz en el montón es igual a un encabezado de objeto de 12 bytes + 4 (u 8, según el tamaño de referencia) bytes * el número de entradas en la matriz. Es esto exacto?

Mi pregunta, entonces, es la siguiente. Dado que el conjunto de arriba está vacío, ¿ocupa 12 + 4 * 10 = 52 bytes de memoria en el montón inmediatamente después de la ejecución de esa línea de código? ¿O la JVM espera hasta que comiences a poner cosas en la matriz antes de que la ejemplifique? ¿Las referencias nulas en la matriz ocupan espacio?


Answer #1

Las referencias nulas ocupan "espacio": la memoria de la matriz se asigna por adelantado en un fragmento, y se pone a cero (para hacer que todos los contenidos sean referencias nulas). Como ejercicio, intente asignar una matriz enorme, que ocupe más espacio que el límite de memoria de su JVM. El programa debe terminar inmediatamente con un error de falta de memoria.





memory