Les fuites de mémoire sont l'un des bugs les plus difficiles à traquer dans les logiciels informatiques. En gros, elles correspondent à un morceau de mémoire que vous allouez, mais que vous ne libérez jamais. Pour des langages comme C++, il s'agit d'une fuite directe, puisque vous êtes responsable de toutes les allocations et désallocations de mémoire. Dans des langages comme Java, ces fuites de mémoire peuvent être extrêmement subtiles et difficiles à détecter, puisque le ramassage des ordures est censé être fait pour vous. L'acte même de la collecte des ordures a également tendance à cacher les fuites.
La façon la plus simple de repérer une fuite de mémoire est d'exécuter votre programme et de surveiller l'utilisation de la mémoire. Si elle continue à grimper régulièrement, alors vous pourriez avoir une fuite de mémoire. Cependant, dans les langages GC comme Java, la mémoire grimpe toujours jusqu'à ce que vous atteigniez la pleine mémoire, puis un GC se produit, et la mémoire est récupérée. Dans ce cas, vous devez surveiller si l'utilisation de la mémoire immédiatement après la fin de la GC augmente.
Concernant les autres symptômes...
Lorsque votre programme s'exécute sur des données, l'utilisation de la mémoire augmente.
Lorsque votre programme est inactif, l'utilisation de la mémoire peut rester constante (à moins que votre fuite ne se trouve dans la partie du code traitant les inactivités.)
Vous obtenez des erreurs " out of memory " alors qu'il devrait vous rester beaucoup de mémoire.
Dans un type de fuite de mémoire, une fuite de handle, vous vous retrouvez à court de handles pour des ressources limitées, comme les file handles, les sockets, etc, parce que vous ne parvenez pas à les fermer correctement.
Enfin, il existe de très nombreux outils pour détecter ces problèmes, précisément parce qu'ils sont si difficiles à identifier facilement. Les profileurs, les plug-ins de mémoire et les débogueurs sont tous de bons choix pour trouver les fuites de mémoire.
Les outils de détection de fuites de mémoire peuvent être utilisés pour détecter les fuites de mémoire.