[8u60] RFR (XS): 8076325: java hangs with -XX:ParallelGCThreads=0 -XX:+ExplicitGCInvokesConcurrent options
Sangheon Kim
sangheon.kim at oracle.com
Wed Apr 8 23:07:49 UTC 2015
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/
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