test/jdk/jdk/jfr/event/gc/collection/TestG1ParallelPhases.java
author tschatzl
Tue, 12 Nov 2019 16:28:26 +0100
changeset 59035 404560ee1088
parent 58910 f61eea1869e4
permissions -rw-r--r--
8233792: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found (2) Reviewed-by: lkorinth, kbarrett
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     1
/*
53536
482109fae02b 8213229: Investigate treating StringTable as weak in young collections
tschatzl
parents: 51877
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     4
 *
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    10
 *
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    15
 * accompanied this code).
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    16
 *
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    20
 *
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    23
 * questions.
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    24
 */
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    25
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    26
package jdk.jfr.event.gc.collection;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    27
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    28
import static java.lang.System.gc;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    29
import static java.lang.Thread.sleep;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    30
import static java.util.Set.of;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    31
import static java.util.stream.Collectors.joining;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    32
import static java.util.stream.Collectors.toList;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    33
import static java.util.stream.Collectors.toSet;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    34
import static java.util.stream.IntStream.range;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    35
import static jdk.jfr.event.gc.collection.Provoker.provokeMixedGC;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    36
import static jdk.test.lib.Asserts.assertEquals;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    37
import static jdk.test.lib.Asserts.assertTrue;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    38
import static jdk.test.lib.jfr.Events.fromRecording;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    39
import static sun.hotspot.WhiteBox.getWhiteBox;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    40
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    41
import java.io.IOException;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    42
import java.lang.ref.WeakReference;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    43
import java.math.BigDecimal;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    44
import java.util.ArrayList;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    45
import java.util.Collection;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    46
import java.util.List;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    47
import java.util.Set;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    48
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    49
import jdk.jfr.Recording;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    50
import jdk.test.lib.Asserts;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    51
import jdk.test.lib.jfr.EventNames;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    52
import sun.hotspot.WhiteBox;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    53
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    54
/**
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    55
 * @test
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    56
 * @key jfr
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    57
 * @requires vm.hasJFR
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    58
 * @requires vm.gc == "G1" | vm.gc == null
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    59
 * @library /test/lib /test/jdk
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    60
 * @build sun.hotspot.WhiteBox
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    61
 * @run main ClassFileInstaller sun.hotspot.WhiteBox
58910
f61eea1869e4 8232951: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found
tschatzl
parents: 58777
diff changeset
    62
 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+AlwaysTenure
f61eea1869e4 8232951: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found
tschatzl
parents: 58777
diff changeset
    63
 *      -Xms20M -Xmx20M -Xlog:gc=debug,gc+heap*=debug,gc+ergo*=debug,gc+start=debug
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    64
 *      -XX:G1MixedGCLiveThresholdPercent=100 -XX:G1HeapWastePercent=0 -XX:G1HeapRegionSize=1m
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    65
 *      -XX:+UseG1GC -XX:+UseStringDeduplication
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    66
 *      -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    67
 *      jdk.jfr.event.gc.collection.TestG1ParallelPhases
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    68
 */
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    69
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    70
public class TestG1ParallelPhases {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    71
    public static List<WeakReference<byte[]>> weakRefs;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    72
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    73
    public static void main(String[] args) throws IOException {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    74
        Recording recording = new Recording();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    75
        recording.enable(EventNames.GCPhaseParallel);
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    76
        recording.start();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    77
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    78
        // create more weak garbage than can fit in this heap (-Xmx20m), will force collection of weak references
58910
f61eea1869e4 8232951: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found
tschatzl
parents: 58777
diff changeset
    79
        weakRefs = range(1, 30)
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    80
            .mapToObj(n -> new WeakReference<>(new byte[1_000_000]))
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    81
            .collect(toList()); // force evaluation of lazy stream (all weak refs must be created)
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    82
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    83
        final var MEG = 1024 * 1024;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    84
        provokeMixedGC(1 * MEG);
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    85
        recording.stop();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    86
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    87
        Set<String> usedPhases = fromRecording(recording).stream()
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    88
            .map(e -> e.getValue("name").toString())
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    89
            .collect(toSet());
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    90
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    91
        Set<String> allPhases = of(
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    92
            "ExtRootScan",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    93
            "ThreadRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    94
            "UniverseRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    95
            "JNIRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    96
            "ObjectSynchronizerRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    97
            "ManagementRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    98
            "SystemDictionaryRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
    99
            "CLDGRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   100
            "JVMTIRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   101
            "CMRefRoots",
55723
95706898c3ea 8227089: Add timing information for merging humongous remembered sets
tschatzl
parents: 55510
diff changeset
   102
            "MergeER",
55510
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   103
            "MergeHCC",
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   104
            "MergeRS",
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   105
            "MergeLB",
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   106
            "ScanHR",
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   107
            "CodeRoots",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   108
            "ObjCopy",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   109
            "Termination",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   110
            "StringDedupQueueFixup",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   111
            "StringDedupTableFixup",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   112
            "RedirtyCards",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   113
            "NonYoungFreeCSet",
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   114
            "YoungFreeCSet"
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   115
        );
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   116
55510
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   117
        // Some GC phases may or may not occur depending on environment. Filter them out
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   118
        // since we can not reliably guarantee that they occur (or not).
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   119
        Set<String> optPhases = of(
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   120
            "OptScanHR",
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   121
            "OptMergeRS",
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   122
            "OptCodeRoots",
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   123
            "OptObjCopy"
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   124
        );
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   125
        usedPhases.removeAll(optPhases);
3e31a8beaae4 8213108: Improve work distribution during remembered set scan
tschatzl
parents: 54715
diff changeset
   126
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   127
        assertTrue(usedPhases.equals(allPhases), "Compare events expected and received"
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   128
            + ", Not found phases: " + allPhases.stream().filter(p -> !usedPhases.contains(p)).collect(joining(", "))
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   129
            + ", Not expected phases: " + usedPhases.stream().filter(p -> !allPhases.contains(p)).collect(joining(", ")));
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   130
    }
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   131
}
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   132
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   133
/**
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   134
 * Utility class to guarantee a mixed GC. The class allocates several arrays and
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   135
 * promotes them to the oldgen. After that it tries to provoke mixed GC by
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   136
 * allocating new objects.
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   137
 */
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   138
class Provoker {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   139
    private static void allocateOldObjects(
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   140
            List<byte[]> liveOldObjects,
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   141
            int g1HeapRegionSize,
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   142
            int arraySize) {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   143
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   144
        var toUnreachable = new ArrayList<byte[]>();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   145
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   146
        // Allocates buffer and promotes it to the old gen. Mix live and dead old objects.
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   147
        // allocate about two regions of old memory. At least one full old region will guarantee
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   148
        // mixed collection in the future
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   149
        range(0, g1HeapRegionSize/arraySize).forEach(n -> {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   150
            liveOldObjects.add(new byte[arraySize]);
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   151
            toUnreachable.add(new byte[arraySize]);
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   152
        });
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   153
58910
f61eea1869e4 8232951: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found
tschatzl
parents: 58777
diff changeset
   154
        // Do one young collection, AlwaysTenure will force promotion.
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   155
        getWhiteBox().youngGC();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   156
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   157
        // Check it is promoted & keep alive
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   158
        Asserts.assertTrue(getWhiteBox().isObjectInOldGen(liveOldObjects), "List of the objects is suppose to be in OldGen");
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   159
        Asserts.assertTrue(getWhiteBox().isObjectInOldGen(toUnreachable), "List of the objects is suppose to be in OldGen");
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   160
    }
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   161
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   162
    private static void waitTillCMCFinished(int sleepTime) {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   163
        while (getWhiteBox().g1InConcurrentMark()) {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   164
              try {sleep(sleepTime);} catch (Exception e) {}
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   165
        }
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   166
    }
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   167
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   168
    /**
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   169
    * The necessary condition for guaranteed mixed GC is running in VM with the following flags:
58910
f61eea1869e4 8232951: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found
tschatzl
parents: 58777
diff changeset
   170
    * -XX:+UnlockExperimentalVMOptions -XX:+AlwaysTenure -Xms{HEAP_SIZE}M
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   171
    * -Xmx{HEAP_SIZE}M -XX:G1MixedGCLiveThresholdPercent=100 -XX:G1HeapWastePercent=0
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   172
    * -XX:G1HeapRegionSize={REGION_SIZE}m
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   173
    *
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   174
    * @param g1HeapRegionSize The size of your regions in bytes
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   175
    */
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   176
    public static void provokeMixedGC(int g1HeapRegionSize) {
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   177
        final var arraySize = 20_000;
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   178
        var liveOldObjects = new ArrayList<byte[]>();
59035
404560ee1088 8233792: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found (2)
tschatzl
parents: 58910
diff changeset
   179
404560ee1088 8233792: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found (2)
tschatzl
parents: 58910
diff changeset
   180
        // Make sure the heap is in a known state.
404560ee1088 8233792: TestG1ParallelPhases.java fails with phase NonYoungFreeCSet not found (2)
tschatzl
parents: 58910
diff changeset
   181
        getWhiteBox().fullGC();
51877
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   182
        allocateOldObjects(liveOldObjects, g1HeapRegionSize, arraySize);
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   183
        waitTillCMCFinished(10);
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   184
        getWhiteBox().g1StartConcMarkCycle();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   185
        waitTillCMCFinished(10);
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   186
        getWhiteBox().youngGC();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   187
        getWhiteBox().youngGC();
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   188
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   189
        // check that liveOldObjects still alive
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   190
        assertTrue(getWhiteBox().isObjectInOldGen(liveOldObjects), "List of the objects is suppose to be in OldGen");
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   191
    }
5f931e3e7a63 8196341: Add JFR events for parallel phases of G1
lkorinth
parents:
diff changeset
   192
}