2011-01-19 16 views
5

Tengo un ArrayList<Obj> y deseo saber cuánta memoria está usando.¿Cuál es el tamaño de la memoria de un ArrayList en Java

La Obj es una variante, por lo que no es tan fácil como multiplicar el número de elementos en la matriz por el tamaño de un objeto.

+3

ver http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-object –

Respuesta

3

Puede calcular la fuerza bruta si conoce la distribución de contenido de los objetos.

Sin embargo, el método más preciso que puedo pensar es mirarlo en un generador de perfiles. Hay herramientas gratuitas, algunas que vienen con el JDK. Sin embargo, la mejor herramienta que he usado es Yourkit. Eso no quiere decir que sea la única solución, solo mi favorita.

+0

jmap suficiente es bueno y gratis :) – bestsss

18

Es la capacidad de java.util.ArrayList multiplicada por el tamaño de referencia (4 bytes on 32bit, 8bytes on 64bit) + [Object header + one int and one references].

La capacidad es diferente (always >=) que el tamaño, sino que quieren hacer 'em igual, llame trimToSize()

el punto de vista técnico ArrayList tiene un Object[] donde se almacenan los datos.

3

Esto es lo que es un generador de perfiles de memoria. Te dirá tu plataforma. El tamaño mínimo para una ArrayList vacía es de 64 bytes. Es muy probable que no necesite saber esto a menos que tenga 100K elementos o más.

0

La manera en que funciona ArrayList es que simplemente contiene una matriz de cierto tamaño (que se puede especificar en el constructor, creo que 10 es la predeterminada). Siempre que la cantidad de elementos sea demasiado grande para la matriz interna, el tamaño de la matriz interna se duplica. Entonces, necesita multiplicar el tamaño del objeto por el tamaño de la matriz interna.

3

Puede que tenga que usar un profiler como el disponible en Netbeans que le mostrará el consumo de memoria de nuestro programa y le puede dar algunos detalles sobre cada objeto.

1

La respuesta es, depende de cómo se mida. Si me preguntaras el tamaño de una ArrayList, te daría el tamaño poco profundo. Es decir, una ArrayList consiste en una matriz de referencias y un entero que indica la cantidad de elementos contenidos. Si quería saber el tamaño, es simplemente 4 + * array.length.

Si desea saber el tamaño de ArrayList y todos los elementos contenidos, hay algunos analizadores de pila que pueden resolver esto. Creo que YourKit es uno de ellos.

1

El uso de memoria de Java depende de la implementación de JVM. El único método real para determinar el uso de memoria de una instancia que conozco es usar un agente Java 5 instrumentation. Hay un pequeño tutorial para hacerlo.

Cuestiones relacionadas