Avatar ·

Comment créer une fuite mémoire en Java ? Exemples de code et explication

Bonjour à tous ! Je suis un développeur Java débutant, et le sujet de la gestion de la mémoire m'intéresse beaucoup. Je sais qu'en Java, il y a un Garbage Collector (GC) qui libère automatiquement la mémoire des objets qui n'ont plus de références. Mais on m'a dit que même en Java, on peut créer une fuite mémoire si on écrit du code négligemment. J'essaie de comprendre comment cela se produit exactement. J'ai écrit un exemple simple, mais je ne suis pas sûr qu'il soit correct. Voici le code : ```java import java.util.ArrayList; import java.util.List; public class MemoryLeakExample { private static List list = new ArrayList<>(); public static void main(String[] args) { while (true) { list.add(new Object()); } } } ``` Ce code va évidemment provoquer une OutOfMemoryError, car nous ajoutons des objets à une liste statique de manière infinie. Mais c'est plutôt un "débordement" qu'une fuite. Je voudrais en savoir plus sur les cas plus subtils où le GC ne peut pas collecter des objets, même si nous pensons qu'ils ne sont plus nécessaires.