@Axel,
die GarbageCollection ist (zumindest Ansatzweise) schon beeinflussbar. Die JVM-Parameter -XMX und -XMS sind dafür maßgeblich mitentscheidend.
Beispiel: JMeter
Ich hatte JMeter immer mit den Standard-Einstellungen laufen, wo XMX = XMS ist. Wenn ich also mit zu vielen Threads einen Test gestartet habe kam immer ein OutOfMemory.
Dann habe ich mal gelesen, dass der XMS-Wert bestimmt, wann die Garbage-Collection anfängt, 'gründlich' sauberzumachen. Also habe ich den XMX-Wert auf 3/4 des XMS-Wertes gesetzt, und siehe da, seitedem ist das Problem nie wieder aufgetreten. Man kann in der Console auch schön beobachten, dass die 'full GC' beizeiten ausgelöst wird und somit das Problem nicht mehr auftritt.
Mit diesem Wissen habe ich mich dann am Tomcat probiert und auch dort das OutOfMemory-Problem, mit dem ich zuvor lange gekämpft hatte, gelöst.
Wann die 'kleineren Objekte' von der GarbageCollection eingesammelt und zerstört werden hängt also offensichtlich auch von dem Verfügbaren Speicher ab (ist ja auch logisch).
Die Problematik mit den Threadsicheren HTTP-Connections ist mir grade im Domino-Umfeld gut bekannt. (Hängende HTTP-Requests, die das herunterfahren des Servers verhindern). Da hat der Commons.HTTPClient wirklich eine Lücke geschlossen.
Aber es gibt da offensichtlich noch andere Probleme mit dem Thread-Handling. So passiert es mir unter großer Last immer wieder mal, dass die JVM (mit JAVA-API Zugriffen) wegraucht. Im hs_pid stehen dann auch so Thread-Geschichten, die auf Memory-Leaks hinweisen, welche beim Aufruf der Thread.stop()-Methode entstehen. Diese Methode wird allerdings aus den API-Klassen (NotesThread.stermThread()) selbst aufgerufen.
@Ralf
Dass das recyclen der Session auch alle daraus instanziierten Objekte mit-recycelt ist mir neu. Aber gut zu wissen.
Thomas