Wie würdest du ein Memory Leak in einem langlaufenden JVM-Service diagnostizieren?
Zuerst bestätigen, dass es überhaupt ein Leak ist: den Heap über Stunden nach vollständigen GCs beobachten, denn ein Sägezahn, der zur Baseline zurückkehrt, ist kein Leak. Dann einen Heap Dump ziehen und ihn in MAT öffnen, das den Dominator Tree zeigt — die Objekte mit dem meisten retained Memory und wer sie referenziert. Die üblichen Antworten sind ein unbegrenzter Cache, ein ThreadLocal, das auf einem gepoolten Thread nie geleert wird, oder Listener, die sich registrieren und nie wieder abmelden.