2012-07-30 7 views
5

Como un objeto recién creado se asigna a la nueva generación. ¿Es posible que un objeto recién creado se asigne directamente a una generación antigua o permanente? si lo es, ¿en qué bases?¿Se podría crear un objeto en la generación anterior?

+0

Se supone que no debes preocuparte o preocuparte por cómo funciona el recolector de basura. – Wug

Respuesta

8

Ver "Frequently Asked Questions about Garbage Collection in the HotspotTM JavaTM Virtual Machine":

Do nunca caen objetos asignado directamente a la vieja generación?

En 1.4.1 hay dos situaciones donde la asignación puede ocurrir directamente en la generación anterior.

Si una asignación falla en la generación joven y el objeto es una gran matriz que no contiene ninguna referencia a objetos, puede ser asignado directamente a la generación anterior. En algunas instancias seleccionadas, , esta estrategia tenía como objetivo evitar una recopilación de la generación joven mediante la asignación desde la generación anterior.

Hay una bandera (disponible en 1.4.2 y posteriores) l-XX: PretenureSizeThreshold = que se puede configurar para limitar el tamaño de las asignaciones en la generación joven. Cualquier asignación más grande que esto no se intentará en la generación joven y así será asignados de la generación anterior.

El tamaño del umbral para 1) es de 64k palabras. El tamaño predeterminado para PretenureSizeThreshold es 0, que indica que se puede asignar cualquier tamaño a en la generación joven.

En 1.4.2 caso 1) el umbral de la palabra de 64k continúa siendo verdadero para el colector incremental (-Xincgc). Para el recopilador predeterminado y el recopilador concurrente (-XX: + UseConcMarkSweepGC) el valor de umbral ha cambiado , de modo que un intento de asignar a la generación anterior solo se produce si el tamaño de la asignación es mayor que toda la generación (espacio disponible cuando está vacío). Se observó que hubo casos en los que la estrategia 1.4.1 para el recopilador predeterminado y el recopilador simultáneo estaban dando lugar a colecciones completas solamente (no se estaban realizando recopilaciones de generación joven). Consideramos que es lo suficientemente malo como para elevar el umbral.

+0

lo tengo. Gracias hombre. :) –

+1

esto no es correcto en absoluto, consulte aquí: http://stackoverflow.com/questions/24618467/size-of-huge-objects-directly-allocated-to-old-generation/24618819?noredirect=1#comment38154886_24618819 –

Cuestiones relacionadas