The following comment has been added to this issue:
Author: Guido Anzuoni
Created: Mon, 20 Sep 2004 4:28 AM
Body:
If Tag could represent an "incarnated" TagScript wrt a JellyContext
than the various incarnations of the Script should be cached
int the context itself rather than in a ThreadLocal.
Adding a simple Map in JellyContext with TagScript as key
will solve all memory leaks with no impact.
Here follows the outline of changes.
JellyContext {
public Object getTagScriptData(TagScript t);
public void setTagScriptData(TagScript t, Object d);
};
TagScript {
...
public Tag getTag(JellyContext ctx) throws JellyException {
TagScriptContextualData tscd =
(TagScriptContextualData) ctx.getTagScriptData(this);
if (tscd == null) {
tscd = new TagScriptContextualData();
ctx.setTagScriptData(this, tscd);
}
Tag tag = tscd.getTag();
if (tag == null) {
tag = createTag();
tag.setContext(ctx);
tscd.setTag(tag);
}
}// end of public Tag getTag()
...
public void run(JellyContext context, XMLOutput output)
throws JellyTagException {
try {
Tag tag = getTag(context);
if ( tag == null ) {
return;
}
if ( tag instanceof DynaTag ) {
.......
}// end of public void run()
};
Guido.
---------------------------------------------------------------------
View this comment:
http://issues.apache.org/jira/browse/JELLY-148?page=comments#action_53235
---------------------------------------------------------------------
View the issue:
http://issues.apache.org/jira/browse/JELLY-148
Here is an overview of the issue:
---------------------------------------------------------------------
Key: JELLY-148
Summary: Huge memory leak resulting from the use of ThreadLocal
Type: Bug
Status: Unassigned
Priority: Critical
Project: jelly
Components:
core / taglib.core
Versions:
1.0-beta-5
Assignee:
Reporter: Hans Gilde
Created: Sat, 18 Sep 2004 9:34 PM
Updated: Mon, 20 Sep 2004 4:28 AM
Description:
There is a huge memory leak that results from the TagScript's use of ThreadLocal.
ThreadLocal is usually used from a staic variable, while TagScript uses it from an
instance variable. Although this looks legal to me, it causes a huge memory leak.
---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]