Return-Path: Delivered-To: apmail-harmony-dev-archive@www.apache.org Received: (qmail 39998 invoked from network); 14 Apr 2007 02:07:20 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 14 Apr 2007 02:07:20 -0000 Received: (qmail 86399 invoked by uid 500); 14 Apr 2007 02:07:24 -0000 Delivered-To: apmail-harmony-dev-archive@harmony.apache.org Received: (qmail 86362 invoked by uid 500); 14 Apr 2007 02:07:24 -0000 Mailing-List: contact dev-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list dev@harmony.apache.org Received: (qmail 86352 invoked by uid 99); 14 Apr 2007 02:07:24 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 13 Apr 2007 19:07:24 -0700 X-ASF-Spam-Status: No, hits=0.3 required=10.0 tests=MAILTO_TO_SPAM_ADDR,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: domain of xiaofeng.li@gmail.com designates 66.249.82.237 as permitted sender) Received: from [66.249.82.237] (HELO wx-out-0506.google.com) (66.249.82.237) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 13 Apr 2007 19:07:18 -0700 Received: by wx-out-0506.google.com with SMTP id i26so1069525wxd for ; Fri, 13 Apr 2007 19:06:57 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=asbSHGAx75exm9oaVpvwuJW27dIeqMxI7UZmd6dtbj7hRJzE1YnBic8BwEHNfmAdrSQfb1q86WxcypDpVn+viyTe/DWx1YNynIG/YRe+cH1pbp8jSGGcNtVK+vw62JeVcmd4OkG5IeZVWYyfmd9iPqop+mfmJCgj7VSI/3dg9GY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=SkBbk8fvBEJWgSbee0+rwk2qbrziVGCDC9H6OiuBbf24VrA3/sNgCP5S6eKs2xjM+SYaDoxBhaALftaNHizeY/68zEywilj1hLYw0rLCSovhq0lux2RkQJeWOIhtk2g3g393EGhYenItDRPFok0j3ysa08nDhTDDM5QHQpEHuU4= Received: by 10.90.118.8 with SMTP id q8mr85690agc.1176516417246; Fri, 13 Apr 2007 19:06:57 -0700 (PDT) Received: by 10.90.113.11 with HTTP; Fri, 13 Apr 2007 19:06:57 -0700 (PDT) Message-ID: <9623c9a50704131906w46c3d478r1bc9c962fdd79119@mail.gmail.com> Date: Sat, 14 Apr 2007 10:06:57 +0800 From: "Xiao-Feng Li" To: dev@harmony.apache.org Subject: Re: [classlib][testcase] should weakreference be queued in runFinalization()? In-Reply-To: <461FA773.10502@googlemail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <9623c9a50704121937w56c8f045t35fba03ac80f2d59@mail.gmail.com> <461F4428.8000109@googlemail.com> <9623c9a50704130204x207134ffrf81f56eac5f24eee@mail.gmail.com> <9623c9a50704130641m15575605n9096135ec7ec70ae@mail.gmail.com> <461FA773.10502@googlemail.com> X-Virus-Checked: Checked by ClamAV on apache.org On 4/13/07, Oliver Deakin wrote: > The other way I can think of to force a gc, and thus hopefully have the > weak reference cleared, is to do the following: > - restrict heap size to a very small amount when launching the VM. > - create WeakReference object and its referent. > - fill heap with dummy objects until OutOfMemory is achieved (at which > point you should be able to assume that at least one gc has occured, as > it is unlikely that the memory manager will not have gc'ed at all before > giving OOM). > - free up dummy objects and check WeakReference. > > IMO it's a pretty ugly way to test this, but perhaps it's the only way > to make sure that a gc really does occur. Yes, this can sort of ensure a GC. But it still doesn't guarantee the weakrefs are enqueued. Since weakrefs are usually enqueued in a seperate thread after GC identifies their referents are unreachable strongly, we cannot have a time expectation on how fast this thread can finish all the enqueuing operations. Maybe the test can loop over to check the queue wishing to get the weakref from it within certain period, say 1 second. The loop body should have a thread yield after every check to give processor time to the enqueuing thread. Thanks, xiaofeng > Regards, > Oliver > > Xiao-Feng Li wrote: > > On 4/13/07, Leo Li wrote: > >> I think it assured that the reference is eventually enqueued. So is it > >> possible to test it before VM shutdown by means of JVMTI? (But I am > >> not sure > >> whether it is too late to get VM work properly.) > > > > It probably can't be tested just like you never know an object is > > reclaimed. > > > > Thanks, > > xiaofeng > > > >> On 4/13/07, Xiao-Feng Li wrote: > >> > > >> > On 4/13/07, Oliver Deakin wrote: > >> > > The 5.0 spec for runFinalization() says: > >> > > > >> > > "Calling this method suggests that the Java Virtual Machine expend > >> > > effort toward running the finalize methods of objects that have been > >> > > found to be discarded but whose finalize methods have not yet > >> been run." > >> > > > >> > > and for gc(): > >> > > > >> > > "Calling the gc method suggests that the Java Virtual Machine expend > >> > > effort toward recycling unused objects" > >> > > > >> > > The key word in both those specs is /suggests/. There is *no* > >> guarantee > >> > > that any finalizers are run or that a gc actually occurs when these > >> > > calls are made - it is only a hint to the VM. > >> > > > >> > > If a test is expecting these calls to definitely gc and run > >> finalizers, > >> > > then IMO the test is in error. > >> > > >> > Yes, I have the seem opinion. And both gc() and runFinalization() > >> > actually say nothing about weakreference. Don't know why they are used > >> > to test References. > >> > > >> > Thanks, > >> > xiaofeng > >> > > >> > > Regards, > >> > > Oliver > >> > > > >> > > > >> > > Xiao-Feng Li wrote: > >> > > > In classlib tests "gc.PhantomReferenceTest" and > >> > > > "tests.api.java.lang.ref.ReferenceTest", they expect weakreference > >> > > > objects be queued after System.runFinalization(). Is this > >> correct? In > >> > > > my understanding of the spec, there is no requirement on this > >> > > > behavior. > >> > > > > >> > > > The tests do like this: > >> > > > > >> > > > ========================= > >> > > > //wr is the weakreference, whose referent is only weakly > >> reachable. > >> > > > //rq is the reference queue > >> > > > > >> > > > System.gc(); > >> > > > System.runFinalization(); > >> > > > > >> > > > ref = rq.poll(); > >> > > > > >> > > > assertTrue("Unexpected ref2", ref == wr); > >> > > > assertNotNull("Object not garbage collected.", ref); > >> > > > assertNull("Object could not be reclaimed.", ref.get()); > >> > > > ========================= > >> > > > > >> > > > After runFinalization(), it requires the queue has the > >> weakreference. > >> > > > Actually it has requirement on System.gc() as well, requiring > >> it to > >> > > > identify the weakly reachable object accurately. > >> > > > > >> > > > In my understanding of the spec, this kind of tests are wrong. It > >> > > > forces the GC to do something not required by spec. > >> > > > > >> > > > How do you think? > >> > > > > >> > > > Thanks, > >> > > > xiaofeng > >> > > > > >> > > > >> > > -- > >> > > Oliver Deakin > >> > > Unless stated otherwise above: > >> > > IBM United Kingdom Limited - Registered in England and Wales with > >> number > >> > 741598. > >> > > Registered office: PO Box 41, North Harbour, Portsmouth, > >> Hampshire PO6 > >> > 3AU > >> > > > >> > > > >> > > >> > > > > > -- > Oliver Deakin > Unless stated otherwise above: > IBM United Kingdom Limited - Registered in England and Wales with number 741598. > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU > > -- http://xiao-feng.blogspot.com