2010-09-01 16 views

Respuesta

2

Java Heap es el límite para el tamaño de los objetos que usted puede tener en el sistema. Si el tamaño de su objeto está más allá del montón, se generará un error de falta de memoria.

En su caso, el tamaño total de su objeto (Objeto en ArrayList + otros objetos en su sistema) es más importante, ya que su ArrayList solo haría referencia a estos Objetos.

Estas son las opciones de VM se puede utilizar para establecer Montón tamaño como por su exigencia (de the java documentation):

-Xmsn

Especificar el tamaño inicial, en bytes, de la memoria grupo de asignación. Este valor debe ser un múltiplo de 1024 mayor que 1 MB. Adjunte la letra k o K a indique kilobytes, o m o M a indique megabytes. El valor predeterminado es de 2 MB. Ejemplos:

 
     -Xms6291456 
     -Xms6144k 
     -Xms6m 

-Xmxn

especificar el tamaño máximo, en bytes, de la piscina asignación de memoria. Este valor debe un múltiplo de 1024 mayor que 2MB. Adjunte la letra k o K a indique kilobytes, o m o M a indique megabytes. El valor predeterminado es 64 MB.Ejemplos: información Montón

 
     -Xmx83886080 
     -Xmx81920k 
     -Xmx80m 

cheque de VM Spec

3.5.3 Montón

La máquina virtual de Java tiene un montón que se comparte entre todos Java Virtual Machine> hilos. El montón es el área de datos de tiempo de ejecución a partir de la cual se asigna la memoria para todas las instancias de clase y las matrices. El montón se crea en la puesta en marcha de la máquina virtual. El almacenamiento en montón para objetos es recuperado por> un sistema de gestión de almacenamiento automático (conocido como recolector de basura); los objetos nunca> son desasignados explícitamente. La máquina virtual Java no asume ningún tipo particular de sistema de gestión de almacenamiento automático, y la técnica de gestión de almacenamiento puede elegirse de acuerdo con los requisitos del sistema del implementador. El montón puede ser de un tamaño fijo o expandirse según lo requiera el cálculo y se puede contratar si un montón más grande es innecesario. La memoria para el montón no necesita ser contigua.

Una implementación de máquina virtual Java puede proporcionar al programador o al usuario control sobre el tamaño inicial del montón, así como, si el montón se puede expandir o contraer dinámicamente, controlar el tamaño máximo y mínimo del montón. 5

la siguiente condición excepcional se asocia con el montón:

Si un cálculo requiere más montón que puede ser puesto a disposición por el sistema automático de gestión de almacenamiento, la máquina virtual Java lanza un OutOfMemoryError.

0

No puede usar ningún objeto de tamaño sin repercusiones no. Puede codificar lo que quiera, pero obviamente debe tener en cuenta la JVM y los límites típicos de memoria/montón utilizados.

0

El único factor limitante es el tamaño máximo de almacenamiento dinámico, también tuve pocos objetos gordos de 100MB como memoria en db.

0

Por supuesto, tiene limitaciones de límite de memoria. Sin embargo, puede controlar la memoria del montón inicializando a un tamaño superior. Pero eso no garantiza que pueda usar memoria ilimitada a su gusto.

13

Si usted tiene un objeto (vamos a llamarlo A) que hace referencia a un ArrayList con muchos, muchos objetos en él, el "tamaño" de A todavía habrá bastante pequeña (del tamaño de la referencia más un poco de sobrecarga) . Los objetos referenciados por A son bastante independientes de A. El único límite es que el tamaño total de todos los objetos está limitado por la memoria disponible.

El único "objeto enorme" sería uno con muchos, muchos campos, pero allí la especificación JLS/JVM establece un límite bastante pequeño (el fields_count in the class file format es un campo u2, por lo que puede tener como máximo 65 535 campos) .

+10

Maldición Solo estaba diseñando un objeto con 65536 campos :( – fish

+4

@fish: eso no es diseño, es un accidente ;-) –

0

El límite de montón global es la restricción de memoria principal. Mientras que tus objetos quepan dentro de esto estarás bien.

Puede probar esto si lo desea, asignando muchas matrices grandes y observando cuando obtiene OutOfMemoryErrors.

También hay un límite de tamaño de matriz de 2147483647 debido al tamaño de los índices enteros. Sin embargo, nunca vimos a nadie que se topara con esto en la práctica.

Cuestiones relacionadas