In einer älteren Java Webanwendung unter Struts 1 und JBoss 5.1.0 war nach dem Logout aller Benutzer immer noch sehr viel Speicher mit Objekten der Applikation belegt.
Eine Heapanalyse ergab, dass Instanzen der eigenentwickelten JSP Tag-Klassen über die Klasse org.apache.jasper.runtime.TagHandlerPool weiter im Speicher gehalten wurden. Die Tag Klassen realisieren spezifische HTML Ausgaben und halten dadurch Referenzen zu nicht mehr benötigten Objektinstanzen am Leben. Der TagHandlerPool ist standardmäßig im JBoss aktiviert, kann aber ausgeschaltet werden:
Eine Heapanalyse ergab, dass Instanzen der eigenentwickelten JSP Tag-Klassen über die Klasse org.apache.jasper.runtime.TagHandlerPool weiter im Speicher gehalten wurden. Die Tag Klassen realisieren spezifische HTML Ausgaben und halten dadurch Referenzen zu nicht mehr benötigten Objektinstanzen am Leben. Der TagHandlerPool ist standardmäßig im JBoss aktiviert, kann aber ausgeschaltet werden:
- Man navigiert zu folgendem Ordner:
jboss\server\[project]\deployers\jbossweb.deployer - Dort fügt man in der web.xml zum JSP Servlet folgenden Parameter hinzu:
<init-param>
<description>Disable Tag Pooling</description>
<param-name>enablePooling</param-name>
<param-value>false</param-value>
</init-param>