web-dev-qa-db-fra.com

GC (Allocation Failure) VS Exception OutOfMemoryError

'OutOfMemoryError': Généralement, cette erreur est générée lorsque l'espace disponible est insuffisant pour allouer un objet dans le segment de mémoire Java.

GC (Échec d'allocation): Échec d'allocation »signifie qu'il existe une demande d'allocation plus grande que l'espace disponible dans la jeune génération.

Cela signifie-t-il qu'un échec d'allocation sera lancé lorsque la mémoire de la jeune génération est saturée (GC mineur) et que "OutOfMemoryError" est projeté dans un GC total?

5
user3024119

Ces pourraient devenir liés autant que je sache; mais ce sont des choses totalement différentes. 

OutOfMemory est une erreur dont vous ne pouvez pas récupérer, la JVM mourra à ce stade.

GC (Allocation Failure): Allocation Failure est la raison pour laquelle GC entrera en action (et effectuera une collecte mineure). À ce stade, certaines choses peuvent se produire, par exemple: un espace suffisant est libéré pour que la nouvelle allocation puisse tenir dans young generation. Ou cela ne s'est pas produit et certains objets seront promus au old generation. S'ils can't be promoted, un full GC pourrait être déclenché - et si cela ne libère pas assez d'espace, un OutOfMemorypourrait être lancé. 

5
Eugene

En général, une OutOfMemoryError se produit lorsque vous avez dépassé la mémoire maximale que vous avez déjà allouée à la machine virtuelle Java. Ce montant peut être modifié lors du démarrage de Java à l'aide de paramètres jvm. par exemple. -Xmx2G. Notez que cette quantité n'est pas utilisée immédiatement. Voir ci-dessous.

GC (Allocation Failure) est similaire, sauf qu'il se produit lorsque le collecteur de mémoire est à court de mémoire sur le segment de mémoire et qu'il tente d'allouer davantage. Si votre mémoire allouée est supérieure à votre mémoire système disponible, cela échouera. La JVM essaie essentiellement d’allouer de la mémoire qui n’y est pas.

Voir pour plus d'informations

1
killjoy

Échec d'allocation (d'évacuation)

Comme avec CMS, le collecteur G1 exécute des parties de sa collection pendant que l'application continue de s'exécuter et l'application risque d'allouer des objets plus rapidement que le garbage collector ne peut récupérer l'espace disponible. Reportez-vous à la section Défaillance du mode simultané dans Collecteur de balayage concomitant (CMS) pour connaître le comportement du CMS analogue. En G1, la défaillance (épuisement du segment de mémoire Java) survient pendant que G1 copie des données en temps réel d'une région (en évacuant) dans une autre région. La copie est faite pour compacter les données en direct. Si une région libre (vide) ne peut pas être trouvée pendant l'évacuation d'une région en cours de collecte des ordures, un échec d'allocation se produit (car il n'y a pas d'espace pour allouer les objets vivants de la région évacuée) et un arrêt du monde ( STW) la collection complète est terminée.

0
user3024119