During the review of JDK-7067973 in which the test was fixed to ensure the old gen is non-empty so that System.gc() will cause a GC notification that the test is counting on. However, the test hangs on windows jdk8-b117 when running with -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent (see log below).
The bug is filed to understand better the hotspot implementation of System.gc() with G1 and CMS with and without -XX:+ExplicitGCInvokesConcurrent. Thus determine if this is a test bug or a bug in the hotspot GC implementation.
It's unclear what the effect of -XX:+ExplicitGCInvokesConcurrent (the default is disabled).
Specially, there is a G1 old gen. Is this the same as:
garbage-first heap total 16384K, used 761K [0x05000000, 0x06000000, 0x15000000)
when should it send the GC notification?
With CMS the old understanding I have was that CMS does the background collection and so when System.gc returns, the collection is not prompt and thus the test should use -XX:+ExplicitGCInvokesConcurrent to get CMS to run in foreground. Does this still apply in CMS? G1?
------------------------------------------------
$ java -XX:+PrintGCDetails -Xmx2m -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent CollectionUsageThreshold
Collection usage threshold of G1 Old Gen set to 10
Calling System.gc()
[GC pause (System.gc()) (young) (initial-mark), 0.0014598 secs]
[Parallel Time: 1.1 ms, GC Workers: 4]
[GC Worker Start (ms): Min: 108.0, Avg: 108.0, Max: 108.0, Diff: 0.0]
[Ext Root Scanning (ms): Min: 0.1, Avg: 0.4, Max: 1.1, Diff: 1.0, Sum: 1.6]
[Code Root Marking (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0]
[Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Object Copy (ms): Min: 0.0, Avg: 0.5, Max: 0.8, Diff: 0.8, Sum: 2.1]
[Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.2, Diff: 0.2, Sum: 0.7]
[GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[GC Worker Total (ms): Min: 1.1, Avg: 1.1, Max: 1.1, Diff: 0.0, Sum: 4.4]
[GC Worker End (ms): Min: 109.1, Avg: 109.1, Max: 109.1, Diff: 0.0]
[Code Root Fixup: 0.0 ms]
[Code Root Migration: 0.0 ms]
[Clear CT: 0.0 ms]
[Other: 0.3 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 0.1 ms]
[Ref Enq: 0.0 ms]
[Free CSet: 0.0 ms]
[Eden: 1024.0K(1024.0K)->0.0B(1024.0K) Survivors: 0.0B->1024.0K Heap: 1013.0K(2048.0K)->771.1K(20
48.0K)]
[Times: user=0.00 sys=0.00, real=0.00 secs]
[GC concurrent-root-region-scan-start]
[GC concurrent-root-region-scan-end, 0.0006285 secs]
[GC concurrent-mark-start]
[GC concurrent-mark-end, 0.0001223 secs]
[GC remark [GC ref-proc, 0.0000957 secs], 0.0005657 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
[GC cleanup 791K->791K(2048K), 0.0002172 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
-----------------
Similar issue might happen -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent.
The bug is filed to understand better the hotspot implementation of System.gc() with G1 and CMS with and without -XX:+ExplicitGCInvokesConcurrent. Thus determine if this is a test bug or a bug in the hotspot GC implementation.
It's unclear what the effect of -XX:+ExplicitGCInvokesConcurrent (the default is disabled).
Specially, there is a G1 old gen. Is this the same as:
garbage-first heap total 16384K, used 761K [0x05000000, 0x06000000, 0x15000000)
when should it send the GC notification?
With CMS the old understanding I have was that CMS does the background collection and so when System.gc returns, the collection is not prompt and thus the test should use -XX:+ExplicitGCInvokesConcurrent to get CMS to run in foreground. Does this still apply in CMS? G1?
------------------------------------------------
$ java -XX:+PrintGCDetails -Xmx2m -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent CollectionUsageThreshold
Collection usage threshold of G1 Old Gen set to 10
Calling System.gc()
[GC pause (System.gc()) (young) (initial-mark), 0.0014598 secs]
[Parallel Time: 1.1 ms, GC Workers: 4]
[GC Worker Start (ms): Min: 108.0, Avg: 108.0, Max: 108.0, Diff: 0.0]
[Ext Root Scanning (ms): Min: 0.1, Avg: 0.4, Max: 1.1, Diff: 1.0, Sum: 1.6]
[Code Root Marking (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Update RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Processed Buffers: Min: 0, Avg: 0.0, Max: 0, Diff: 0, Sum: 0]
[Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Object Copy (ms): Min: 0.0, Avg: 0.5, Max: 0.8, Diff: 0.8, Sum: 2.1]
[Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.2, Diff: 0.2, Sum: 0.7]
[GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[GC Worker Total (ms): Min: 1.1, Avg: 1.1, Max: 1.1, Diff: 0.0, Sum: 4.4]
[GC Worker End (ms): Min: 109.1, Avg: 109.1, Max: 109.1, Diff: 0.0]
[Code Root Fixup: 0.0 ms]
[Code Root Migration: 0.0 ms]
[Clear CT: 0.0 ms]
[Other: 0.3 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 0.1 ms]
[Ref Enq: 0.0 ms]
[Free CSet: 0.0 ms]
[Eden: 1024.0K(1024.0K)->0.0B(1024.0K) Survivors: 0.0B->1024.0K Heap: 1013.0K(2048.0K)->771.1K(20
48.0K)]
[Times: user=0.00 sys=0.00, real=0.00 secs]
[GC concurrent-root-region-scan-start]
[GC concurrent-root-region-scan-end, 0.0006285 secs]
[GC concurrent-mark-start]
[GC concurrent-mark-end, 0.0001223 secs]
[GC remark [GC ref-proc, 0.0000957 secs], 0.0005657 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
[GC cleanup 791K->791K(2048K), 0.0002172 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
-----------------
Similar issue might happen -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent.
- relates to
-
JDK-8066122 CollectionUsageThreshold.java times out when run with -XX:+ExplicitGCInvokesConcurrent
-
- Resolved
-
-
JDK-7067973 test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java hanging intermittently
-
- Resolved
-
-
JDK-7173460 G1: java/lang/management/MemoryMXBean/CollectionUsageThreshold.java failes with G1
-
- Resolved
-