[
https://issues.jboss.org/browse/AS7-3733?page=com.atlassian.jira.plugin.s...
]
Philippe Guinot commented on AS7-3733:
--------------------------------------
Remy,
Using a listener is not a good solution, I'm afraid. Because at that point the current
context class loader is the application class loader.
When the AWT Thread is created it refers so to the application's CL, hence the leak.
So this is a code that must be called outside any application specific code. Maybe not the
Web component if you want.. Feel free to re-affect this JIRA to anyone, but it should be
reopened as long as the given workaround you suggested does not work.
PS: using Thread.currentThread().setContextClassLoader(...) before creating a thread, does
not prevent the child thread keeping a reference to the parent thread's CL. I wish it
could, but it would be to easy.. A reference to the class loader is also kept in the
inheritedAccessControlerContext.
AWT AppContext / EventQueue ClassLoader Memory Leaks
----------------------------------------------------
Key: AS7-3733
URL:
https://issues.jboss.org/browse/AS7-3733
Project: Application Server 7
Issue Type: Bug
Components: Web
Affects Versions: 7.1.0.CR1b
Environment: AS 7 running on JDK 1.6.0_30, Windows 7
Reporter: Philippe Guinot
Assignee: Remy Maucherat
Labels: appcontext, as7, awt, classloader, eventqueue, jboss, leak
The use of libraries using awt components creates ClassLoader Memory Leaks. This is
because the first call to the sun AppContext class makes a static reference to the current
class loader.
Same thing goes with the creation of the AWT Event Queue, as an example the use of the
class java.awt.Color makes a static init call to java.awt.Toolkit which creates an AWT
EventQueue despite the headless mode. The EventQueue also keep a reference to the current
context with the class loader.
The current work around I've found is to add a call to:
{code}java.awt.Toolkit.getDefaultToolkit();{code}
before the application gets loaded.
This causes the EventQueue to be created and the AppContext to be initialized.
Then, as the AWT static references are final, I get rid of this issue for the rest of the
server lifecycle.
I put this code in org.jboss.as.server.Main, just after line 91. However a proper
solution would be to use org.apache.catalina.core.JreMemoryLeakPreventionListener which is
present in the JBoss Web jar but not used... (cf.
https://community.jboss.org/thread/164760 ) However the Tomcat code deals only with the
AppContext, not the EventQueue!
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira