[jboss-jira] [JBoss JIRA] (AS7-4675) Memory leak when reading EJB 2.1 CMP EntityBeans
Frederico Francisco (JIRA)
jira-events at lists.jboss.org
Fri Aug 23 19:45:26 EDT 2013
[ https://issues.jboss.org/browse/AS7-4675?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12798957#comment-12798957 ]
Frederico Francisco commented on AS7-4675:
------------------------------------------
Stuart Douglas,
Actually the following was removed from ee/src/main/java/org/jboss/as/ee/component/BasicComponent.java:
final Map<Method, InterceptorFactory> interceptorFactoryMap = this.getInterceptorFactoryMap();
// This is an identity map. This means that only <b>certain</b> {@code Method} objects will
// match - specifically, they must equal the objects provided to the proxy.
final IdentityHashMap<Method, Interceptor> interceptorMap = new IdentityHashMap<Method, Interceptor>();
for (Method method : interceptorFactoryMap.keySet()) {
interceptorMap.put(method, interceptorFactoryMap.get(method).create(context));
}
Instead of creating the identiy map above, the interceptorFactoryMap is passed to the constructor of BasicComponentInstance, which internally will populate the interceptorMap, on demand, as methods are called.
All the subclasses were changed to receive the interceptorFactoryMap and the InterceptorContext in their constructor.
Could you give us some feedback? Are these changes sane? Are we missing something?
Thanks.
> Memory leak when reading EJB 2.1 CMP EntityBeans
> ------------------------------------------------
>
> Key: AS7-4675
> URL: https://issues.jboss.org/browse/AS7-4675
> Project: Application Server 7
> Issue Type: Bug
> Components: EJB
> Affects Versions: 7.1.1.Final
> Environment: Windows 7 Pro SP1 (64bit); JDK 1.6.0_31 (64bit); Oracle Database 11g Release 11.1.0.6.0 - 64bit Production; AS71.1Final / AS71.2 latest build
> Reporter: Klaus Benary
> Assignee: Stuart Douglas
> Priority: Critical
> Fix For: 7.1.2.Final (EAP)
>
> Attachments: HeapDumpScreenShot.png, JCTest-maven.zip, JCTest.zip
>
>
> After reading 12000 EJB 2.1 EntityBeans in a test application there are about 5 million Interceptor[] arrays firmely bound in the heap. A heap dump shows this as a typical reference chain:
> GC Root: ServiceContainerImpl$ServiceThread
> ServiceContainerImpl$ServiceThread.container = ServiceContainerImpl
> ServiceContainerImpl.registry = UnlockedReadHashMap
> UnlockedReadHashMap.table = AtomicReferenceArray
> AtomicReferenceArray.array = Object[16384]
> Object[6209] = UnlockedReadHashMap$Item[3]
> UnlockedReadHashMap$Item[1] = UnlockedReadHashMap$Item
> UnlockedReadHashMap$Item.value = ServiceRegistrationImpl
> ServiceRegistrationImpl.instance = ServiceControllerImpl
> ServiceControllerImpl.serviceValue = ImmediateValue
> ImmediateValue.value = TimedObjectInvokerImpl
> TimedObjectInvokerImpl.timeoutInterceptors = HashMap
> HashMap.table = HashMap$Entry[128]
> HashMap$Entry[123] = HashMap$Entry
> HashMap$Entry.value = ChainedInterceptor
> ChainedInterceptor.interceptors = Arrays$ArrayList
> Arrays$ArrayList.a = Interceptor[6]
> The number of bound objects keeps growing when reading more EntityBeans - even wehn reading the same beans again.
> Even after undeploy of the application the
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list