[9] RFR (S): 8148940: java/lang/ref/FinalizeOverride.java can time out due to frequent safepointing
Zoltán Majó
zoltan.majo at oracle.com
Fri Feb 26 10:17:39 UTC 2016
Hi Aleksey,
thank you for the feedback!
On 02/25/2016 05:38 PM, Aleksey Shipilev wrote:
> On 02/25/2016 07:27 PM, Zoltán Majó wrote:
>> (1) The test spends an increased amount of time in the VM (e.g.,
>> because an ISC-enabled build can trigger up to 2X more compilations
>> than a non-ISC-enabled build);
> I am confused about this. I thought we bootstrap the concatenations once
> per concat site, and then we only "roll" with the linked in
> implementation.
You are right about that. Most "action" related to setting up
concatenations happens once (in the case of this test during the
execution of the first finalizer, i.e., FinalizeOverride$Base.finalize()).
> Is that one-shot action enough to get into the despair
> vortex in the test?
Yes, it is. In its original version, the test spends the largest part of
its execution time in FinalizeOverride$Base.finalize().
>
>> Possible solutions: Update the test to give more chance to the VM to
>> progress. I see two ways of doing that:
>> Solution #1: Reduce the freqency of triggering GCs
>> http://cr.openjdk.java.net/~zmajo/8148940/webrev.00/
> From the set of presented solutions, I like this solution better,
> because it breaks the Denial-of-Service setup. Other work after ISC --
> e.g. harder GCs -- can possibly trigger the same trouble, right?
I would expect "harder" GCs to trigger the same trouble. I would also
expect the same (or similar) to happen if a lambda expression were used
in the finalizer (instead of the string concatenation). But I did not do
any experiments to confirm/deny this.
>> Solution #2: Remove string operations from finalizers.
>> http://cr.openjdk.java.net/~zmajo/8148940/webrev.01/
>>
>> Solution #2 is faster, but it makes more difficult to monitor the
>> progress of the test than in the case of Solution #1.
> Solution #3: Compile the test with -XDstringConcat=inline to disable ISC
> for this test; jtreg allows this with @compile tag. Mention the vicious
> feedback cycle in comments.
I would not want to do this as ISC will be (already is) the default in
JDK 9 and we want to test that.
> Solution #4: Kick finalize() methods in classes to link concats
> preemptively, before entering System.gc+System.runFinalization loop.
Yes, that is also a viable solution. But it is a workaround similar to
Solution #1 that I've already tested/evaluated.
So, based on your feedback, I'd prefer to go with Solution #1:
http://cr.openjdk.java.net/~zmajo/8148940/webrev.00/
Thank you!
Best regards,
Zoltan
>
> -Aleksey
>
More information about the hotspot-compiler-dev
mailing list