Avatar ·

Wie erstellt man ein Speicherleck in Java? Codebeispiele und Erklärung

Hallo zusammen! Ich bin ein Java-Anfänger und interessiere mich sehr für das Thema Speicherverwaltung. Ich weiß, dass es in Java einen Garbage Collector gibt, der automatisch Speicher von Objekten freigibt, auf die keine Referenzen mehr zeigen. Aber mir wurde gesagt, dass man selbst in Java ein Speicherleck erzeugen kann, wenn man unachtsam programmiert. Ich versuche zu verstehen, wie genau das passiert. Ich habe ein einfaches Beispiel geschrieben, bin mir aber nicht sicher, ob es korrekt ist. Hier ist der 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()); } } } ``` Dieser Code wird offensichtlich einen OutOfMemoryError auslösen, weil wir endlos Objekte zu einer statischen Liste hinzufügen. Aber das ist eher ein "Überlauf" als ein Leck. Mich interessieren subtilere Fälle, in denen der GC Objekte nicht einsammeln kann, obwohl wir denken, dass sie nicht mehr benötigt werden.