[weld-issues] [JBoss JIRA] Commented: (WELD-920) Memory leak through the creational context of an @AppScoped bean when injecting Instance<>
Joshua Davis (JIRA)
jira-events at lists.jboss.org
Tue Jun 28 07:19:23 EDT 2011
[ https://issues.jboss.org/browse/WELD-920?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12611488#comment-12611488 ]
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: http://www.atlassian.com/software/jira
More information about the weld-issues
mailing list