test/hotspot/jtreg/gc/stress/gclocker/TestExcessGCLockerCollections.java
author kbarrett
Wed, 31 Jul 2019 14:28:51 -0400
changeset 57607 8d3886985964
permissions -rw-r--r--
8048556: Unnecessary GCLocker-initiated young GCs Summary: Fixed recognition of unnecessary GCLocker collections. Reviewed-by: pliden, tschatzl
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57607
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     1
/*
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     4
 *
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     7
 * published by the Free Software Foundation.
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     8
 *
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    13
 * accompanied this code).
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    14
 *
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    18
 *
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    21
 * questions.
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    22
 */
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    23
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    24
package gc.stress.gclocker;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    25
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    26
/*
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    27
 * @test TestExcessGCLockerCollections
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    28
 * @key gc
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    29
 * @bug 8048556
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    30
 * @summary Check for GC Locker initiated GCs that immediately follow another
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    31
 * GC and so have very little needing to be collected.
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    32
 * @requires vm.gc != "Z"
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    33
 * @requires vm.gc != "Epsilon"
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    34
 * @requires vm.gc != "Shenandoah"
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    35
 * @library /test/lib
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    36
 * @modules java.base/jdk.internal.misc
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    37
 * @run driver/timeout=1000 gc.stress.gclocker.TestExcessGCLockerCollections 300 4 2
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    38
 */
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    39
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    40
import java.util.HashMap;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    41
import java.util.Map;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    42
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    43
import java.util.zip.Deflater;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    44
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    45
import java.util.ArrayList;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    46
import java.util.Arrays;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    47
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    48
import jdk.test.lib.Asserts;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    49
import jdk.test.lib.process.ProcessTools;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    50
import jdk.test.lib.process.OutputAnalyzer;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    51
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    52
class TestExcessGCLockerCollectionsAux {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    53
    static private final int LARGE_MAP_SIZE = 64 * 1024;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    54
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    55
    static private final int MAP_ARRAY_LENGTH = 4;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    56
    static private final int MAP_SIZE = 1024;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    57
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    58
    static private final int BYTE_ARRAY_LENGTH = 128 * 1024;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    59
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    60
    static private void println(String str) { System.out.println(str); }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    61
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    62
    static private volatile boolean keepRunning = true;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    63
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    64
    static Map<Integer,String> populateMap(int size) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    65
        Map<Integer,String> map = new HashMap<Integer,String>();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    66
        for (int i = 0; i < size; i += 1) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    67
            Integer keyInt = Integer.valueOf(i);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    68
            String valStr = "value is [" + i + "]";
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    69
            map.put(keyInt,valStr);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    70
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    71
        return map;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    72
    }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    73
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    74
    static private class AllocatingWorker implements Runnable {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    75
        private final Object[] array = new Object[MAP_ARRAY_LENGTH];
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    76
        private int arrayIndex = 0;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    77
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    78
        private void doStep() {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    79
            Map<Integer,String> map = populateMap(MAP_SIZE);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    80
            array[arrayIndex] = map;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    81
            arrayIndex = (arrayIndex + 1) % MAP_ARRAY_LENGTH;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    82
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    83
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    84
        public void run() {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    85
            while (keepRunning) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    86
                doStep();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    87
            }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    88
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    89
    }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    90
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    91
    static private class JNICriticalWorker implements Runnable {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    92
        private int count;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    93
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    94
        private void doStep() {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    95
            byte[] inputArray = new byte[BYTE_ARRAY_LENGTH];
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    96
            for (int i = 0; i < inputArray.length; i += 1) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    97
                inputArray[i] = (byte) (count + i);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    98
            }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
    99
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   100
            Deflater deflater = new Deflater();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   101
            deflater.setInput(inputArray);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   102
            deflater.finish();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   103
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   104
            byte[] outputArray = new byte[2 * inputArray.length];
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   105
            deflater.deflate(outputArray);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   106
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   107
            count += 1;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   108
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   109
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   110
        public void run() {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   111
            while (keepRunning) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   112
                doStep();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   113
            }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   114
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   115
    }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   116
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   117
    static public Map<Integer,String> largeMap;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   118
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   119
    static public void main(String args[]) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   120
        long durationSec = Long.parseLong(args[0]);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   121
        int allocThreadNum = Integer.parseInt(args[1]);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   122
        int jniCriticalThreadNum = Integer.parseInt(args[2]);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   123
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   124
        println("Running for " + durationSec + " secs");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   125
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   126
        largeMap = populateMap(LARGE_MAP_SIZE);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   127
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   128
        println("Starting " + allocThreadNum + " allocating threads");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   129
        for (int i = 0; i < allocThreadNum; i += 1) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   130
            new Thread(new AllocatingWorker()).start();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   131
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   132
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   133
        println("Starting " + jniCriticalThreadNum + " jni critical threads");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   134
        for (int i = 0; i < jniCriticalThreadNum; i += 1) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   135
            new Thread(new JNICriticalWorker()).start();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   136
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   137
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   138
        long durationMS = (long) (1000 * durationSec);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   139
        long start = System.currentTimeMillis();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   140
        long now = start;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   141
        long soFar = now - start;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   142
        while (soFar < durationMS) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   143
            try {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   144
                Thread.sleep(durationMS - soFar);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   145
            } catch (Exception e) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   146
            }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   147
            now = System.currentTimeMillis();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   148
            soFar = now - start;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   149
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   150
        println("Done.");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   151
        keepRunning = false;
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   152
    }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   153
}
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   154
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   155
public class TestExcessGCLockerCollections {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   156
    private static final String locker =
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   157
        "\\[gc\\s*\\] .* \\(GCLocker Initiated GC\\)";
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   158
    private static final String ANY_LOCKER = locker + " [1-9][0-9]*M";
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   159
    private static final String BAD_LOCKER = locker + " [1-9][0-9]?M";
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   160
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   161
    private static final String[] COMMON_OPTIONS = new String[] {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   162
        "-Xmx1G", "-Xms1G", "-Xmn256M", "-Xlog:gc" };
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   163
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   164
    public static void main(String args[]) throws Exception {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   165
        if (args.length < 3) {
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   166
            System.out.println("usage: TestExcessGCLockerCollectionsAux" +
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   167
                               " <duration sec> <alloc threads>" +
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   168
                               " <jni critical threads>");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   169
            throw new RuntimeException("Invalid arguments");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   170
        }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   171
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   172
        ArrayList<String> finalArgs = new ArrayList<String>();
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   173
        finalArgs.addAll(Arrays.asList(COMMON_OPTIONS));
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   174
        finalArgs.add(TestExcessGCLockerCollectionsAux.class.getName());
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   175
        finalArgs.addAll(Arrays.asList(args));
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   176
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   177
        // GC and other options obtained from test framework.
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   178
        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   179
            true, finalArgs.toArray(new String[0]));
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   180
        OutputAnalyzer output = new OutputAnalyzer(pb.start());
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   181
        output.shouldHaveExitValue(0);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   182
        //System.out.println("------------- begin stdout ----------------");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   183
        //System.out.println(output.getStdout());
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   184
        //System.out.println("------------- end stdout ----------------");
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   185
        output.stdoutShouldMatch(ANY_LOCKER);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   186
        output.stdoutShouldNotMatch(BAD_LOCKER);
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   187
    }
8d3886985964 8048556: Unnecessary GCLocker-initiated young GCs
kbarrett
parents:
diff changeset
   188
}