[8u60] RFR (XS): 8076325: java hangs with -XX:ParallelGCThreads=0 -XX:+ExplicitGCInvokesConcurrent options
Sangheon Kim
sangheon.kim at oracle.com
Thu Apr 9 16:50:25 UTC 2015
Hi Stefan,
Thank you for the review.
On 04/09/2015 01:02 AM, Stefan Karlsson wrote:
> Hi Sangheon,
>
> On 2015-04-09 01:07, Sangheon Kim wrote:
>> Hi all,
>>
>> I am sending this RFR again to open mailing alias.
>>
>> Please review this change to remove hang with "-XX:ParallelGCThreads=0".
>>
>> Java hangs with "-XX:+UseG1GC -XX:ParallelGCThreads=0
>> -XX:+ExplicitGCInvokesConcurrent" combinations of options. If use
>> -XX:-ExplicitGCInvokesConcurrent or -XX:ParallelGCThreads=1 then all
>> works fine.
>> To check this issue compile and run below application[1] using this
>> command "java -XX:+UseG1GC -XX:ParallelGCThreads=0
>> -XX:+ExplicitGCInvokesConcurrent TestApp"
>>
>> This is a regression resulted by recent backport from jdk9. But as
>> jdk9 disallows "ParallelGCThreads=0", this test is okay with jdk9.
>> In addition, backport of disallowing "ParallGCThreads=0" is not an
>> option as it will change the behavior.
>>
>> The hang is happening at
>> "G1RootProcessor::wait_until_all_strong_classes_discovered()" since
>> we can't escape from while loop of "while
>> ((uint)_n_workers_discovered_strong_classes != n_workers)".
>>
>> This change makes to run a logic of
>> "G1RootProcessor::wait_until_all_strong_classes_discovered()" and
>> "G1RootProcessor::worker_has_discovered_all_strong_classes()", if gc
>> workers are larger than 0.
>> And this change is same as the original code before change of backport.
>>
>> I will need a sponsor for this change.
>>
>> CR:
>> https://bugs.openjdk.java.net/browse/JDK-8076325
>>
>> Webrev:
>> http://cr.openjdk.java.net/~sangheki/8076325/webrev.00/
>
> The patch looks good. Could you turn your test into a jtreg test?
This test is already included in jtreg.
I copied this test from the JBS issue attachment to share people who
can't access the issue.
Thanks,
Sangheon
>
> Thanks,
> StefanK
>
>>
>> Test:
>> JPRT
>>
>> [1]: TestApp.java:
>> import java.util.*;
>>
>> public class Test8000311 {
>> public static void main(String args[]) {
>> for(int i = 0; i<100; i++) {
>> byte[] garbage = new byte[1000];
>> System.gc();
>> System.out.println(i);
>> }
>> System.out.println("PASS");
>> }
>> }
>>
>> Thanks,
>> Sangheon
>
More information about the hotspot-gc-dev
mailing list