test/hotspot/jtreg/gc/shenandoah/TestObjItrWithHeapDump.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 55594 66a748c4f3ff
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55121
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     1
/*
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     2
 * Copyright (c) 2019, Red Hat, Inc. All rights reserved.
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     3
 *
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     4
 * This code is free software; you can redistribute it and/or modify it
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     5
 * under the terms of the GNU General Public License version 2 only, as
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     6
 * published by the Free Software Foundation.
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     7
 *
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     8
 * This code is distributed in the hope that it will be useful, but WITHOUT
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
     9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    10
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    11
 * version 2 for more details (a copy is included in the LICENSE file that
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    12
 * accompanied this code).
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    13
 *
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License version
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    15
 * 2 along with this work; if not, write to the Free Software Foundation,
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    16
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    17
 *
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    18
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    19
 * or visit www.oracle.com if you need additional information or have any
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    20
 * questions.
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    21
 *
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    22
 */
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    23
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    24
/*
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    25
 * @test TestObjIterWithHeapDump
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    26
 * @summary Test heap dump triggered heap object iteration
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    27
 * @key gc
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    28
 * @bug 8225014
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    29
 * @requires vm.gc.Shenandoah & !vm.graal.enabled
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    30
 * @library /test/lib
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    31
 * @run driver TestObjItrWithHeapDump
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    32
 */
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    33
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    34
import java.util.*;
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    35
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    36
import jdk.test.lib.process.ProcessTools;
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    37
import jdk.test.lib.process.OutputAnalyzer;
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    38
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    39
public class TestObjItrWithHeapDump {
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    40
    public static void testWith(String... args) throws Exception {
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    41
        String[] cmds = Arrays.copyOf(args, args.length + 2);
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    42
        cmds[args.length] = TestObjItrWithHeapDump.class.getName();
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    43
        cmds[args.length + 1] = "test";
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    44
        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(cmds);
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    45
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    46
        OutputAnalyzer output = new OutputAnalyzer(pb.start());
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    47
        output.shouldHaveExitValue(0);
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    48
        output.shouldContain("Class Histogram (before full gc)");
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    49
        output.shouldContain("Class Histogram (after full gc)");
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    50
    }
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    51
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    52
    public static void main(String[] args) throws Exception {
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    53
        if (args.length > 0 && args[0].equals("test")) {
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    54
            System.gc();
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    55
            System.exit(0);
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    56
        }
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    57
55587
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    58
        String[][][] modeHeuristics = new String[][][] {
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    59
             {{"normal"},    {"adaptive", "compact", "static", "aggressive"}},
55594
66a748c4f3ff 8227039: Shenandoah: Aggressive heuristics for Traversal mode
rkennke
parents: 55587
diff changeset
    60
             {{"traversal"}, {"adaptive", "aggressive"}},
55587
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    61
             {{"passive"},   {"passive"}}
55121
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    62
        };
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    63
55587
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    64
        for (String[][] mh : modeHeuristics) {
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    65
            String mode = mh[0][0];
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    66
            String[] heuristics = mh[1];
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    67
            for (String h : heuristics) {
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    68
                testWith("-XX:+UnlockDiagnosticVMOptions",
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    69
                         "-XX:+UnlockExperimentalVMOptions",
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    70
                         "-XX:+UseShenandoahGC",
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    71
                         "-XX:-ShenandoahDegeneratedGC",
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    72
                         "-XX:ShenandoahGCMode=" + mode,
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    73
                         "-XX:ShenandoahGCHeuristics=" + h,
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    74
                         "-Xlog:gc+classhisto=trace",
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    75
                         "-XX:-ExplicitGCInvokesConcurrent",
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    76
                         "-Xmx512M"
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    77
                );
4644b3155fce 8226757: Shenandoah: Make traversal and passive modes explicit
rkennke
parents: 55121
diff changeset
    78
            }
55121
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    79
        }
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    80
    }
f19a728d576d 8225014: Separate ShenandoahRootScanner method for object_iterate
zgu
parents:
diff changeset
    81
}