L'un des avantages les plus évidents d'AVA est son mécanisme de gestion de la mémoire. Il vous suffit de créer simplement des objets, le mécanisme de récupération des ordures de Java est responsable de l'allocation et de la libération de la mémoire. Cependant, la situation n'est pas aussi simple que l'imaginaire, car les fuites de mémoire se produisent souvent dans les applications Java.
Ce didacticiel montre ce qu'est la fuite de mémoire, pourquoi il y a une fuite de mémoire et comment éviter les fuites de mémoire.
Qu'est-ce que la fuite de mémoire?
Définition: Si les objets ne sont plus utilisés dans les applications, mais parce qu'ils sont cités ailleurs, le recyclage des ordures ne peut pas être supprimé (cela rend déraisonnable beaucoup de mémoire, ce qui entraîne un débordement de mémoire. Traduction).
Pour comprendre cette définition, nous devons comprendre l'état de l'objet dans la mémoire. La figure ci-dessous montre ceux qui ne sont pas utilisés, et ceux-ci ne sont pas cités.
De la figure, nous pouvons voir l'objet de référence et l'objet non préparé (plage). Aucun objet cité ne peut être recyclé par le mécanisme de recyclage des ordures, et l'objet de référence ne peut pas être recyclé par le mécanisme de récupération des ordures. Bien sûr, la cible n'est pas utilisée car aucun autre objet ne le cite. Cependant, tous les objets ne sont pas cités. Certains objets inutilisés sont toujours cités ailleurs! C'est la cause de la fuite de la mémoire.
Pourquoi les fuites de la mémoire se produisent-elles?
Voyons à cet exemple ci-dessous pour voir pourquoi la fuite de mémoire se produit. Dans l'exemple suivant, l'objet A fait référence à l'objet B. Le cycle de vie de A (T1-T4) est beaucoup plus long que le cycle de vie (T2-T3) de B. Lorsque B n'est plus utilisé dans l'application, A tient toujours la référence à B. De cette façon, le mécanisme de récupération des ordures ne peut pas supprimer B de la mémoire. Cela est susceptible de provoquer des débordements de mémoire, car si de nombreux autres objets sont comme un, il y aura de nombreux objets qui ne peuvent pas être recyclés en mémoire, qui consomment beaucoup d'espace mémoire.
Il est également possible que B détient un grand nombre de références à d'autres objets. Ces objets référencés par B ne seront pas recyclés. Tous ces objets inutilisés consommeront un espace mémoire précieux.
Comment empêcher les fuites de mémoire?
Voici quelques compétences rapides pour empêcher les fuites de mémoire:
1. Faites attention à la classe de collecte, comme Hashmap, ArrayList, etc., car ils sont là où les fuites de mémoire se produisent souvent. Lorsqu'ils sont déclarés comme des objets statiques, leur cycle de vie est aussi long que le cycle de vie de l'application.
2. Faites attention au moniteur et au rappel des incidents. Si une classe est enregistrée auprès d'un auditeur, mais lorsque la catégorie n'est plus utilisée, le périphérique de surveillance ne peut pas être annulé et que des fuites de mémoire peuvent se produire.
3. "Si une classe gère sa propre mémoire, les programmeurs doivent être alertes sur les fuites de la mémoire."