harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leo Li" <liyilei1...@gmail.com>
Subject Re: [classlib][testcase] should weakreference be queued in runFinalization()?
Date Sun, 15 Apr 2007 08:29:40 GMT
Hi, Xiao-Feng:
     You are right. Java does not assure the postmortem events, not like
the deconstructor in C#. :)


On 4/13/07, Xiao-Feng Li <xiaofeng.li@gmail.com> wrote:
>
> On 4/13/07, Leo Li <liyilei1979@gmail.com> 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 <xiaofeng.li@gmail.com> wrote:
> > >
> > > On 4/13/07, Oliver Deakin <oliver.deakin@googlemail.com> 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
> > > >
> > > >
> > >
> > >
>



-- 
Leo Li
China Software Development Lab, IBM

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message