Maison >Java >javaDidacticiel >Quand devriez-vous détecter une erreur Java OutOfMemoryError ?
Attraper java.lang.OutOfMemoryError ?
La documentation Java déconseille d'attraper java.lang.Error, y compris java.lang.OutOfMemoryError. Cependant, il existe des situations dans lesquelles cela peut être justifié.
Quand attraper OutOfMemoryError
Envisagez d'attraper OutOfMemoryError uniquement pour une terminaison en douceur, en libérant des ressources et en enregistrant la cause de l'échec. Cela se produit lorsqu'une allocation de mémoire de bloc échoue en raison de ressources de tas insuffisantes. Pourtant, le tas contient toujours des objets alloués. En supprimant les références aux objets d'exécution, davantage de mémoire peut être libérée pour le nettoyage.
Éviter l'allocation de mémoire dans le gestionnaire Catch
Pour empêcher une allocation de mémoire supplémentaire dans le gestionnaire Catch, considérez :
Exemple de code
Le code suivant montre la capture d'OutOfMemoryError et la libération de mémoire pour le nettoyage :
import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; public class OutOfMemoryErrorHandling { private static final int MEGABYTE = (1024 * 1024); public static void main(String[] args) { MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); for (int i = 1; i <= 100; i++) { try { byte[] bytes = new byte[MEGABYTE * 500]; } catch (OutOfMemoryError e) { // Cleanup operations: // Drop references to runtime objects // Release external resources (e.g., logging) MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage(); long maxMemory = heapUsage.getMax() / MEGABYTE; long usedMemory = heapUsage.getUsed() / MEGABYTE; System.out.println(i + " : Memory Use :" + usedMemory + "M/" + maxMemory + "M"); } } } }
Conclusion
Attraper OutOfMemoryError doit être abordé avec une extrême prudence et uniquement pour faciliter une résiliation en douceur. En gérant soigneusement l'allocation de mémoire dans le gestionnaire catch, il est possible d'éviter d'autres problèmes de mémoire et de permettre un nettoyage approprié avant la fermeture de la JVM.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!