RFR (XXS): 6771058: TEST_BUG: java/lang/ref/Basic.java may fail with -server -Xcomp
David Holmes
david.holmes at oracle.com
Fri Oct 19 00:50:58 UTC 2012
Hi Chris,
On 19/10/2012 8:37 AM, Christian Thalinger wrote:
> On Oct 18, 2012, at 3:31 PM, Mandy Chung<mandy.chung at oracle.com> wrote:
>> Just curious - the test runs with a max of 10 GCs. You
>> reproduced this bug on a slower machine with fastdebug build.
>> If you increase the max number of GCs, I wonder how long
>> the test will take to complete/pass?
>
> Around 14 GCs (runtime with -Xcomp approximately 40 seconds on that particular machine).
>
>>
>> With your fix, how many GC does it take to complete?
>> I suspect it's one.
>
> Between 2 and 3 GCs.
I believe it takes two GC cycles to move a finalizable object into the
finalization queue.
>> I am guessing that the test might
>> want to test that the finalizers are being invoked during
>> GC and references are dequeued. I wonder if there is
>> another alternate fix instead of forcing the finalizers
>> to be run. Just a thought.
>
> The fix was not my idea. I just picked the bug and tried the suggested fix and it worked. The other suggested fix is to increase the sleep time (but I don't like that).
The key here is what the test is trying to exercise. From this comment:
/* Cause a dummy object to be finalized, since the finalizer thread
might retain a reference to the Basic instance after it's been
finalized (this happens with java_g) */
we can see there is some intended interaction with the (primary)
finalizer thread. By calling runFinalization() we're introducing the
secondary finalizer thread and performing synchronous finalization -
which may (or may not) negate the intended interaction with the primary
finalizer thread.
There have been recent changes to other tests that require finalization
to basically add explicit loops testing a variable that is set by the
finalizer eg:
while (!obj.finalized) {
System.gc();
Thread.sleep(100);
}
It may be that this could be added to the ClearFinalizerThread object?
Unfortunately it can sometimes be very easy to "fix" these tests in a
way that negates the purpose of the test.
David
> -- Chris
>
>>
>> Mandy
>>
>>
>> On 10/18/2012 2:43 PM, Christian Thalinger wrote:
>>> http://cr.openjdk.java.net/~twisti/6771058
>>>
>>> 6771058: TEST_BUG: java/lang/ref/Basic.java may fail with -server -Xcomp
>>> Reviewed-by:
>>>
>>> This test can fail if finalizer of Basic is not called for some
>>> reason. It happens in compiled mode if compilation is more slow than
>>> execution of the main loop.
>>>
>>> The fix is to call System.runFinalization() after System.gc() to
>>> ensure that finalizer is run.
>>>
>>> test/java/lang/ref/Basic.java
>>>
>
More information about the core-libs-dev
mailing list