1. Qu'est-ce qu'une fuite de mémoire ?
Définition de la fuite de mémoire : Les objets ne sont plus utilisés par l'application, mais le garbage collector ne peut pas les supprimer car ils sont référencés.
Pour comprendre cette définition, nous devons comprendre l'état des objets en mémoire.
L'image ci-dessous illustre lesquelles sont inutilisées et lesquelles ne sont pas référencées.
Dans le diagramme, il y a des objets référencés et des objets non référencés.
Les objets non référencés seront récupérés, tandis que les objets référencés ne seront pas récupérés.
Un objet non référencé est définitivement inutilisé car aucun autre objet ne le référence.
Cependant, tous les objets inutilisés ne sont pas non référencés.
Certains d'entre eux sont référencés !
C'est de là que vient la fuite mémoire.
2. Pourquoi une fuite de mémoire se produit-elle ?
Jetons un coup d'œil à l'exemple ci-dessous pour voir pourquoi une fuite de mémoire se produit.
Dans l'exemple ci-dessous, l'objet A fait référence à l'objet B. La durée de vie de A (t1 - t4) est beaucoup plus longue que celle de B (t2 - t3).
Lorsque B n'est plus utilisé dans l'application, A y fait toujours référence.
De cette façon, le garbage collector ne peut pas supprimer B de la mémoire.
Cela peut entraîner des problèmes de mémoire insuffisante, car si A effectue la même opération sur plus d'objets, il y aura beaucoup d'objets non collectés et consommera de l'espace mémoire.
Il est également possible que B contienne de nombreuses références à d'autres objets. Les objets référencés par
B ne seront pas non plus collectés.
Tous ces objets inutilisés consommeront un espace mémoire précieux.
3. Comment éviter les fuites de mémoire
Voici quelques conseils pratiques rapides pour éviter les fuites de mémoire :
Faites attention aux classes de collection telles que HashMap, ArrayList, etc., car ce sont des endroits courants où la mémoire des fuites sont constatées.
Lorsqu'ils sont déclarés statiques, leur cycle de vie est le même que celui de l'application.
Faites attention aux auditeurs d'événements et aux rappels. Une fuite de mémoire peut se produire si un écouteur est enregistré mais pas désinscrit lorsque la classe n'est plus utilisée.
Si une classe gère sa propre mémoire, les programmeurs doivent se méfier des fuites de mémoire.
[1] Les variables membres des objets qui sont souvent multipliées pour pointer vers d'autres objets doivent être nulles.
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!