[ http://issues.apache.org/jira/browse/GERONIMO-1062?page=comments#action_12332227 ]
John Sisson commented on GERONIMO-1062: --------------------------------------- These proxy classes appear to be loaded by the AppClassLoader (system class loader). AFAIK, classes loaded by the system class loader never get unloaded. > OpenEJB client leaks memory on each JNDI lookup. Get OutOfMemoryException > after a few thousand lookups > ------------------------------------------------------------------------------------------------------- > > Key: GERONIMO-1062 > URL: http://issues.apache.org/jira/browse/GERONIMO-1062 > Project: Geronimo > Type: Bug > Components: OpenEJB > Versions: 1.0-M5, 1.0-M4 > Environment: Windows XP > j2sdk1.4.2_08 > Reporter: John Sisson > Priority: Critical > Fix For: 1.0 > Attachments: AllObjects.zip, apps.zip > > I have a standalone java application that uses OpenEJB's JNDI implementation > (org.openejb.client.RemoteInitialContextFactory ). It appears that each JNDI > lookup of an EJB is leaking memory and it looks like it is related to cglib. > I have attached to this JIRA a simple EJB and standalone java client > application that can be used to reproduce the problem. > Extract the zip file to the geronimo\sandbox directory > cd sandbox\echoTest > maven -o > deploy the echoTest.ear file in the sandbox\echoTest\target directory > cd sandbox\echoTestStandaloneClient > maven -o > cd target > java -jar echoTestStandaloneClient-0.1-SNAPSHOT.jar > The console will be updated with the number of lookups performed. E.G here > are a few examples with different JVM settings: > C:\OpenSourceJava\geronimo\trunk\sandbox\echoTestStandaloneClient>set > JAVA_HOME=C:\Program Files\Java\j2sdk1.4.2_08 > C:\OpenSourceJava\geronimo\trunk\sandbox\echoTestStandaloneClient>"%JAVA_HOME%"\bin\java.exe > -jar target\echoTestStandaloneClient-0. > 1-SNAPSHOT.jar > After 0 lookups: delta: 1,911,024, free: 1,911,024, used: 120,592, total: > 2,031,616, max: 66,650,112 > After 1000 lookups: delta: 417,040, free: 2,328,064, used: 2,603,520, total: > 4,931,584, max: 66,650,112 > After 2000 lookups: delta: 1,765,304, free: 4,093,368, used: 5,151,304, > total: 9,244,672, max: 66,650,112 > After 3000 lookups: delta: 1,759,288, free: 5,852,656, used: 7,303,696, > total: 13,156,352, max: 66,650,112 > After 4000 lookups: delta: 2,182,664, free: 8,035,320, used: 10,081,288, > total: 18,116,608, max: 66,650,112 > After 5000 lookups: delta: 1,579,184, free: 9,614,504, used: 11,574,104, > total: 21,188,608, max: 66,650,112 > Lookups performed: 5432 > Exception in thread "main" net.sf.cglib.core.CodeGenerationException: > java.lang.reflect.InvocationTargetExce > ption-->null > at > net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237) > at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377) > at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:304) > at > org.openejb.client.CgLibProxyFactory.newProxyInstance(CgLibProxyFactory.java:92) > at > org.openejb.client.CgLibProxyFactory.newProxyInstance(CgLibProxyFactory.java:81) > at > org.openejb.client.ProxyManager.newProxyInstance(ProxyManager.java:90) > at > org.openejb.client.EJBHomeHandler.createEJBHomeProxy(EJBHomeHandler.java:106) > at > org.openejb.client.JNDIContext.createEJBHomeProxy(JNDIContext.java:212) > at org.openejb.client.JNDIContext.lookup(JNDIContext.java:245) > at javax.naming.InitialContext.lookup(InitialContext.java:347) > at > org.acme.EchoTestStandaloneClient.testLookup(EchoTestStandaloneClient.java:87) > at > org.acme.EchoTestStandaloneClient.main(EchoTestStandaloneClient.java:76) > Caused by: java.lang.reflect.InvocationTargetException > at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:324) > at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384) > at > net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219) > ... 11 more > Caused by: java.lang.OutOfMemoryError > If I try this on JDK 1.5.0_05, it is worse as the JVM becomes unresponsive > and uses a lot of CPU and I have to kill the JVM: > C:\OpenSourceJava\geronimo\trunk\sandbox\echoTestStandaloneClient>java -jar > target\echoTestStandaloneClient-0.1-SNAPSHOT.jar > After 0 lookups: delta: 1,863,336, free: 1,863,336, used: 168,280, total: > 2,031,616, max: 66,650,112 > After 1000 lookups: delta: 482,408, free: 2,345,744, used: 2,684,144, total: > 5,029,888, max: 66,650,112 > After 2000 lookups: delta: 1,865,064, free: 4,210,808, used: 5,267,336, > total: 9,478,144, max: 66,650,112 > After 3000 lookups: delta: 2,116,488, free: 6,327,296, used: 7,967,744, > total: 14,295,040, max: 66,650,112 > After 4000 lookups: delta: 2,007,008, free: 8,334,304, used: 10,499,104, > total: 18,833,408, max: 66,650,112 > After 5000 lookups: delta: 2,094,096, free: 10,428,400, used: 13,164,560, > total: 23,592,960, max: 66,650,112 > Lookups performed: 5099 -- 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 - For more information on JIRA, see: http://www.atlassian.com/software/jira
