]
Joshua Davis commented on WELD-920:
-----------------------------------
That explains it then, thanks! JIRA issue: CDI-139
So in my case weld is handing me managed instances from the {{DependentContext}}. The
context hangs on to these instances so that it can later call 'destroy' lifecycle
methods on them when the context goes away, which it never does. Makes sense. However,
it might be good to point out this difference a little more clearly in the Weld docos, as
folks who are used to Guice and PicoContainer might be surprised by this.
Idea #2 sounds simple. Either way, would that be a new method on {{Instance}} or
something?
Memory leak through the creational context of an @AppScoped bean when
injecting Instance<>
------------------------------------------------------------------------------------------
Key: WELD-920
URL:
https://issues.jboss.org/browse/WELD-920
Project: Weld
Issue Type: Bug
Components: Scopes & Contexts
Affects Versions: 1.1.0.CR3, 1.1.1.Final
Reporter: Adam Warski
Attachments: leak-test-1.war, leak-test.tar.gz
Given a simple dependent-scoped bean: public class InstanceBean {}, and an
application-scoped bean (see below) to which an instance of the dependent-scoped bean is
injected, each time the get() method is called on the instance, even though it's not
used, a reference to it stays in the creational context of the application scoped bean
(
http://screencast.com/t/XqjQ1GB7Wv3). That way after several requests, where each one
calls the method, more and more memory is leaked (
http://screencast.com/t/s1VBx49i).
Attached is a simple web application demonstrating this. To reproduce, deploy to AS6,
click the "leak" button several times, and analyze the heap dump e.g. in
JProfiler.
@ApplicationScoped
@Named("test")
public class AppScopedBean {
private Instance<InstanceBean> instanceBeanInstance;
@Inject
public AppScopedBean(Instance<InstanceBean> instanceBeanInstance) {
this.instanceBeanInstance = instanceBeanInstance;
}
public AppScopedBean() {
}
public void leakOneInstance() {
System.out.println("Leaked!");
instanceBeanInstance.get();
}
}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: