„Der GC wird’s schon richtig“ passiert mir zu häufig bei Java-Applikationen, in diesem Fall eine nicht weiter aufwändige Web-Applikation mit ungefähr 400 Benutzern – zur Haupnutzungszeit müllt das Miststück den Heap in 20 bis 30 Minuten um rund 7 GB zu.
Ich vermute[1], dass die Entwickler beim XML-Parsen die Xerces-Instanz nicht sauber beenden, sondern auf den GC vertrauen, der dann ja schon irgendwann die nicht mehr genutzten Klassen finalisiert und _irgendwann_ aus dem RAM wirft. Bei uns ist dieses irgendwann rund 8 Stunden nach Ende der Hauptarbeitszeit erreicht, erst dann sinkt der Heap-Verbrauch der defakto seit *Stunden*[2] ungenutzten Applikation auf unter 1 GB.
Meiner Meinung nach krankt Java vor allem daran, dass es zu unsauberem programmieren verführt – und, total enterprisey, dann Frameworks über Frameworks gestapelt werden, ohne dass sauber designt wird.
Rant Ende.
[1] simples Class-Histogramm, auf den Code habe ich keinen Zugriff und zum Dekompilieren ist es noch nicht kritisch genug
[2] aufgrund unserer Kundenstruktur ist das Nutzungsverhalten stark zyklisch und vorhersehbar