Return-Path: Delivered-To: apmail-commons-dev-archive@www.apache.org Received: (qmail 5586 invoked from network); 7 Aug 2007 01:22:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 7 Aug 2007 01:22:02 -0000 Received: (qmail 89724 invoked by uid 500); 7 Aug 2007 01:21:59 -0000 Delivered-To: apmail-commons-dev-archive@commons.apache.org Received: (qmail 89641 invoked by uid 500); 7 Aug 2007 01:21:59 -0000 Mailing-List: contact dev-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list dev@commons.apache.org Received: (qmail 89632 invoked by uid 99); 7 Aug 2007 01:21:59 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Aug 2007 18:21:59 -0700 X-ASF-Spam-Status: No, hits=-4.0 required=10.0 tests=RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of csuconic@redhat.com designates 66.187.233.31 as permitted sender) Received: from [66.187.233.31] (HELO mx1.redhat.com) (66.187.233.31) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Aug 2007 01:21:43 +0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.1/8.13.1) with ESMTP id l771LSkl023006; Mon, 6 Aug 2007 21:21:28 -0400 Received: from pobox-2.corp.redhat.com (pobox-2.corp.redhat.com [10.11.255.15]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l771LSPw027635; Mon, 6 Aug 2007 21:21:28 -0400 Received: from [10.11.14.3] (vpn-14-3.rdu.redhat.com [10.11.14.3]) by pobox-2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l771LRkG001931; Mon, 6 Aug 2007 21:21:27 -0400 Message-ID: <46B7C917.9020001@redhat.com> Date: Mon, 06 Aug 2007 20:21:27 -0500 From: Clebert Suconic User-Agent: Thunderbird 1.5.0.12 (X11/20070604) MIME-Version: 1.0 To: Niall Pemberton CC: Commons Developers List Subject: Re: Circular Reference on WeakHashMap References: <46B79C8B.90303@redhat.com> <55afdc850708061751v35bd96b5xb2868907f18fcd09@mail.gmail.com> In-Reply-To: <55afdc850708061751v35bd96b5xb2868907f18fcd09@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org >> if you don't believe me, do some >> testing with simple stuff before discussing this and come back to me >> only after that) > > OK I will. What I meant about with "no discussion" is.. usually people tend to disagree a circular REference on a WeakHashMap, SomeObject> would generate redeployment leaks. Of course we can discuss this, if you just want to understand the issue > Unfortunately I'm away on holiday soon for 3 weeks (12th August to 2nd > September) - so unless someone else picks this up - ii don't have time > to look at this until after that. Do you mind if we move the > discussion over to that Jira ticket I opened though? Are you coming back before the final release? I'm flooded now with other tasks.. I can't do this myself.. but I would lend a hand to someone (or you when you're back) doing it through this forum if you like. Niall Pemberton wrote: > On 8/6/07, Clebert Suconic wrote: >> I have been investigating WeakHashMaps on BeanUtils 1.8 as part of a >> investigation on this: >> >> http://jira.jboss.com/jira/browse/JBAS-2299 > > Thanks for getting back to us so quickly. > >> (Which is not actually an issue with JBAS, but an issue when using >> BeanUtils as part of the classPath). >> >> There is a circular reference on the WeakHashMap, The WeakHashMap will >> have the ClassLoader as the key, and it will have a reference back to >> the Key from one of the Reflection objects. This doesn't work! (Please.. >> no discussions about this point.. if you don't believe me, do some >> testing with simple stuff before discussing this and come back to me >> only after that) > > OK I will. > >> org.jboss.web.tomcat.service.WebAppClassLoader@16334564 >> !--- sun.reflect.DelegatingClassLoader@27651708 >> !--- !--- class sun.reflect.GeneratedConstructorAccessor38 >> !--- !--- !--- [Ljava.lang.Object;@10800875 >> !--- !--- !--- !--- java.util.Vector@838806 >> !--- !--- !--- !--- !--- sun.reflect.DelegatingClassLoader@27651708 >> !--- !--- !--- !--- !--- !--- class >> sun.reflect.GeneratedConstructorAccessor38 >> !--- !--- !--- !--- !--- !--- !--- class java.lang.Class >> !--- !--- !--- !--- !--- !--- !--- !--- >> org.apache.commons.beanutils.converters.ClassConverter@22616909 >> !--- !--- !--- !--- !--- !--- !--- !--- !--- >> org.apache.commons.beanutils.converters.ArrayConverter@18888821 >> !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- >> org.apache.commons.beanutils.converters.ConverterFacade@13619754 >> !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- >> java.util.HashMap$Entry@32434103 >> !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- >> [Ljava.util.HashMap$Entry;@28236766 >> !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- >> java.util.HashMap@14997495 >> !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- >> org.apache.commons.beanutils.ConvertUtilsBean@2016953 >> !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- !--- >> !--- org.apache.commons.beanutils.BeanUtilsBean@30487951 >> !---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!--- >> FieldReference private java.lang.Object >> java.util.WeakHashMap$Entry.value=java.util.WeakHashMap$Entry@23775534 >> Detail > > I'm not familiar with JBoss's JVMTIInterface or its output - and it > seems to be somewhat messed up in posting here - so I've (hopefully) > cleaned it up and re-posted in a Jira ticket I've opened for this > here: > > https://issues.apache.org/jira/browse/BEANUTILS-291 > >> I don't know if I'm preaching to the choir, but just in case this is new >> information to someone... you should aways keep Reflection referenced as >> SoftReferences (if you really have to). Reflection is aways a new object >> so a WeakReference is too weak. > > Preach away - I have no great knowledge of this stuff. > >> On JBossSerialization I have solved this using an interesting way. I >> called it PersistentReference. I'm using SoftReferences, and keeping the >> information to recreate it case the SoftReference is cleared: >> >> http://fisheye.jboss.org/browse/JBoss/jboss-serialization/src/org/jboss/serial/references/PersistentReference.java?r=1.3 >> >> >> And also... you guys should write a testcase to validate if the Caching >> is being cleared. (I don't know if you have one). >> >> http://anonsvn.jboss.org/repos/jbossserialization/trunk/tests/org/jboss/serial/memory/MemoryLeakTestCase.java >> >> You don't need to use the jboss-profiler API for this.. just create a >> WeakReference to a new ClassLoader, and validate if it was released at >> the end after some exercizing some code on this caching. You will >> probably need to fill your memory almost to 100% on the test as >> SoftReference are only gone when the memory is low. > > Unfortunately I'm away on holiday soon for 3 weeks (12th August to 2nd > September) - so unless someone else picks this up - ii don't have time > to look at this until after that. Do you mind if we move the > discussion over to that Jira ticket I opened though? > > Niall > >> Clebert Suconic --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org For additional commands, e-mail: dev-help@commons.apache.org