GC (Échec d'Allocation) VS OutOfMemoryError Exception
'OutOfMemoryError':
Généralement, cette erreur est renvoyée quand il ya suffisamment d'espace à allouer à un objet du tas Java.
GC (Échec d'Allocation):
L'Échec d'Allocation” signifie qu'il y a une demande d'allocation qui est plus grand que l'espace disponible dans la jeune génération.
Est-ce à dire Échec d'Allocation sera levée lors de la Jeune génération de la mémoire est pleine (Minor GC) et "OutOfMemoryError" est jeté en pleine GC?
La première est une erreur, la seconde ne l'est pas.
Je voulais savoir dans quel scénario ci-dessus d'erreur/exception sera levée.
Je voulais savoir dans quel scénario ci-dessus d'erreur/exception sera levée.
OriginalL'auteur user3024119 | 2017-05-09
Vous devez vous connecter pour publier un commentaire.
Ces pourrait devenir liées autant que je puis le dire; mais ils sont tout à fait différentes choses.
OutOfMemory
est une erreur que vous ne pouvez pas récupérer de la JVM va mourir à ce point.GC (Allocation Failure): Allocation Failure
est la raison pour laquelle GC coup de pied dans (et un do mineur de la collection). À ce stade, certaines choses peuvent se produire, comme: assez d'espace est libéré pour la nouvelle allocation pour tenir dansyoung generation
. Ou qui n'a pas été le cas et certains objets seront promusold generation
. Si ilscan't be promoted
, unfull GC
peut être déclenchée et si cela ne libère pas assez d'espace uneOutOfMemory
pourrait être jeté.Je n'ai jamais vraiment pensé à ce sujet profonde(ou directement traités), il est en effet trop large. Pouvez-vous vraiment vous récupérer à partir d'un OOM? Connaissez-vous des exemples peut être?
en fait, je pense que j'en ai trouvé un qui fait du sens pour moi : stackoverflow.com/questions/2679330/.... Il pourrait y avoir des cas où il est nécessaire d'allouer un contiguë partie de la mémoire aussi...
OriginalL'auteur Eugene
En général, un
OutOfMemoryError
se produit lorsque vous avez dépassé la quantité maximale de mémoire que vous avez déjà alloué à la JVM. Ce montant peut être modifié lors du démarrage de java à l'aide de paramètres de la jvm. par exemple,-Xmx2G
. Notez que ce montant n'est pas utilisé immédiatement. Voir ci-dessous.GC (Échec d'Allocation) est similaire, sauf qu'il se produit lorsque le garbage collector est à court de mémoire sur le tas, et il tente d'allouer plus de. Si votre mémoire allouée est supérieur à celui de votre mémoire système disponible, ce sera un échec. Essentiellement, la JVM essaie d'allouer de la mémoire qui n'est pas là.
Voir pour plus d'informations
Cette réponse peut expliquer mieux que je peux.
OriginalL'auteur killjoy
Allocation (L'Évacuation), L'Échec
Comme avec la CMS, le G1 collector s'exécute pièces de sa collection, tandis que l'application continue de fonctionner et il y a un risque que l'application va allouer des objets plus rapide que le garbage collector peut récupérer de l'espace libre. Voir la section Simultanées en Mode Échec Simultané Marque de Balayage (CMS) Collecteur pour l'analogue de la CMS comportement. En G1, la défaillance (épuisement du tas Java) se produit alors que G1 est la copie des données en direct d'une région (l'évacuation) dans une autre région. La copie est faite pour compacter les données en direct. Si une libre (vide) de la région ne peut pas être trouvé lors de l'évacuation d'une région d'ordures collectées, une allocation de panne (car il n'y a pas d'espace à allouer les objets en direct à partir de la région d'être évacué) et un stop-the-world (STW) collection complète est effectuée.
OriginalL'auteur user3024119