test/hotspot/jtreg/serviceability/dcmd/vm/ClassLoaderHierarchyTest.java
author stuefe
Thu, 07 Jun 2018 12:23:46 +0200
changeset 50443 8e56de95ce10
permissions -rw-r--r--
8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details Reviewed-by: coleenp, dholmes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50443
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     1
/*
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     2
 * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     3
 * Copyright (c) 2018, SAP SE. All rights reserved.
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     5
 *
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     8
 * published by the Free Software Foundation.
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
     9
 *
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    14
 * accompanied this code).
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    15
 *
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    19
 *
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    22
 * questions.
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    23
 */
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    24
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    25
/*
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    26
 * @test
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    27
 * @summary Test of diagnostic command VM.classloaders
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    28
 * @library /test/lib
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    29
 * @modules java.base/jdk.internal.misc
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    30
 *          java.compiler
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    31
 *          java.management
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    32
 *          jdk.internal.jvmstat/sun.jvmstat.monitor
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    33
 * @run testng ClassLoaderHierarchyTest
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    34
 */
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    35
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    36
import org.testng.Assert;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    37
import org.testng.annotations.Test;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    38
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    39
import jdk.test.lib.process.OutputAnalyzer;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    40
import jdk.test.lib.dcmd.CommandExecutor;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    41
import jdk.test.lib.dcmd.JMXExecutor;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    42
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    43
import java.io.File;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    44
import java.io.FileInputStream;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    45
import java.io.IOException;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    46
import java.nio.ByteBuffer;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    47
import java.nio.channels.FileChannel;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    48
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    49
public class ClassLoaderHierarchyTest {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    50
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    51
//+-- <bootstrap>
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    52
//      |
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    53
//      +-- "platform", jdk.internal.loader.ClassLoaders$PlatformClassLoader
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    54
//      |     |
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    55
//      |     +-- "app", jdk.internal.loader.ClassLoaders$AppClassLoader
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    56
//      |
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    57
//      +-- jdk.internal.reflect.DelegatingClassLoader
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    58
//      |
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    59
//      +-- "Kevin", ClassLoaderHierarchyTest$TestClassLoader
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    60
//      |
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    61
//      +-- ClassLoaderHierarchyTest$TestClassLoader
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    62
//            |
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    63
//            +-- "Bill", ClassLoaderHierarchyTest$TestClassLoader
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    64
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    65
    public void run(CommandExecutor executor) throws ClassNotFoundException {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    66
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    67
        ClassLoader unnamed_cl = new TestClassLoader(null, null);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    68
        Class<?> c1 = Class.forName("TestClass2", true, unnamed_cl);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    69
        if (c1.getClassLoader() != unnamed_cl) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    70
            Assert.fail("TestClass defined by wrong classloader: " + c1.getClassLoader());
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    71
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    72
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    73
        ClassLoader named_cl = new TestClassLoader("Kevin", null);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    74
        Class<?> c2 = Class.forName("TestClass2", true, named_cl);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    75
        if (c2.getClassLoader() != named_cl) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    76
            Assert.fail("TestClass defined by wrong classloader: " + c2.getClassLoader());
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    77
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    78
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    79
        ClassLoader named_child_cl = new TestClassLoader("Bill", unnamed_cl);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    80
        Class<?> c3 = Class.forName("TestClass2", true, named_child_cl);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    81
        if (c3.getClassLoader() != named_child_cl) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    82
            Assert.fail("TestClass defined by wrong classloader: " + c3.getClassLoader());
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    83
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    84
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    85
        // First test: simple output, no classes displayed
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    86
        OutputAnalyzer output = executor.execute("VM.classloaders");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    87
        output.shouldContain("<bootstrap>");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    88
        output.shouldMatch(".*TestClassLoader");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    89
        output.shouldMatch("Kevin.*TestClassLoader");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    90
        output.shouldMatch("Bill.*TestClassLoader");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    91
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    92
        // Second test: print with classes.
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    93
        output = executor.execute("VM.classloaders show-classes");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    94
        output.shouldContain("<bootstrap>");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    95
        output.shouldContain("java.lang.Object");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    96
        output.shouldMatch(".*TestClassLoader");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    97
        output.shouldMatch("Kevin.*TestClassLoader");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    98
        output.shouldMatch("Bill.*TestClassLoader");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
    99
        output.shouldContain("TestClass2");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   100
    }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   101
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   102
    static class TestClassLoader extends ClassLoader {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   103
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   104
        public TestClassLoader() {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   105
            super();
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   106
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   107
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   108
        public TestClassLoader(String name, ClassLoader parent) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   109
            super(name, parent);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   110
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   111
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   112
        public static final String CLASS_NAME = "TestClass2";
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   113
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   114
        static ByteBuffer readClassFile(String name)
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   115
        {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   116
            File f = new File(System.getProperty("test.classes", "."),
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   117
                              name);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   118
            try (FileInputStream fin = new FileInputStream(f);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   119
                 FileChannel fc = fin.getChannel())
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   120
            {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   121
                return fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   122
            } catch (IOException e) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   123
                Assert.fail("Can't open file: " + name, e);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   124
            }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   125
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   126
            /* Will not reach here as Assert.fail() throws exception */
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   127
            return null;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   128
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   129
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   130
        protected Class<?> loadClass(String name, boolean resolve)
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   131
            throws ClassNotFoundException
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   132
        {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   133
            Class<?> c;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   134
            if (!CLASS_NAME.equals(name)) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   135
                c = super.loadClass(name, resolve);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   136
            } else {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   137
                // should not delegate to the system class loader
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   138
                c = findClass(name);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   139
                if (resolve) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   140
                    resolveClass(c);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   141
                }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   142
            }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   143
            return c;
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   144
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   145
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   146
        protected Class<?> findClass(String name)
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   147
            throws ClassNotFoundException
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   148
        {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   149
            if (!CLASS_NAME.equals(name)) {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   150
                throw new ClassNotFoundException("Unexpected class: " + name);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   151
            }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   152
            return defineClass(name, readClassFile(name + ".class"), null);
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   153
        }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   154
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   155
    }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   156
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   157
    @Test
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   158
    public void jmx() throws ClassNotFoundException {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   159
        run(new JMXExecutor());
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   160
    }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   161
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   162
}
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   163
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   164
class TestClass2 {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   165
    static {
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   166
        Runnable r = () -> System.out.println("Hello");
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   167
        r.run();
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   168
    }
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   169
}
8e56de95ce10 8203682: Add jcmd "VM.classloaders" command to print out class loader hierarchy, details
stuefe
parents:
diff changeset
   170