Maison >Java >javaDidacticiel >Quelle est la différence entre StackOverflowError et OutOfMemoryError en Java ?

Quelle est la différence entre StackOverflowError et OutOfMemoryError en Java ?

WBOY
WBOYavant
2023-08-27 12:09:061072parcourir

Quelle est la différence entre StackOverflowError et OutOfMemoryError en Java ?

Chaque fois que nous exécutons un programme Java, le système d'exploitation alloue de la mémoire à la JVM. La JVM divise cette mémoire en deux parties. L’une est la mémoire de pile et l’autre la mémoire de tas. La pile est utilisée pour exécuter des méthodes et le tas est utilisé pour stocker des objets. Lorsque la pile est pleine, la JVM renvoie java.lang.StackOverflowError ; lorsque le tas est plein, la JVM renvoie java.lang.OutOfMemoryError.

StackOverflowError

  • La pile est utilisée pour l'exécution de la méthode. Pour chaque appel de méthode, un bloc est créé dans la mémoire de la pile
  • Les données liées à la méthode (telles que les paramètres, les variables locales ou les références d'objet) sont stockées dans ce bloc.
  • Une fois l'exécution de la méthode terminée, le bloc est supprimé de la pile avec les données qui y sont stockées.
  • Chaque fois que nous appelons une méthode, elle doit terminer son exécution et quitter la mémoire de la pile.
  • Si la méthode reste dans la pile, alors la pile sera pleine et la JVM lancera java.lang.StackOverflowError.

OutOfMemoryError

  • Les objets que nous créons en Java sont stockés dans la mémoire tas. Lorsque ces objets ne sont plus nécessaires, ils doivent être supprimés de la mémoire.
  • Garbage Collector supprime les objets inutiles de la mémoire tas.
  • Si nos objets ont des références live, le garbage collector ne les supprimera pas. Il supprime uniquement les objets qui n'ont aucune référence active.
  • Chaque fois que nous appelons une méthode, elle doit terminer son exécution et quitter la mémoire de la pile.
  • S'il n'y a plus d'espace pour le nouvel objet dans la mémoire tas, la JVM lancera java.lang.OutOfMemoryError.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer