--- old/test/hotspot/jtreg/TEST.groups 2019-07-24 08:26:18.833471454 -0400 +++ new/test/hotspot/jtreg/TEST.groups 2019-07-24 08:26:18.593471463 -0400 @@ -296,8 +296,8 @@ -runtime/SelectionResolution/InvokeStaticICCE.java \ -runtime/SelectionResolution/InvokeVirtualICCE.java \ -runtime/SelectionResolution/InvokeVirtualSuccessTest.java \ - -runtime/SharedArchiveFile/CdsSameObjectAlignment.java \ - -runtime/SharedArchiveFile/SharedBaseAddress.java \ + -runtime/cds/CdsSameObjectAlignment.java \ + -runtime/cds/SharedBaseAddress.java \ -runtime/Thread/CancellableThreadTest.java \ -runtime/Thread/TestThreadDumpMonitorContention.java \ -runtime/Unsafe/RangeCheck.java \ @@ -307,40 +307,35 @@ -runtime/signal hotspot_cds = \ - runtime/SharedArchiveFile/ \ + runtime/cds/ \ runtime/CompressedOops/ -# AppCDS -# If modifying AppCDS it is also recommended to run the open hotspot_cds group -hotspot_appcds = \ - runtime/appcds/ - hotspot_appcds_dynamic = \ - runtime/appcds/ \ - -runtime/appcds/cacheObject \ - -runtime/appcds/customLoader \ - -runtime/appcds/dynamicArchive \ - -runtime/appcds/javaldr/ArrayTest.java \ - -runtime/appcds/javaldr/GCSharedStringsDuringDump.java \ - -runtime/appcds/javaldr/HumongousDuringDump.java \ - -runtime/appcds/sharedStrings \ - -runtime/appcds/DumpClassList.java \ - -runtime/appcds/ExtraSymbols.java \ - -runtime/appcds/LongClassListPath.java \ - -runtime/appcds/LotsOfClasses.java \ - -runtime/appcds/RelativePath.java \ - -runtime/appcds/SharedArchiveConsistency.java \ - -runtime/appcds/UnusedCPDuringDump.java \ - -runtime/appcds/VerifierTest_1B.java + runtime/cds/ \ + -runtime/cds/cacheObject \ + -runtime/cds/customLoader \ + -runtime/cds/dynamicArchive \ + -runtime/cds/javaldr/ArrayTest.java \ + -runtime/cds/javaldr/GCSharedStringsDuringDump.java \ + -runtime/cds/javaldr/HumongousDuringDump.java \ + -runtime/cds/sharedStrings \ + -runtime/cds/DumpClassList.java \ + -runtime/cds/ExtraSymbols.java \ + -runtime/cds/LongClassListPath.java \ + -runtime/cds/LotsOfClasses.java \ + -runtime/cds/RelativePath.java \ + -runtime/cds/SharedArchiveConsistency.java \ + -runtime/cds/UnusedCPDuringDump.java \ + -runtime/cds/VerifierTest_1B.java # A subset of AppCDS tests to be run in tier1 tier1_runtime_appcds = \ - runtime/appcds/HelloTest.java \ - runtime/appcds/sharedStrings/SharedStringsBasic.java \ - runtime/appcds/ClassLoaderTest.java + runtime/cds/HelloTest.java \ + runtime/cds/sharedStrings/SharedStringsBasic.java \ + runtime/cds/ClassLoaderTest.java tier1_runtime_appcds_exclude = \ - runtime/appcds/ \ + runtime/cds/ \ -:tier1_runtime_appcds # This group should be executed with "jtreg -Dtest.cds.run.with.jfr=true ..." @@ -350,13 +345,13 @@ # The excluded tests disallow the jdk.jfr module, which is required to # run with JFR. hotspot_appcds_with_jfr = \ - runtime/appcds/ \ - -runtime/appcds/cacheObject/ArchivedModuleCompareTest.java \ - -runtime/appcds/jigsaw/classpathtests/BootAppendTests.java \ - -runtime/appcds/jigsaw/classpathtests/ClassPathTests.java \ - -runtime/appcds/jigsaw/classpathtests/EmptyClassInBootClassPath.java \ - -runtime/appcds/jigsaw/JigsawOptionsCombo.java \ - -runtime/appcds/jigsaw/modulepath/MainModuleOnly.java + runtime/cds/ \ + -runtime/cds/cacheObject/ArchivedModuleCompareTest.java \ + -runtime/cds/jigsaw/classpathtests/BootAppendTests.java \ + -runtime/cds/jigsaw/classpathtests/ClassPathTests.java \ + -runtime/cds/jigsaw/classpathtests/EmptyClassInBootClassPath.java \ + -runtime/cds/jigsaw/JigsawOptionsCombo.java \ + -runtime/cds/jigsaw/modulepath/MainModuleOnly.java tier1_serviceability = \ serviceability/dcmd/compiler \ --- old/test/hotspot/jtreg/runtime/appcds/AppCDSOptions.java 2019-07-24 08:26:19.225471441 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -import jdk.test.lib.cds.CDSOptions; - -// This class represents options used for -// during creation of the archive and/or running JVM with archive - -public class AppCDSOptions extends CDSOptions { - public String appJar; - public String appJarDir; - - public AppCDSOptions setAppJar(String appJar) { - this.appJar = appJar; - return this; - } - - public AppCDSOptions setAppJarDir(String appJarDir) { - this.appJarDir = appJarDir; - return this; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/AppCDSOptions.java 2019-07-24 08:26:18.941471451 -0400 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +import jdk.test.lib.cds.CDSOptions; + +// This class represents options used for +// during creation of the archive and/or running JVM with archive + +public class AppCDSOptions extends CDSOptions { + public String appJar; + public String appJarDir; + + public AppCDSOptions setAppJar(String appJar) { + this.appJar = appJar; + return this; + } + + public AppCDSOptions setAppJarDir(String appJarDir) { + this.appJarDir = appJarDir; + return this; + } +} --- old/test/hotspot/jtreg/runtime/appcds/AppendClasspath.java 2019-07-24 08:26:19.609471427 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary At run time, it is OK to append new elements to the classpath that was used at dump time. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @compile test-classes/HelloMore.java - * @run driver AppendClasspath - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import jdk.test.lib.process.OutputAnalyzer; - -public class AppendClasspath { - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String appJar2 = JarBuilder.build("AppendClasspath_HelloMore", "HelloMore"); - - // Dump an archive with a specified JAR file in -classpath - TestCommon.testDump(appJar, TestCommon.list("Hello")); - - // PASS: 1) runtime with classpath containing the one used in dump time - TestCommon.run( - "-cp", appJar + File.pathSeparator + appJar2, - "HelloMore") - .assertNormalExit(); - - // PASS: 2) runtime has an non-existing jar in the -cp - String classDir = System.getProperty("test.classes"); - String newFile = "non-exist.jar"; - String nonExistPath = classDir + File.separator + newFile; - String classPath = appJar + File.pathSeparator + nonExistPath; - File nonExistJar = new File(classDir, newFile); - if (nonExistJar.exists()) { - nonExistJar.delete(); - } - TestCommon.run( - "-cp", classPath, - "-Xlog:class+path=trace", - "Hello") - .assertNormalExit(); - - final String errorMessage1 = "Unable to use shared archive"; - final String errorMessage2 = "shared class paths mismatch"; - // FAIL: 1) runtime with classpath different from the one used in dump time - // (runtime has an extra jar file prepended to the class path) - TestCommon.run( - "-Xlog:cds", - "-cp", appJar2 + File.pathSeparator + appJar, - "HelloMore") - .assertAbnormalExit(errorMessage1, errorMessage2); - - // FAIL: 2) runtime with classpath part of the one used in dump time - TestCommon.testDump(appJar + File.pathSeparator + appJar2, - TestCommon.list("Hello")); - TestCommon.run( - "-Xlog:cds", - "-cp", appJar2, - "Hello") - .assertAbnormalExit(errorMessage1, errorMessage2); - - // FAIL: 3) runtime with same set of jar files in the classpath but - // with different order - TestCommon.run( - "-Xlog:cds", - "-cp", appJar2 + File.pathSeparator + appJar, - "HelloMore") - .assertAbnormalExit(errorMessage1, errorMessage2); - - // FAIL: 4) non-existing jar during dump time but jar exists during runtime - TestCommon.testDump(classPath, TestCommon.list("Hello")); - - Files.copy(Paths.get(classDir, "hello.jar"), - Paths.get(classDir, newFile), - StandardCopyOption.REPLACE_EXISTING); - - TestCommon.run( - "-cp", classPath, - "-Xlog:class+path=trace", - "Hello") - .assertAbnormalExit(errorMessage1, errorMessage2); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/AppendClasspath.java 2019-07-24 08:26:19.281471439 -0400 @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary At run time, it is OK to append new elements to the classpath that was used at dump time. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @compile test-classes/HelloMore.java + * @run driver AppendClasspath + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import jdk.test.lib.process.OutputAnalyzer; + +public class AppendClasspath { + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appJar2 = JarBuilder.build("AppendClasspath_HelloMore", "HelloMore"); + + // Dump an archive with a specified JAR file in -classpath + TestCommon.testDump(appJar, TestCommon.list("Hello")); + + // PASS: 1) runtime with classpath containing the one used in dump time + TestCommon.run( + "-cp", appJar + File.pathSeparator + appJar2, + "HelloMore") + .assertNormalExit(); + + // PASS: 2) runtime has an non-existing jar in the -cp + String classDir = System.getProperty("test.classes"); + String newFile = "non-exist.jar"; + String nonExistPath = classDir + File.separator + newFile; + String classPath = appJar + File.pathSeparator + nonExistPath; + File nonExistJar = new File(classDir, newFile); + if (nonExistJar.exists()) { + nonExistJar.delete(); + } + TestCommon.run( + "-cp", classPath, + "-Xlog:class+path=trace", + "Hello") + .assertNormalExit(); + + final String errorMessage1 = "Unable to use shared archive"; + final String errorMessage2 = "shared class paths mismatch"; + // FAIL: 1) runtime with classpath different from the one used in dump time + // (runtime has an extra jar file prepended to the class path) + TestCommon.run( + "-Xlog:cds", + "-cp", appJar2 + File.pathSeparator + appJar, + "HelloMore") + .assertAbnormalExit(errorMessage1, errorMessage2); + + // FAIL: 2) runtime with classpath part of the one used in dump time + TestCommon.testDump(appJar + File.pathSeparator + appJar2, + TestCommon.list("Hello")); + TestCommon.run( + "-Xlog:cds", + "-cp", appJar2, + "Hello") + .assertAbnormalExit(errorMessage1, errorMessage2); + + // FAIL: 3) runtime with same set of jar files in the classpath but + // with different order + TestCommon.run( + "-Xlog:cds", + "-cp", appJar2 + File.pathSeparator + appJar, + "HelloMore") + .assertAbnormalExit(errorMessage1, errorMessage2); + + // FAIL: 4) non-existing jar during dump time but jar exists during runtime + TestCommon.testDump(classPath, TestCommon.list("Hello")); + + Files.copy(Paths.get(classDir, "hello.jar"), + Paths.get(classDir, newFile), + StandardCopyOption.REPLACE_EXISTING); + + TestCommon.run( + "-cp", classPath, + "-Xlog:class+path=trace", + "Hello") + .assertAbnormalExit(errorMessage1, errorMessage2); + + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/ArchiveDoesNotExist.java 2019-07-24 08:26:19.961471415 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test ArchiveDoesNotExist - * @summary Test how VM handles "file does not exist" situation while - * attempting to use CDS archive. JVM should exit gracefully - * when sharing mode is ON, and continue w/o sharing if sharing - * mode is AUTO. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run driver ArchiveDoesNotExist - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; - -public class ArchiveDoesNotExist { - public static void main(String[] args) throws Exception { - String fileName = "ArchiveDoesNotExist.jsa"; - - File cdsFile = new File(fileName); - if (cdsFile.exists()) - throw new RuntimeException("Test error: cds file already exists"); - - CDSOptions opts = (new CDSOptions()).setArchiveName(fileName); - - // -Xshare=on - OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); - CDSTestUtils.checkMappingFailure(out); - out.shouldContain("Specified shared archive not found") - .shouldHaveExitValue(1); - - // -Xshare=auto - opts.setXShareMode("auto"); - out = CDSTestUtils.runWithArchive(opts); - CDSTestUtils.checkMappingFailure(out); - out.shouldMatch("(java|openjdk) version") - .shouldNotContain("sharing") - .shouldHaveExitValue(0); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ArchiveDoesNotExist.java 2019-07-24 08:26:19.673471425 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test ArchiveDoesNotExist + * @summary Test how VM handles "file does not exist" situation while + * attempting to use CDS archive. JVM should exit gracefully + * when sharing mode is ON, and continue w/o sharing if sharing + * mode is AUTO. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver ArchiveDoesNotExist + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; + +public class ArchiveDoesNotExist { + public static void main(String[] args) throws Exception { + String fileName = "ArchiveDoesNotExist.jsa"; + + File cdsFile = new File(fileName); + if (cdsFile.exists()) + throw new RuntimeException("Test error: cds file already exists"); + + CDSOptions opts = (new CDSOptions()).setArchiveName(fileName); + + // -Xshare=on + OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); + CDSTestUtils.checkMappingFailure(out); + out.shouldContain("Specified shared archive not found") + .shouldHaveExitValue(1); + + // -Xshare=auto + opts.setXShareMode("auto"); + out = CDSTestUtils.runWithArchive(opts); + CDSTestUtils.checkMappingFailure(out); + out.shouldMatch("(java|openjdk) version") + .shouldNotContain("sharing") + .shouldHaveExitValue(0); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/BootAppendTests.java 2019-07-24 08:26:20.321471403 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,306 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @requires vm.cds & !vm.graal.enabled - * @summary Testing -Xbootclasspath/a support for CDS - * @requires vm.cds - * @library /test/lib - * @modules java.compiler - * java.base/jdk.internal.misc - * java.management - * jdk.internal.jvmstat/sun.jvmstat.monitor - * @compile javax/sound/sampled/MyClass.jasm - * @compile javax/annotation/processing/FilerException.jasm - * @compile nonjdk/myPackage/MyClass.java - * @build LoadClass - * @run main/othervm BootAppendTests - */ - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; - -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; - -public class BootAppendTests { - private static final String APP_CLASS = "LoadClass"; - private static final String BOOT_APPEND_MODULE_CLASS = "javax/sound/sampled/MyClass"; - private static final String BOOT_APPEND_DUPLICATE_MODULE_CLASS = - "javax/annotation/processing/FilerException"; - private static final String BOOT_APPEND_CLASS = "nonjdk/myPackage/MyClass"; - private static final String BOOT_APPEND_MODULE_CLASS_NAME = - BOOT_APPEND_MODULE_CLASS.replace('/', '.'); - private static final String BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME = - BOOT_APPEND_DUPLICATE_MODULE_CLASS.replace('/', '.'); - private static final String BOOT_APPEND_CLASS_NAME = - BOOT_APPEND_CLASS.replace('/', '.'); - private static final String[] ARCHIVE_CLASSES = - {BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS, BOOT_APPEND_CLASS}; - - private static final String modes[] = {"on", "off"}; - - private static String appJar; - private static String bootAppendJar; - - public static void main(String... args) throws Exception { - dumpArchive(); - - logTestCase("1"); - testBootAppendModuleClass(); - - logTestCase("2"); - testBootAppendDuplicateModuleClass(); - - logTestCase("3"); - testBootAppendExcludedModuleClass(); - - logTestCase("4"); - testBootAppendDuplicateExcludedModuleClass(); - - logTestCase("5"); - testBootAppendClass(); - - logTestCase("6"); - testBootAppendExtraDir(); - } - - private static void logTestCase(String msg) { - System.out.println(); - System.out.printf("TESTCASE: %s", msg); - System.out.println(); - } - - static void dumpArchive() throws Exception { - // create the classlist - File classlist = CDSTestUtils.makeClassList(ARCHIVE_CLASSES); - - // build jar files - appJar = ClassFileInstaller.writeJar("app.jar", APP_CLASS); - bootAppendJar = ClassFileInstaller.writeJar("bootAppend.jar", - BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS, BOOT_APPEND_CLASS); - - - OutputAnalyzer out = CDSTestUtils.createArchiveAndCheck( - "-Xbootclasspath/a:" + bootAppendJar, - "-cp", appJar, - "-XX:SharedClassListFile=" + classlist.getPath()); - // Make sure all the classes were successfully archived. - for (String archiveClass : ARCHIVE_CLASSES) { - String msg = "Preload Warning: Cannot find " + archiveClass; - if (archiveClass.equals(BOOT_APPEND_MODULE_CLASS)) { - // We shouldn't archive a class in the appended boot class path that - // are the java.desktop module. Such a class cannot be loaded - // at runtime anyway. - out.shouldContain(msg); - } else { - out.shouldNotContain(msg); - } - } - } - - // Test #1: If a class on -Xbootclasspath/a is from a package defined in - // bootmodules, the class is not loaded at runtime. - // Verify the behavior is the same when the class is archived - // with CDS enabled at runtime. - // - // The javax.sound.sampled package is defined in the java.desktop module. - // The archived javax.sound.sampled.MyClass from the -Xbootclasspath/a - // should not be loaded at runtime. - public static void testBootAppendModuleClass() throws Exception { - for (String mode : modes) { - CDSOptions opts = (new CDSOptions()) - .setXShareMode(mode).setUseVersion(false) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar, "-showversion") - .addSuffix(APP_CLASS, BOOT_APPEND_MODULE_CLASS_NAME); - - OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); - CDSTestUtils.checkExec(out, opts, "java.lang.ClassNotFoundException: javax.sound.sampled.MyClass"); - } - } - - // Test #2: If a class on -Xbootclasspath/a has the same fully qualified - // name as a class defined in boot modules, the class is not loaded - // from -Xbootclasspath/a. Verify the behavior is the same at runtime - // when CDS is enabled. - // - // The javax/annotation/processing/FilerException is a platform module - // class. The class on the -Xbootclasspath/a path that has the same - // fully-qualified name should not be loaded at runtime when CDS is enabled. - // The one from the platform modules should be loaded instead. - public static void testBootAppendDuplicateModuleClass() throws Exception { - for (String mode : modes) { - CDSOptions opts = (new CDSOptions()) - .setXShareMode(mode).setUseVersion(false) - .addPrefix("-showversion", - "-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) - .addSuffix("-Xlog:class+load=info", - APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME); - - String MATCH_PATTERN = ".class.load. javax.annotation.processing.FilerException source:.*bootAppend.jar*"; - CDSTestUtils.run(opts) - .assertNormalExit(out -> { - out.shouldNotMatch(MATCH_PATTERN); - }); - } - } - - // Test #3: If a class on -Xbootclasspath/a is from a package defined in boot modules, - // the class can be loaded from -Xbootclasspath/a when the module is excluded - // using --limit-modules. Verify the behavior is the same at runtime when CDS - // is enabled. - // - // The java.desktop module is excluded using --limit-modules at runtime - // CDS will be disabled with the --limit-modules option during runtime. - // javax.sound.sampled.MyClass will be loaded from the jar at runtime. - public static void testBootAppendExcludedModuleClass() throws Exception { - for (String mode : modes) { - CDSOptions opts = (new CDSOptions()) - .setXShareMode(mode).setUseVersion(false) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion", - "--limit-modules=java.base", "-cp", appJar) - .addSuffix("-Xlog:class+load=info", - APP_CLASS, BOOT_APPEND_MODULE_CLASS_NAME); - CDSTestUtils.Result res = CDSTestUtils.run(opts); - String MATCH_PATTERN = - ".class.load. javax.sound.sampled.MyClass source:.*bootAppend.jar*"; - if (mode.equals("on")) { - res.assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(MATCH_PATTERN); - }); - } else { - res.assertNormalExit(out -> { - out.shouldMatch(MATCH_PATTERN); - }); - } - } - } - - // Test #4: If a class on -Xbootclasspath/a has the same fully qualified - // name as a class defined in boot modules, the class is loaded - // from -Xbootclasspath/a when the boot module is excluded using - // --limit-modules. Verify the behavior is the same at runtime - // when CDS is enabled. - // - // The javax.annotation.processing.FilerException is a platform module class. - // The class on -Xbootclasspath/a that has the same fully-qualified name - // as javax.annotation.processing.FilerException can be loaded at runtime when - // java.compiler is excluded. - // CDS is disabled during runtime if the --limit-modules option is - // specified. - public static void testBootAppendDuplicateExcludedModuleClass() throws Exception { - for (String mode : modes) { - CDSOptions opts = (new CDSOptions()) - .setXShareMode(mode).setUseVersion(false) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion", - "--limit-modules=java.base", "-cp", appJar) - .addSuffix("-Xlog:class+load=info", - APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME); - - CDSTestUtils.Result res = CDSTestUtils.run(opts); - String MATCH_PATTERN = - ".class.load. javax.annotation.processing.FilerException source:.*bootAppend.jar*"; - if (mode.equals("on")) { - res.assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(MATCH_PATTERN); - }); - } else { - res.assertNormalExit(out -> { - out.shouldMatch(MATCH_PATTERN); - }); - } - } - } - - // Test #5: If a class on -Xbootclasspath/a is not from named modules, - // the class can be loaded at runtime. Verify the behavior is - // the same at runtime when CDS is enabled. - // - // The nonjdk.myPackage is not defined in named modules. The - // nonjdk.myPackage.MyClass will be loaded from the jar in - // -Xbootclasspath/a since CDS will be disabled with the - // --limit-modules option. - public static void testBootAppendClass() throws Exception { - for (String mode : modes) { - CDSOptions opts = (new CDSOptions()) - .setXShareMode(mode).setUseVersion(false) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion", - "--limit-modules=java.base", "-cp", appJar) - .addSuffix("-Xlog:class+load=info", - APP_CLASS, BOOT_APPEND_CLASS_NAME); - - CDSTestUtils.Result res = CDSTestUtils.run(opts); - String MATCH_PATTERN = - ".class.load. nonjdk.myPackage.MyClass source:.*bootAppend.jar*"; - if (mode.equals("on")) { - res.assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(MATCH_PATTERN); - }); - } else { - res.assertNormalExit(out -> { - out.shouldMatch(MATCH_PATTERN); - }); - } - } - } - - // Test #6: This is similar to Test #5. During runtime, an extra dir - // is appended to the bootclasspath. It should not invalidate - // the shared archive. However, CDS will be disabled with the - // --limit-modules in the command line. - public static void testBootAppendExtraDir() throws Exception { - for (String mode : modes) { - CDSOptions opts = (new CDSOptions()) - .setXShareMode(mode).setUseVersion(false) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar + File.pathSeparator + appJar, - "-showversion", "--limit-modules=java.base", "-cp", appJar) - .addSuffix("-Xlog:class+load=info", - APP_CLASS, BOOT_APPEND_CLASS_NAME); - - CDSTestUtils.Result res = CDSTestUtils.run(opts); - String MATCH_PATTERN = - ".class.load. nonjdk.myPackage.MyClass source:.*bootAppend.jar*"; - if (mode.equals("on")) { - res.assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(MATCH_PATTERN); - }); - } else { - res.assertNormalExit(out -> { - out.shouldMatch(MATCH_PATTERN); - }); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/BootAppendTests.java 2019-07-24 08:26:20.021471413 -0400 @@ -0,0 +1,306 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @requires vm.cds & !vm.graal.enabled + * @summary Testing -Xbootclasspath/a support for CDS + * @requires vm.cds + * @library /test/lib + * @modules java.compiler + * java.base/jdk.internal.misc + * java.management + * jdk.internal.jvmstat/sun.jvmstat.monitor + * @compile javax/sound/sampled/MyClass.jasm + * @compile javax/annotation/processing/FilerException.jasm + * @compile nonjdk/myPackage/MyClass.java + * @build LoadClass + * @run main/othervm BootAppendTests + */ + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +public class BootAppendTests { + private static final String APP_CLASS = "LoadClass"; + private static final String BOOT_APPEND_MODULE_CLASS = "javax/sound/sampled/MyClass"; + private static final String BOOT_APPEND_DUPLICATE_MODULE_CLASS = + "javax/annotation/processing/FilerException"; + private static final String BOOT_APPEND_CLASS = "nonjdk/myPackage/MyClass"; + private static final String BOOT_APPEND_MODULE_CLASS_NAME = + BOOT_APPEND_MODULE_CLASS.replace('/', '.'); + private static final String BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME = + BOOT_APPEND_DUPLICATE_MODULE_CLASS.replace('/', '.'); + private static final String BOOT_APPEND_CLASS_NAME = + BOOT_APPEND_CLASS.replace('/', '.'); + private static final String[] ARCHIVE_CLASSES = + {BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS, BOOT_APPEND_CLASS}; + + private static final String modes[] = {"on", "off"}; + + private static String appJar; + private static String bootAppendJar; + + public static void main(String... args) throws Exception { + dumpArchive(); + + logTestCase("1"); + testBootAppendModuleClass(); + + logTestCase("2"); + testBootAppendDuplicateModuleClass(); + + logTestCase("3"); + testBootAppendExcludedModuleClass(); + + logTestCase("4"); + testBootAppendDuplicateExcludedModuleClass(); + + logTestCase("5"); + testBootAppendClass(); + + logTestCase("6"); + testBootAppendExtraDir(); + } + + private static void logTestCase(String msg) { + System.out.println(); + System.out.printf("TESTCASE: %s", msg); + System.out.println(); + } + + static void dumpArchive() throws Exception { + // create the classlist + File classlist = CDSTestUtils.makeClassList(ARCHIVE_CLASSES); + + // build jar files + appJar = ClassFileInstaller.writeJar("app.jar", APP_CLASS); + bootAppendJar = ClassFileInstaller.writeJar("bootAppend.jar", + BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS, BOOT_APPEND_CLASS); + + + OutputAnalyzer out = CDSTestUtils.createArchiveAndCheck( + "-Xbootclasspath/a:" + bootAppendJar, + "-cp", appJar, + "-XX:SharedClassListFile=" + classlist.getPath()); + // Make sure all the classes were successfully archived. + for (String archiveClass : ARCHIVE_CLASSES) { + String msg = "Preload Warning: Cannot find " + archiveClass; + if (archiveClass.equals(BOOT_APPEND_MODULE_CLASS)) { + // We shouldn't archive a class in the appended boot class path that + // are the java.desktop module. Such a class cannot be loaded + // at runtime anyway. + out.shouldContain(msg); + } else { + out.shouldNotContain(msg); + } + } + } + + // Test #1: If a class on -Xbootclasspath/a is from a package defined in + // bootmodules, the class is not loaded at runtime. + // Verify the behavior is the same when the class is archived + // with CDS enabled at runtime. + // + // The javax.sound.sampled package is defined in the java.desktop module. + // The archived javax.sound.sampled.MyClass from the -Xbootclasspath/a + // should not be loaded at runtime. + public static void testBootAppendModuleClass() throws Exception { + for (String mode : modes) { + CDSOptions opts = (new CDSOptions()) + .setXShareMode(mode).setUseVersion(false) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar, "-showversion") + .addSuffix(APP_CLASS, BOOT_APPEND_MODULE_CLASS_NAME); + + OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); + CDSTestUtils.checkExec(out, opts, "java.lang.ClassNotFoundException: javax.sound.sampled.MyClass"); + } + } + + // Test #2: If a class on -Xbootclasspath/a has the same fully qualified + // name as a class defined in boot modules, the class is not loaded + // from -Xbootclasspath/a. Verify the behavior is the same at runtime + // when CDS is enabled. + // + // The javax/annotation/processing/FilerException is a platform module + // class. The class on the -Xbootclasspath/a path that has the same + // fully-qualified name should not be loaded at runtime when CDS is enabled. + // The one from the platform modules should be loaded instead. + public static void testBootAppendDuplicateModuleClass() throws Exception { + for (String mode : modes) { + CDSOptions opts = (new CDSOptions()) + .setXShareMode(mode).setUseVersion(false) + .addPrefix("-showversion", + "-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) + .addSuffix("-Xlog:class+load=info", + APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME); + + String MATCH_PATTERN = ".class.load. javax.annotation.processing.FilerException source:.*bootAppend.jar*"; + CDSTestUtils.run(opts) + .assertNormalExit(out -> { + out.shouldNotMatch(MATCH_PATTERN); + }); + } + } + + // Test #3: If a class on -Xbootclasspath/a is from a package defined in boot modules, + // the class can be loaded from -Xbootclasspath/a when the module is excluded + // using --limit-modules. Verify the behavior is the same at runtime when CDS + // is enabled. + // + // The java.desktop module is excluded using --limit-modules at runtime + // CDS will be disabled with the --limit-modules option during runtime. + // javax.sound.sampled.MyClass will be loaded from the jar at runtime. + public static void testBootAppendExcludedModuleClass() throws Exception { + for (String mode : modes) { + CDSOptions opts = (new CDSOptions()) + .setXShareMode(mode).setUseVersion(false) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion", + "--limit-modules=java.base", "-cp", appJar) + .addSuffix("-Xlog:class+load=info", + APP_CLASS, BOOT_APPEND_MODULE_CLASS_NAME); + CDSTestUtils.Result res = CDSTestUtils.run(opts); + String MATCH_PATTERN = + ".class.load. javax.sound.sampled.MyClass source:.*bootAppend.jar*"; + if (mode.equals("on")) { + res.assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(MATCH_PATTERN); + }); + } else { + res.assertNormalExit(out -> { + out.shouldMatch(MATCH_PATTERN); + }); + } + } + } + + // Test #4: If a class on -Xbootclasspath/a has the same fully qualified + // name as a class defined in boot modules, the class is loaded + // from -Xbootclasspath/a when the boot module is excluded using + // --limit-modules. Verify the behavior is the same at runtime + // when CDS is enabled. + // + // The javax.annotation.processing.FilerException is a platform module class. + // The class on -Xbootclasspath/a that has the same fully-qualified name + // as javax.annotation.processing.FilerException can be loaded at runtime when + // java.compiler is excluded. + // CDS is disabled during runtime if the --limit-modules option is + // specified. + public static void testBootAppendDuplicateExcludedModuleClass() throws Exception { + for (String mode : modes) { + CDSOptions opts = (new CDSOptions()) + .setXShareMode(mode).setUseVersion(false) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion", + "--limit-modules=java.base", "-cp", appJar) + .addSuffix("-Xlog:class+load=info", + APP_CLASS, BOOT_APPEND_DUPLICATE_MODULE_CLASS_NAME); + + CDSTestUtils.Result res = CDSTestUtils.run(opts); + String MATCH_PATTERN = + ".class.load. javax.annotation.processing.FilerException source:.*bootAppend.jar*"; + if (mode.equals("on")) { + res.assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(MATCH_PATTERN); + }); + } else { + res.assertNormalExit(out -> { + out.shouldMatch(MATCH_PATTERN); + }); + } + } + } + + // Test #5: If a class on -Xbootclasspath/a is not from named modules, + // the class can be loaded at runtime. Verify the behavior is + // the same at runtime when CDS is enabled. + // + // The nonjdk.myPackage is not defined in named modules. The + // nonjdk.myPackage.MyClass will be loaded from the jar in + // -Xbootclasspath/a since CDS will be disabled with the + // --limit-modules option. + public static void testBootAppendClass() throws Exception { + for (String mode : modes) { + CDSOptions opts = (new CDSOptions()) + .setXShareMode(mode).setUseVersion(false) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-showversion", + "--limit-modules=java.base", "-cp", appJar) + .addSuffix("-Xlog:class+load=info", + APP_CLASS, BOOT_APPEND_CLASS_NAME); + + CDSTestUtils.Result res = CDSTestUtils.run(opts); + String MATCH_PATTERN = + ".class.load. nonjdk.myPackage.MyClass source:.*bootAppend.jar*"; + if (mode.equals("on")) { + res.assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(MATCH_PATTERN); + }); + } else { + res.assertNormalExit(out -> { + out.shouldMatch(MATCH_PATTERN); + }); + } + } + } + + // Test #6: This is similar to Test #5. During runtime, an extra dir + // is appended to the bootclasspath. It should not invalidate + // the shared archive. However, CDS will be disabled with the + // --limit-modules in the command line. + public static void testBootAppendExtraDir() throws Exception { + for (String mode : modes) { + CDSOptions opts = (new CDSOptions()) + .setXShareMode(mode).setUseVersion(false) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar + File.pathSeparator + appJar, + "-showversion", "--limit-modules=java.base", "-cp", appJar) + .addSuffix("-Xlog:class+load=info", + APP_CLASS, BOOT_APPEND_CLASS_NAME); + + CDSTestUtils.Result res = CDSTestUtils.run(opts); + String MATCH_PATTERN = + ".class.load. nonjdk.myPackage.MyClass source:.*bootAppend.jar*"; + if (mode.equals("on")) { + res.assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(MATCH_PATTERN); + }); + } else { + res.assertNormalExit(out -> { + out.shouldMatch(MATCH_PATTERN); + }); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/BootClassPathMismatch.java 2019-07-24 08:26:20.721471389 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary bootclasspath mismatch test. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver BootClassPathMismatch - */ - -import jdk.test.lib.Platform; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; -import java.nio.file.Files; -import java.nio.file.FileAlreadyExistsException; -import java.nio.file.StandardCopyOption; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.attribute.FileTime; - - -public class BootClassPathMismatch { - private static final String mismatchMessage = "shared class paths mismatch"; - - public static void main(String[] args) throws Exception { - JarBuilder.getOrCreateHelloJar(); - copyHelloToNewDir(); - - BootClassPathMismatch test = new BootClassPathMismatch(); - test.testBootClassPathMismatch(); - test.testBootClassPathMismatchWithAppClass(); - test.testBootClassPathMismatchWithBadPath(); - if (!TestCommon.isDynamicArchive()) { - // this test is not applicable to dynamic archive since - // there is no class to be archived in the top archive - test.testBootClassPathMatchWithAppend(); - } - test.testBootClassPathMatch(); - } - - /* Archive contains boot classes only, with Hello class on -Xbootclasspath/a path. - * - * Error should be detected if: - * dump time: -Xbootclasspath/a:${testdir}/hello.jar - * run-time : -Xbootclasspath/a:${testdir}/newdir/hello.jar - * - * or - * dump time: -Xbootclasspath/a:${testdir}/newdir/hello.jar - * run-time : -Xbootclasspath/a:${testdir}/hello.jar - */ - public void testBootClassPathMismatch() throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String appClasses[] = {"Hello"}; - String testDir = TestCommon.getTestDir("newdir"); - String otherJar = testDir + File.separator + "hello.jar"; - - TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + appJar); - TestCommon.run( - "-Xlog:cds", - "-cp", appJar, "-Xbootclasspath/a:" + otherJar, "Hello") - .assertAbnormalExit(mismatchMessage); - - TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + otherJar); - TestCommon.run( - "-Xlog:cds", - "-cp", appJar, "-Xbootclasspath/a:" + appJar, "Hello") - .assertAbnormalExit(mismatchMessage); - } - - /* Archive contains boot classes only. - * - * Error should be detected if: - * dump time: -Xbootclasspath/a:${testdir}/newdir/hello.jar - * run-time : -Xbootclasspath/a:${testdir}/newdir/hello.jar1 - */ - public void testBootClassPathMismatchWithBadPath() throws Exception { - String appClasses[] = {"Hello"}; - String testDir = TestCommon.getTestDir("newdir"); - String appJar = testDir + File.separator + "hello.jar"; - String otherJar = testDir + File.separator + "hello.jar1"; - - TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + appJar); - TestCommon.run( - "-Xlog:cds", - "-cp", appJar, "-Xbootclasspath/a:" + otherJar, "Hello") - .assertAbnormalExit(mismatchMessage); - } - - /* Archive contains boot classes only, with Hello loaded from -Xbootclasspath/a at dump time. - * - * No error if: - * dump time: -Xbootclasspath/a:${testdir}/hello.jar - * run-time : -Xbootclasspath/a:${testdir}/hello.jar - */ - public void testBootClassPathMatch() throws Exception { - String appJar = TestCommon.getTestJar("hello.jar"); - String appClasses[] = {"Hello"}; - TestCommon.dump( - appJar, appClasses, "-Xbootclasspath/a:" + appJar); - TestCommon.run( - "-cp", appJar, "-verbose:class", - "-Xbootclasspath/a:" + appJar, "Hello") - .assertNormalExit("[class,load] Hello source: shared objects file"); - - // test relative path to appJar - String newJar = TestCommon.composeRelPath(appJar); - TestCommon.run( - "-cp", newJar, "-verbose:class", - "-Xbootclasspath/a:" + newJar, "Hello") - .assertNormalExit("[class,load] Hello source: shared objects file"); - - int idx = appJar.lastIndexOf(File.separator); - String jarName = appJar.substring(idx + 1); - String jarDir = appJar.substring(0, idx); - // relative path starting with "." - TestCommon.runWithRelativePath( - jarDir, - "-Xshare:on", - "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), - "-cp", "." + File.separator + jarName, - "-Xbootclasspath/a:" + "." + File.separator + jarName, - "-Xlog:class+load=trace,class+path=info", - "Hello") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldHaveExitValue(0); - }); - - // relative path starting with ".." - idx = jarDir.lastIndexOf(File.separator); - String jarSubDir = jarDir.substring(idx + 1); - TestCommon.runWithRelativePath( - jarDir, - "-Xshare:on", - "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), - "-cp", ".." + File.separator + jarSubDir + File.separator + jarName, - "-Xbootclasspath/a:" + ".." + File.separator + jarSubDir + File.separator + jarName, - "-Xlog:class+load=trace,class+path=info", - "Hello") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldHaveExitValue(0); - }); - - // test sym link to appJar - if (!Platform.isWindows()) { - File linkedJar = TestCommon.createSymLink(appJar); - TestCommon.run( - "-cp", linkedJar.getPath(), "-verbose:class", - "-Xbootclasspath/a:" + linkedJar.getPath(), "Hello") - .assertNormalExit("[class,load] Hello source: shared objects file"); - } - } - - /* Archive contains boot classes only, runtime add -Xbootclasspath/a path. - * - * No error: - * dump time: No -Xbootclasspath/a - * run-time : -Xbootclasspath/a:${testdir}/hello.jar - */ - public void testBootClassPathMatchWithAppend() throws Exception { - CDSOptions opts = new CDSOptions().setUseVersion(false); - OutputAnalyzer out = CDSTestUtils.createArchive(opts); - CDSTestUtils.checkDump(out); - - String appJar = JarBuilder.getOrCreateHelloJar(); - opts.addPrefix("-Xbootclasspath/a:" + appJar, "-showversion").addSuffix("Hello"); - CDSTestUtils.runWithArchiveAndCheck(opts); - } - - /* Archive contains app classes, with Hello on -cp path at dump time. - * - * Error should be detected if: - * dump time: - * run-time : -Xbootclasspath/a:${testdir}/hello.jar - */ - public void testBootClassPathMismatchWithAppClass() throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String appClasses[] = {"Hello"}; - TestCommon.dump(appJar, appClasses); - TestCommon.run( - "-Xlog:cds", - "-cp", appJar, "-Xbootclasspath/a:" + appJar, "Hello") - .assertAbnormalExit(mismatchMessage); - - // test relative path to appJar - String newJar = TestCommon.composeRelPath(appJar); - TestCommon.run( - "-cp", newJar, "-Xbootclasspath/a:" + newJar, "Hello") - .assertAbnormalExit(mismatchMessage); - } - - private static void copyHelloToNewDir() throws Exception { - String classDir = System.getProperty("test.classes"); - String dstDir = classDir + File.separator + "newdir"; - try { - Files.createDirectory(Paths.get(dstDir)); - } catch (FileAlreadyExistsException e) { } - - // copy as hello.jar - Path dstPath = Paths.get(dstDir, "hello.jar"); - Files.copy(Paths.get(classDir, "hello.jar"), - dstPath, - StandardCopyOption.REPLACE_EXISTING); - - File helloJar = dstPath.toFile(); - long modTime = helloJar.lastModified(); - - // copy as hello.jar1 - Path dstPath2 = Paths.get(dstDir, "hello.jar1"); - Files.copy(Paths.get(classDir, "hello.jar"), - dstPath2, - StandardCopyOption.REPLACE_EXISTING); - - // On Windows, we rely on the file size, creation time, and - // modification time in order to differentiate between 2 files. - // Setting a different modification time on hello.jar1 so that this test - // runs more reliably on Windows. - modTime += 10000; - Files.setAttribute(dstPath2, "lastModifiedTime", FileTime.fromMillis(modTime)); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/BootClassPathMismatch.java 2019-07-24 08:26:20.381471401 -0400 @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary bootclasspath mismatch test. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver BootClassPathMismatch + */ + +import jdk.test.lib.Platform; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.FileAlreadyExistsException; +import java.nio.file.StandardCopyOption; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.FileTime; + + +public class BootClassPathMismatch { + private static final String mismatchMessage = "shared class paths mismatch"; + + public static void main(String[] args) throws Exception { + JarBuilder.getOrCreateHelloJar(); + copyHelloToNewDir(); + + BootClassPathMismatch test = new BootClassPathMismatch(); + test.testBootClassPathMismatch(); + test.testBootClassPathMismatchWithAppClass(); + test.testBootClassPathMismatchWithBadPath(); + if (!TestCommon.isDynamicArchive()) { + // this test is not applicable to dynamic archive since + // there is no class to be archived in the top archive + test.testBootClassPathMatchWithAppend(); + } + test.testBootClassPathMatch(); + } + + /* Archive contains boot classes only, with Hello class on -Xbootclasspath/a path. + * + * Error should be detected if: + * dump time: -Xbootclasspath/a:${testdir}/hello.jar + * run-time : -Xbootclasspath/a:${testdir}/newdir/hello.jar + * + * or + * dump time: -Xbootclasspath/a:${testdir}/newdir/hello.jar + * run-time : -Xbootclasspath/a:${testdir}/hello.jar + */ + public void testBootClassPathMismatch() throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appClasses[] = {"Hello"}; + String testDir = TestCommon.getTestDir("newdir"); + String otherJar = testDir + File.separator + "hello.jar"; + + TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + appJar); + TestCommon.run( + "-Xlog:cds", + "-cp", appJar, "-Xbootclasspath/a:" + otherJar, "Hello") + .assertAbnormalExit(mismatchMessage); + + TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + otherJar); + TestCommon.run( + "-Xlog:cds", + "-cp", appJar, "-Xbootclasspath/a:" + appJar, "Hello") + .assertAbnormalExit(mismatchMessage); + } + + /* Archive contains boot classes only. + * + * Error should be detected if: + * dump time: -Xbootclasspath/a:${testdir}/newdir/hello.jar + * run-time : -Xbootclasspath/a:${testdir}/newdir/hello.jar1 + */ + public void testBootClassPathMismatchWithBadPath() throws Exception { + String appClasses[] = {"Hello"}; + String testDir = TestCommon.getTestDir("newdir"); + String appJar = testDir + File.separator + "hello.jar"; + String otherJar = testDir + File.separator + "hello.jar1"; + + TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + appJar); + TestCommon.run( + "-Xlog:cds", + "-cp", appJar, "-Xbootclasspath/a:" + otherJar, "Hello") + .assertAbnormalExit(mismatchMessage); + } + + /* Archive contains boot classes only, with Hello loaded from -Xbootclasspath/a at dump time. + * + * No error if: + * dump time: -Xbootclasspath/a:${testdir}/hello.jar + * run-time : -Xbootclasspath/a:${testdir}/hello.jar + */ + public void testBootClassPathMatch() throws Exception { + String appJar = TestCommon.getTestJar("hello.jar"); + String appClasses[] = {"Hello"}; + TestCommon.dump( + appJar, appClasses, "-Xbootclasspath/a:" + appJar); + TestCommon.run( + "-cp", appJar, "-verbose:class", + "-Xbootclasspath/a:" + appJar, "Hello") + .assertNormalExit("[class,load] Hello source: shared objects file"); + + // test relative path to appJar + String newJar = TestCommon.composeRelPath(appJar); + TestCommon.run( + "-cp", newJar, "-verbose:class", + "-Xbootclasspath/a:" + newJar, "Hello") + .assertNormalExit("[class,load] Hello source: shared objects file"); + + int idx = appJar.lastIndexOf(File.separator); + String jarName = appJar.substring(idx + 1); + String jarDir = appJar.substring(0, idx); + // relative path starting with "." + TestCommon.runWithRelativePath( + jarDir, + "-Xshare:on", + "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), + "-cp", "." + File.separator + jarName, + "-Xbootclasspath/a:" + "." + File.separator + jarName, + "-Xlog:class+load=trace,class+path=info", + "Hello") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldHaveExitValue(0); + }); + + // relative path starting with ".." + idx = jarDir.lastIndexOf(File.separator); + String jarSubDir = jarDir.substring(idx + 1); + TestCommon.runWithRelativePath( + jarDir, + "-Xshare:on", + "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), + "-cp", ".." + File.separator + jarSubDir + File.separator + jarName, + "-Xbootclasspath/a:" + ".." + File.separator + jarSubDir + File.separator + jarName, + "-Xlog:class+load=trace,class+path=info", + "Hello") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldHaveExitValue(0); + }); + + // test sym link to appJar + if (!Platform.isWindows()) { + File linkedJar = TestCommon.createSymLink(appJar); + TestCommon.run( + "-cp", linkedJar.getPath(), "-verbose:class", + "-Xbootclasspath/a:" + linkedJar.getPath(), "Hello") + .assertNormalExit("[class,load] Hello source: shared objects file"); + } + } + + /* Archive contains boot classes only, runtime add -Xbootclasspath/a path. + * + * No error: + * dump time: No -Xbootclasspath/a + * run-time : -Xbootclasspath/a:${testdir}/hello.jar + */ + public void testBootClassPathMatchWithAppend() throws Exception { + CDSOptions opts = new CDSOptions().setUseVersion(false); + OutputAnalyzer out = CDSTestUtils.createArchive(opts); + CDSTestUtils.checkDump(out); + + String appJar = JarBuilder.getOrCreateHelloJar(); + opts.addPrefix("-Xbootclasspath/a:" + appJar, "-showversion").addSuffix("Hello"); + CDSTestUtils.runWithArchiveAndCheck(opts); + } + + /* Archive contains app classes, with Hello on -cp path at dump time. + * + * Error should be detected if: + * dump time: + * run-time : -Xbootclasspath/a:${testdir}/hello.jar + */ + public void testBootClassPathMismatchWithAppClass() throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appClasses[] = {"Hello"}; + TestCommon.dump(appJar, appClasses); + TestCommon.run( + "-Xlog:cds", + "-cp", appJar, "-Xbootclasspath/a:" + appJar, "Hello") + .assertAbnormalExit(mismatchMessage); + + // test relative path to appJar + String newJar = TestCommon.composeRelPath(appJar); + TestCommon.run( + "-cp", newJar, "-Xbootclasspath/a:" + newJar, "Hello") + .assertAbnormalExit(mismatchMessage); + } + + private static void copyHelloToNewDir() throws Exception { + String classDir = System.getProperty("test.classes"); + String dstDir = classDir + File.separator + "newdir"; + try { + Files.createDirectory(Paths.get(dstDir)); + } catch (FileAlreadyExistsException e) { } + + // copy as hello.jar + Path dstPath = Paths.get(dstDir, "hello.jar"); + Files.copy(Paths.get(classDir, "hello.jar"), + dstPath, + StandardCopyOption.REPLACE_EXISTING); + + File helloJar = dstPath.toFile(); + long modTime = helloJar.lastModified(); + + // copy as hello.jar1 + Path dstPath2 = Paths.get(dstDir, "hello.jar1"); + Files.copy(Paths.get(classDir, "hello.jar"), + dstPath2, + StandardCopyOption.REPLACE_EXISTING); + + // On Windows, we rely on the file size, creation time, and + // modification time in order to differentiate between 2 files. + // Setting a different modification time on hello.jar1 so that this test + // runs more reliably on Windows. + modTime += 10000; + Files.setAttribute(dstPath2, "lastModifiedTime", FileTime.fromMillis(modTime)); + } +} --- old/test/hotspot/jtreg/runtime/appcds/CDSandJFR.java 2019-07-24 08:26:21.109471375 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @summary Make sure CDS and JFR work together. - * @requires vm.hasJFR & vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes test-classes - * @modules jdk.jfr - * @build Hello GetFlightRecorder - * @run driver ClassFileInstaller -jar CDSandJFR.jar Hello GetFlightRecorder GetFlightRecorder$TestEvent GetFlightRecorder$SimpleEvent - * @run main/othervm/timeout=500 CDSandJFR - */ - -import jdk.test.lib.BuildHelper; -import jdk.test.lib.process.OutputAnalyzer; - -public class CDSandJFR { - static String[] classes = { - "jdk/jfr/Event", - "jdk/jfr/events/FileReadEvent", - "jdk/jfr/events/FileWriteEvent", - "jdk/jfr/events/SocketReadEvent", - "jdk/jfr/events/SocketWriteEvent", - "jdk/jfr/events/ExceptionThrownEvent", - "jdk/jfr/events/ExceptionStatisticsEvent", - "jdk/jfr/events/ErrorThrownEvent", - "jdk/jfr/events/ActiveSettingEvent", - "jdk/jfr/events/ActiveRecordingEvent", - "Hello", - "GetFlightRecorder", - "GetFlightRecorder$TestEvent", - }; - - public static void main(String[] args) throws Exception { - test(classes); - } - - static void test(String[] classes) throws Exception { - String appJar = ClassFileInstaller.getJarPath("CDSandJFR.jar"); - OutputAnalyzer output; - output = TestCommon.testDump(appJar, TestCommon.list(classes)); - TestCommon.checkDump(output, "Skipping jdk/jfr/Event: JFR event class"); - - output = TestCommon.exec(appJar, - "-XX:StartFlightRecording=dumponexit=true", - "Hello"); - TestCommon.checkExec(output, "Hello World"); - - TestCommon.checkExec(TestCommon.exec(appJar, - "-XX:FlightRecorderOptions=retransform=true", - "GetFlightRecorder")); - TestCommon.checkExec(TestCommon.exec(appJar, - "-XX:FlightRecorderOptions=retransform=false", - "GetFlightRecorder")); - - // Test dumping with flight recorder enabled. - output = TestCommon.testDump(appJar, TestCommon.list(classes), - "-XX:StartFlightRecording=dumponexit=true"); - TestCommon.checkDump(output, "warning: JFR will be disabled during CDS dumping"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CDSandJFR.java 2019-07-24 08:26:20.781471387 -0400 @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @summary Make sure CDS and JFR work together. + * @requires vm.hasJFR & vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes test-classes + * @modules jdk.jfr + * @build Hello GetFlightRecorder + * @run driver ClassFileInstaller -jar CDSandJFR.jar Hello GetFlightRecorder GetFlightRecorder$TestEvent GetFlightRecorder$SimpleEvent + * @run main/othervm/timeout=500 CDSandJFR + */ + +import jdk.test.lib.BuildHelper; +import jdk.test.lib.process.OutputAnalyzer; + +public class CDSandJFR { + static String[] classes = { + "jdk/jfr/Event", + "jdk/jfr/events/FileReadEvent", + "jdk/jfr/events/FileWriteEvent", + "jdk/jfr/events/SocketReadEvent", + "jdk/jfr/events/SocketWriteEvent", + "jdk/jfr/events/ExceptionThrownEvent", + "jdk/jfr/events/ExceptionStatisticsEvent", + "jdk/jfr/events/ErrorThrownEvent", + "jdk/jfr/events/ActiveSettingEvent", + "jdk/jfr/events/ActiveRecordingEvent", + "Hello", + "GetFlightRecorder", + "GetFlightRecorder$TestEvent", + }; + + public static void main(String[] args) throws Exception { + test(classes); + } + + static void test(String[] classes) throws Exception { + String appJar = ClassFileInstaller.getJarPath("CDSandJFR.jar"); + OutputAnalyzer output; + output = TestCommon.testDump(appJar, TestCommon.list(classes)); + TestCommon.checkDump(output, "Skipping jdk/jfr/Event: JFR event class"); + + output = TestCommon.exec(appJar, + "-XX:StartFlightRecording=dumponexit=true", + "Hello"); + TestCommon.checkExec(output, "Hello World"); + + TestCommon.checkExec(TestCommon.exec(appJar, + "-XX:FlightRecorderOptions=retransform=true", + "GetFlightRecorder")); + TestCommon.checkExec(TestCommon.exec(appJar, + "-XX:FlightRecorderOptions=retransform=false", + "GetFlightRecorder")); + + // Test dumping with flight recorder enabled. + output = TestCommon.testDump(appJar, TestCommon.list(classes), + "-XX:StartFlightRecording=dumponexit=true"); + TestCommon.checkDump(output, "warning: JFR will be disabled during CDS dumping"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/CaseSensitiveClassPath.java 2019-07-24 08:26:21.541471360 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - - -/* - * @test - * @summary Test case sensitive aspect of comparing class paths - * between dump time and archive use time - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @requires os.family != "mac" - * @compile test-classes/Hello.java - * @run driver CaseSensitiveClassPath - */ - -import java.nio.file.FileAlreadyExistsException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; - - -// Excluded from running on MAC: a more comprehensive case sensitivity detection -// and fix mechanism is needed, which is planned to be implemented in the future. -public class CaseSensitiveClassPath { - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String appJarUpper = appJar.replace("hello", "Hello"); - - OutputAnalyzer out = TestCommon.dump(appJar, TestCommon.list("Hello")); - TestCommon.checkDump(out); - - Path jarPath = Paths.get(appJar); - Path jarPathUpper = null; - - boolean fileExists = false; - try { - jarPathUpper = Files.createFile(Paths.get(appJarUpper)); - } catch (FileAlreadyExistsException faee) { - fileExists = true; - } - - if (!fileExists) { - try { - Files.copy(jarPath, jarPathUpper, StandardCopyOption.REPLACE_EXISTING); - } catch (Exception e) { - throw new java.lang.RuntimeException( - "Failed copying file from " + appJar + " to " + appJarUpper + ".", e); - } - } else { - jarPathUpper = Paths.get(appJarUpper); - } - boolean isSameFile = Files.isSameFile(jarPath, jarPathUpper); - - TestCommon.run("-Xlog:class+path=info,cds", "-cp", appJarUpper, "Hello") - .ifNoMappingFailure(output -> { - if (isSameFile) { - output.shouldContain("Hello World"); - } else { - output.shouldContain("shared class paths mismatch"); - output.shouldHaveExitValue(1); - } - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CaseSensitiveClassPath.java 2019-07-24 08:26:21.217471371 -0400 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + + +/* + * @test + * @summary Test case sensitive aspect of comparing class paths + * between dump time and archive use time + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @requires os.family != "mac" + * @compile test-classes/Hello.java + * @run driver CaseSensitiveClassPath + */ + +import java.nio.file.FileAlreadyExistsException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; + + +// Excluded from running on MAC: a more comprehensive case sensitivity detection +// and fix mechanism is needed, which is planned to be implemented in the future. +public class CaseSensitiveClassPath { + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appJarUpper = appJar.replace("hello", "Hello"); + + OutputAnalyzer out = TestCommon.dump(appJar, TestCommon.list("Hello")); + TestCommon.checkDump(out); + + Path jarPath = Paths.get(appJar); + Path jarPathUpper = null; + + boolean fileExists = false; + try { + jarPathUpper = Files.createFile(Paths.get(appJarUpper)); + } catch (FileAlreadyExistsException faee) { + fileExists = true; + } + + if (!fileExists) { + try { + Files.copy(jarPath, jarPathUpper, StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + throw new java.lang.RuntimeException( + "Failed copying file from " + appJar + " to " + appJarUpper + ".", e); + } + } else { + jarPathUpper = Paths.get(appJarUpper); + } + boolean isSameFile = Files.isSameFile(jarPath, jarPathUpper); + + TestCommon.run("-Xlog:class+path=info,cds", "-cp", appJarUpper, "Hello") + .ifNoMappingFailure(output -> { + if (isSameFile) { + output.shouldContain("Hello World"); + } else { + output.shouldContain("shared class paths mismatch"); + output.shouldHaveExitValue(1); + } + }); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsDifferentCompactStrings.java 2019-07-24 08:26:21.885471348 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test CdsDifferentCompactStrings - * @summary CDS (class data sharing) requires the same -XX:[+-]CompactStrings - * setting between archive creation time and load time. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -public class CdsDifferentCompactStrings { - public static void main(String[] args) throws Exception { - createAndLoadSharedArchive("+", "-"); - createAndLoadSharedArchive("-", "+"); - } - - private static void createAndLoadSharedArchive(String create, String load) - throws Exception - { - String createCompactStringsArgument = "-XX:" + create + "CompactStrings"; - String loadCompactStringsArgument = "-XX:" + load + "CompactStrings"; - - OutputAnalyzer out = CDSTestUtils.createArchive(createCompactStringsArgument); - CDSTestUtils.checkDump(out); - - out = CDSTestUtils.runWithArchive(loadCompactStringsArgument); - CDSTestUtils.checkMappingFailure(out); - - out.shouldMatch("The shared archive file's CompactStrings " + - "setting .* does not equal the current CompactStrings setting") - .shouldHaveExitValue(1); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CdsDifferentCompactStrings.java 2019-07-24 08:26:21.597471358 -0400 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test CdsDifferentCompactStrings + * @summary CDS (class data sharing) requires the same -XX:[+-]CompactStrings + * setting between archive creation time and load time. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class CdsDifferentCompactStrings { + public static void main(String[] args) throws Exception { + createAndLoadSharedArchive("+", "-"); + createAndLoadSharedArchive("-", "+"); + } + + private static void createAndLoadSharedArchive(String create, String load) + throws Exception + { + String createCompactStringsArgument = "-XX:" + create + "CompactStrings"; + String loadCompactStringsArgument = "-XX:" + load + "CompactStrings"; + + OutputAnalyzer out = CDSTestUtils.createArchive(createCompactStringsArgument); + CDSTestUtils.checkDump(out); + + out = CDSTestUtils.runWithArchive(loadCompactStringsArgument); + CDSTestUtils.checkMappingFailure(out); + + out.shouldMatch("The shared archive file's CompactStrings " + + "setting .* does not equal the current CompactStrings setting") + .shouldHaveExitValue(1); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsDifferentObjectAlignment.java 2019-07-24 08:26:22.289471334 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test CdsDifferentObjectAlignment - * @summary Testing CDS (class data sharing) using varying object alignment. - * Using different object alignment for each dump/load pair. - * This is a negative test; using object alignment for loading that - * is different from object alignment for creating a CDS file - * should fail when loading. - * @requires vm.cds - * @requires vm.bits == 64 - * @library /test/lib - * @bug 8025642 - * @modules java.base/jdk.internal.misc - * java.management - * @run driver CdsDifferentObjectAlignment - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.Platform; - -public class CdsDifferentObjectAlignment { - - public static void main(String[] args) throws Exception { - createAndLoadSharedArchive(16, 64); - createAndLoadSharedArchive(64, 32); - } - - // Parameters are object alignment expressed in bytes - private static void - createAndLoadSharedArchive(int createAlignment, int loadAlignment) - throws Exception { - String createAlignmentArgument = "-XX:ObjectAlignmentInBytes=" + - createAlignment; - String loadAlignmentArgument = "-XX:ObjectAlignmentInBytes=" + - loadAlignment; - String expectedErrorMsg = - String.format( - "The shared archive file's ObjectAlignmentInBytes of %d " + - "does not equal the current ObjectAlignmentInBytes of %d", - createAlignment, - loadAlignment); - - CDSTestUtils.createArchiveAndCheck(createAlignmentArgument); - - OutputAnalyzer out = CDSTestUtils.runWithArchive(loadAlignmentArgument); - CDSTestUtils.checkExecExpectError(out, 1, expectedErrorMsg); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CdsDifferentObjectAlignment.java 2019-07-24 08:26:21.941471346 -0400 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test CdsDifferentObjectAlignment + * @summary Testing CDS (class data sharing) using varying object alignment. + * Using different object alignment for each dump/load pair. + * This is a negative test; using object alignment for loading that + * is different from object alignment for creating a CDS file + * should fail when loading. + * @requires vm.cds + * @requires vm.bits == 64 + * @library /test/lib + * @bug 8025642 + * @modules java.base/jdk.internal.misc + * java.management + * @run driver CdsDifferentObjectAlignment + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Platform; + +public class CdsDifferentObjectAlignment { + + public static void main(String[] args) throws Exception { + createAndLoadSharedArchive(16, 64); + createAndLoadSharedArchive(64, 32); + } + + // Parameters are object alignment expressed in bytes + private static void + createAndLoadSharedArchive(int createAlignment, int loadAlignment) + throws Exception { + String createAlignmentArgument = "-XX:ObjectAlignmentInBytes=" + + createAlignment; + String loadAlignmentArgument = "-XX:ObjectAlignmentInBytes=" + + loadAlignment; + String expectedErrorMsg = + String.format( + "The shared archive file's ObjectAlignmentInBytes of %d " + + "does not equal the current ObjectAlignmentInBytes of %d", + createAlignment, + loadAlignment); + + CDSTestUtils.createArchiveAndCheck(createAlignmentArgument); + + OutputAnalyzer out = CDSTestUtils.runWithArchive(loadAlignmentArgument); + CDSTestUtils.checkExecExpectError(out, 1, expectedErrorMsg); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/CdsSameObjectAlignment.java 2019-07-24 08:26:22.689471320 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test CdsSameObjectAlignment - * @summary Testing CDS (class data sharing) using varying object alignment. - * Using same object alignment for each dump/load pair - * @requires vm.cds - * @requires vm.bits == 64 - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run driver CdsSameObjectAlignment - */ - -import jdk.test.lib.Platform; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -public class CdsSameObjectAlignment { - public static void main(String[] args) throws Exception { - dumpAndLoadSharedArchive(8); - dumpAndLoadSharedArchive(16); - dumpAndLoadSharedArchive(32); - dumpAndLoadSharedArchive(64); - } - - private static void - dumpAndLoadSharedArchive(int objectAlignmentInBytes) throws Exception { - String objectAlignmentArg = "-XX:ObjectAlignmentInBytes=" - + objectAlignmentInBytes; - System.out.println("dumpAndLoadSharedArchive(): objectAlignmentInBytes = " - + objectAlignmentInBytes); - - CDSTestUtils.createArchiveAndCheck(objectAlignmentArg); - CDSTestUtils.runWithArchiveAndCheck(objectAlignmentArg); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CdsSameObjectAlignment.java 2019-07-24 08:26:22.353471332 -0400 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test CdsSameObjectAlignment + * @summary Testing CDS (class data sharing) using varying object alignment. + * Using same object alignment for each dump/load pair + * @requires vm.cds + * @requires vm.bits == 64 + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver CdsSameObjectAlignment + */ + +import jdk.test.lib.Platform; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class CdsSameObjectAlignment { + public static void main(String[] args) throws Exception { + dumpAndLoadSharedArchive(8); + dumpAndLoadSharedArchive(16); + dumpAndLoadSharedArchive(32); + dumpAndLoadSharedArchive(64); + } + + private static void + dumpAndLoadSharedArchive(int objectAlignmentInBytes) throws Exception { + String objectAlignmentArg = "-XX:ObjectAlignmentInBytes=" + + objectAlignmentInBytes; + System.out.println("dumpAndLoadSharedArchive(): objectAlignmentInBytes = " + + objectAlignmentInBytes); + + CDSTestUtils.createArchiveAndCheck(objectAlignmentArg); + CDSTestUtils.runWithArchiveAndCheck(objectAlignmentArg); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/CheckDefaultArchiveFile.java 2019-07-24 08:26:23.085471306 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test Default CDS archive file - * @summary JDK platforms/binaries do not support default CDS archive should - * not contain classes.jsa in the default location. - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI CheckDefaultArchiveFile - */ -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import jdk.test.lib.Platform; -import jdk.test.lib.cds.CDSTestUtils; -import jtreg.SkippedException; -import sun.hotspot.WhiteBox; - -public class CheckDefaultArchiveFile { - public static void main(String[] args) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - String osArch = Platform.getOsArch(); - String vmName = System.getProperty("java.vm.name"); - String vmString = vmName + "(" + osArch + ")"; - String jsaString = wb.getDefaultArchivePath(); - Path jsa = Paths.get(jsaString); - if (Platform.isDefaultCDSArchiveSupported()) { - if (Files.exists(jsa)) { - System.out.println("Passed. " + vmString + - ": has default classes.jsa file"); - } else { - throw new RuntimeException(vmString + "has no " + jsaString); - } - } else { - throw new SkippedException("Default CDS archive is not supported"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CheckDefaultArchiveFile.java 2019-07-24 08:26:22.757471318 -0400 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test Default CDS archive file + * @summary JDK platforms/binaries do not support default CDS archive should + * not contain classes.jsa in the default location. + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI CheckDefaultArchiveFile + */ +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.Platform; +import jdk.test.lib.cds.CDSTestUtils; +import jtreg.SkippedException; +import sun.hotspot.WhiteBox; + +public class CheckDefaultArchiveFile { + public static void main(String[] args) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + String osArch = Platform.getOsArch(); + String vmName = System.getProperty("java.vm.name"); + String vmString = vmName + "(" + osArch + ")"; + String jsaString = wb.getDefaultArchivePath(); + Path jsa = Paths.get(jsaString); + if (Platform.isDefaultCDSArchiveSupported()) { + if (Files.exists(jsa)) { + System.out.println("Passed. " + vmString + + ": has default classes.jsa file"); + } else { + throw new RuntimeException(vmString + "has no " + jsaString); + } + } else { + throw new SkippedException("Default CDS archive is not supported"); + } + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/CheckSharingWithDefaultArchive.java 2019-07-24 08:26:23.425471295 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test Default CDS archive - * @summary Sharing should be enabled by default on supported platform/binaries. - * No -Xshare:dump is needed. No -Xshare:auto or -Xshare:on in needed. - * Verify a set of well-known shared classes. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI CheckSharingWithDefaultArchive -showversion - */ -import jdk.test.lib.Platform; -import jtreg.SkippedException; -import sun.hotspot.WhiteBox; - -public class CheckSharingWithDefaultArchive { - public static void main(String[] args) throws Exception { - if (!Platform.isDefaultCDSArchiveSupported()) { - throw new SkippedException("Supported platform"); - } - - WhiteBox wb = WhiteBox.getWhiteBox(); - String classes[] = {"java.lang.Object", - "java.lang.String", - "java.lang.Class"}; - // If maping fails, sharing is disabled - if (wb.isSharingEnabled()) { - for (int i = 0; i < classes.length; i++) { - Class c = Class.forName(classes[i]); - if (wb.isSharedClass(c)) { - System.out.println(classes[i] + " is shared."); - } else { - throw new RuntimeException(classes[i] + " is not shared"); - } - } - } else { - throw new SkippedException("Sharing is not enabled."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CheckSharingWithDefaultArchive.java 2019-07-24 08:26:23.137471305 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test Default CDS archive + * @summary Sharing should be enabled by default on supported platform/binaries. + * No -Xshare:dump is needed. No -Xshare:auto or -Xshare:on in needed. + * Verify a set of well-known shared classes. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI CheckSharingWithDefaultArchive -showversion + */ +import jdk.test.lib.Platform; +import jtreg.SkippedException; +import sun.hotspot.WhiteBox; + +public class CheckSharingWithDefaultArchive { + public static void main(String[] args) throws Exception { + if (!Platform.isDefaultCDSArchiveSupported()) { + throw new SkippedException("Supported platform"); + } + + WhiteBox wb = WhiteBox.getWhiteBox(); + String classes[] = {"java.lang.Object", + "java.lang.String", + "java.lang.Class"}; + // If maping fails, sharing is disabled + if (wb.isSharingEnabled()) { + for (int i = 0; i < classes.length; i++) { + Class c = Class.forName(classes[i]); + if (wb.isSharedClass(c)) { + System.out.println(classes[i] + " is shared."); + } else { + throw new RuntimeException(classes[i] + " is not shared"); + } + } + } else { + throw new SkippedException("Sharing is not enabled."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/ClassLoaderTest.java 2019-07-24 08:26:23.781471282 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Initiating and defining classloader test. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @compile test-classes/HelloWB.java - * @compile test-classes/ForNameTest.java - * @compile test-classes/BootClassPathAppendHelper.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver ClassLoaderTest - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; - -public class ClassLoaderTest { - public static void main(String[] args) throws Exception { - JarBuilder.build(true, "ClassLoaderTest-WhiteBox", "sun/hotspot/WhiteBox"); - JarBuilder.getOrCreateHelloJar(); - JarBuilder.build("ClassLoaderTest-HelloWB", "HelloWB"); - JarBuilder.build("ClassLoaderTest-ForName", "ForNameTest"); - ClassLoaderTest test = new ClassLoaderTest(); - test.testBootLoader(); - test.testDefiningLoader(); - } - - public void testBootLoader() throws Exception { - String appJar = TestCommon.getTestJar("ClassLoaderTest-HelloWB.jar"); - String appClasses[] = {"HelloWB"}; - String whiteBoxJar = TestCommon.getTestJar("ClassLoaderTest-WhiteBox.jar"); - String bootClassPath = "-Xbootclasspath/a:" + appJar + - File.pathSeparator + whiteBoxJar; - - TestCommon.dump(appJar, appClasses, bootClassPath); - - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, bootClassPath, "HelloWB") - .assertNormalExit(output -> output.shouldContain("HelloWB.class.getClassLoader() = null")); - } - - public void testDefiningLoader() throws Exception { - // The boot loader should be used to load the class when it's - // on the bootclasspath, regardless who is the initiating classloader. - // In this test case, the AppClassLoader is the initiating classloader. - String helloJar = TestCommon.getTestJar("hello.jar"); - String appJar = helloJar + System.getProperty("path.separator") + - TestCommon.getTestJar("ClassLoaderTest-ForName.jar"); - String whiteBoxJar = TestCommon.getTestJar("ClassLoaderTest-WhiteBox.jar"); - String bootClassPath = "-Xbootclasspath/a:" + helloJar + - File.pathSeparator + whiteBoxJar; - - // Archive the "Hello" class from the appended bootclasspath - TestCommon.dump(helloJar, TestCommon.list("Hello"), bootClassPath); - - TestCommon.run("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, bootClassPath, "-Xlog:class+path=trace", "ForNameTest") - .assertNormalExit(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ClassLoaderTest.java 2019-07-24 08:26:23.477471293 -0400 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Initiating and defining classloader test. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @compile test-classes/HelloWB.java + * @compile test-classes/ForNameTest.java + * @compile test-classes/BootClassPathAppendHelper.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver ClassLoaderTest + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class ClassLoaderTest { + public static void main(String[] args) throws Exception { + JarBuilder.build(true, "ClassLoaderTest-WhiteBox", "sun/hotspot/WhiteBox"); + JarBuilder.getOrCreateHelloJar(); + JarBuilder.build("ClassLoaderTest-HelloWB", "HelloWB"); + JarBuilder.build("ClassLoaderTest-ForName", "ForNameTest"); + ClassLoaderTest test = new ClassLoaderTest(); + test.testBootLoader(); + test.testDefiningLoader(); + } + + public void testBootLoader() throws Exception { + String appJar = TestCommon.getTestJar("ClassLoaderTest-HelloWB.jar"); + String appClasses[] = {"HelloWB"}; + String whiteBoxJar = TestCommon.getTestJar("ClassLoaderTest-WhiteBox.jar"); + String bootClassPath = "-Xbootclasspath/a:" + appJar + + File.pathSeparator + whiteBoxJar; + + TestCommon.dump(appJar, appClasses, bootClassPath); + + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, bootClassPath, "HelloWB") + .assertNormalExit(output -> output.shouldContain("HelloWB.class.getClassLoader() = null")); + } + + public void testDefiningLoader() throws Exception { + // The boot loader should be used to load the class when it's + // on the bootclasspath, regardless who is the initiating classloader. + // In this test case, the AppClassLoader is the initiating classloader. + String helloJar = TestCommon.getTestJar("hello.jar"); + String appJar = helloJar + System.getProperty("path.separator") + + TestCommon.getTestJar("ClassLoaderTest-ForName.jar"); + String whiteBoxJar = TestCommon.getTestJar("ClassLoaderTest-WhiteBox.jar"); + String bootClassPath = "-Xbootclasspath/a:" + helloJar + + File.pathSeparator + whiteBoxJar; + + // Archive the "Hello" class from the appended bootclasspath + TestCommon.dump(helloJar, TestCommon.list("Hello"), bootClassPath); + + TestCommon.run("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, bootClassPath, "-Xlog:class+path=trace", "ForNameTest") + .assertNormalExit(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/ClassPathAttr.java 2019-07-24 08:26:24.185471268 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Class-Path: attribute in MANIFEST file - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @run driver ClassPathAttr - */ - -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; -import java.nio.file.Files; -import java.nio.file.FileAlreadyExistsException; -import java.nio.file.StandardCopyOption; -import java.nio.file.Paths; - - -public class ClassPathAttr { - - public static void main(String[] args) throws Exception { - buildCpAttr("cpattr1", "cpattr1.mf", "CpAttr1", "CpAttr1"); - buildCpAttr("cpattr1_long", "cpattr1_long.mf", "CpAttr1", "CpAttr1"); - buildCpAttr("cpattr2", "cpattr2.mf", "CpAttr2", "CpAttr2"); - buildCpAttr("cpattr3", "cpattr3.mf", "CpAttr3", "CpAttr2", "CpAttr3"); - buildCpAttr("cpattr4", "cpattr4.mf", "CpAttr4", - "CpAttr2", "CpAttr3", "CpAttr4", "CpAttr5"); - buildCpAttr("cpattr5_123456789_223456789_323456789_423456789_523456789_623456789", "cpattr5_extra_long.mf", "CpAttr5", "CpAttr5"); - - for (int i=1; i<=2; i++) { - String jar1 = TestCommon.getTestJar("cpattr1.jar"); - String jar4 = TestCommon.getTestJar("cpattr4.jar"); - if (i == 2) { - // Test case #2 -- same as #1, except we use cpattr1_long.jar, which has a super-long - // Class-Path: attribute. - jar1 = TestCommon.getTestJar("cpattr1_long.jar"); - } - String cp = jar1 + File.pathSeparator + jar4; - - TestCommon.testDump(cp, TestCommon.list("CpAttr1", - "CpAttr2", - "CpAttr3", - "CpAttr4", - "CpAttr5")); - - TestCommon.run( - "-cp", cp, - "CpAttr1") - .assertNormalExit(); - - // Logging test for class+path. - TestCommon.run( - "-Xlog:class+path", - "-cp", cp, - "CpAttr1") - .assertNormalExit(output -> { - output.shouldMatch("checking shared classpath entry: .*cpattr2.jar"); - output.shouldMatch("checking shared classpath entry: .*cpattr3.jar"); - }); - - // Make sure aliased TraceClassPaths still works - TestCommon.run( - "-XX:+TraceClassPaths", - "-cp", cp, - "CpAttr1") - .assertNormalExit(output -> { - output.shouldMatch("checking shared classpath entry: .*cpattr2.jar"); - output.shouldMatch("checking shared classpath entry: .*cpattr3.jar"); - }); - } - } - - private static void buildCpAttr(String jarName, String manifest, String enclosingClassName, String ...testClassNames) throws Exception { - String jarClassesDir = System.getProperty("test.classes") + File.separator + jarName + "_classes"; - try { Files.createDirectory(Paths.get(jarClassesDir)); } catch (FileAlreadyExistsException e) { } - - JarBuilder.compile(jarClassesDir, System.getProperty("test.src") + File.separator + - "test-classes" + File.separator + enclosingClassName + ".java"); - JarBuilder.buildWithManifest(jarName, manifest, jarClassesDir, testClassNames); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ClassPathAttr.java 2019-07-24 08:26:23.845471280 -0400 @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Class-Path: attribute in MANIFEST file + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @run driver ClassPathAttr + */ + +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.FileAlreadyExistsException; +import java.nio.file.StandardCopyOption; +import java.nio.file.Paths; + + +public class ClassPathAttr { + + public static void main(String[] args) throws Exception { + buildCpAttr("cpattr1", "cpattr1.mf", "CpAttr1", "CpAttr1"); + buildCpAttr("cpattr1_long", "cpattr1_long.mf", "CpAttr1", "CpAttr1"); + buildCpAttr("cpattr2", "cpattr2.mf", "CpAttr2", "CpAttr2"); + buildCpAttr("cpattr3", "cpattr3.mf", "CpAttr3", "CpAttr2", "CpAttr3"); + buildCpAttr("cpattr4", "cpattr4.mf", "CpAttr4", + "CpAttr2", "CpAttr3", "CpAttr4", "CpAttr5"); + buildCpAttr("cpattr5_123456789_223456789_323456789_423456789_523456789_623456789", "cpattr5_extra_long.mf", "CpAttr5", "CpAttr5"); + + for (int i=1; i<=2; i++) { + String jar1 = TestCommon.getTestJar("cpattr1.jar"); + String jar4 = TestCommon.getTestJar("cpattr4.jar"); + if (i == 2) { + // Test case #2 -- same as #1, except we use cpattr1_long.jar, which has a super-long + // Class-Path: attribute. + jar1 = TestCommon.getTestJar("cpattr1_long.jar"); + } + String cp = jar1 + File.pathSeparator + jar4; + + TestCommon.testDump(cp, TestCommon.list("CpAttr1", + "CpAttr2", + "CpAttr3", + "CpAttr4", + "CpAttr5")); + + TestCommon.run( + "-cp", cp, + "CpAttr1") + .assertNormalExit(); + + // Logging test for class+path. + TestCommon.run( + "-Xlog:class+path", + "-cp", cp, + "CpAttr1") + .assertNormalExit(output -> { + output.shouldMatch("checking shared classpath entry: .*cpattr2.jar"); + output.shouldMatch("checking shared classpath entry: .*cpattr3.jar"); + }); + + // Make sure aliased TraceClassPaths still works + TestCommon.run( + "-XX:+TraceClassPaths", + "-cp", cp, + "CpAttr1") + .assertNormalExit(output -> { + output.shouldMatch("checking shared classpath entry: .*cpattr2.jar"); + output.shouldMatch("checking shared classpath entry: .*cpattr3.jar"); + }); + } + } + + private static void buildCpAttr(String jarName, String manifest, String enclosingClassName, String ...testClassNames) throws Exception { + String jarClassesDir = System.getProperty("test.classes") + File.separator + jarName + "_classes"; + try { Files.createDirectory(Paths.get(jarClassesDir)); } catch (FileAlreadyExistsException e) { } + + JarBuilder.compile(jarClassesDir, System.getProperty("test.src") + File.separator + + "test-classes" + File.separator + enclosingClassName + ".java"); + JarBuilder.buildWithManifest(jarName, manifest, jarClassesDir, testClassNames); + } +} --- old/test/hotspot/jtreg/runtime/appcds/CommandLineFlagCombo.java 2019-07-24 08:26:24.581471254 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test CommandLineFlagCombo - * @requires vm.cds.archived.java.heap - * @comment This test explicitly chooses the type of GC to be used by sub-processes. It may conflict with the GC type set - * via the -vmoptions command line option of JTREG. vm.gc==null will help the test case to discard the explicitly passed - * vm options. - * @requires (vm.gc=="null") - * @summary Test command line flag combinations that - * could likely affect the behaviour of AppCDS - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission - * @compile test-classes/Hello.java - * @run main/othervm/timeout=240 -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. CommandLineFlagCombo - */ - -import jdk.test.lib.BuildHelper; -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; - -import sun.hotspot.code.Compiler; - -public class CommandLineFlagCombo { - - // shared base address test table - private static final String[] testTable = { - "-XX:+UseG1GC", "-XX:+UseSerialGC", "-XX:+UseParallelGC", "-XX:+UseConcMarkSweepGC", - "-XX:+FlightRecorder", - "-XX:+UseLargePages", // may only take effect on machines with large-pages - "-XX:+UseCompressedClassPointers", - "-XX:+UseCompressedOops", - "-XX:ObjectAlignmentInBytes=16", - "-XX:ObjectAlignmentInBytes=32", - "-XX:ObjectAlignmentInBytes=64" - }; - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String classList[] = {"Hello"}; - - for (String testEntry : testTable) { - System.out.println("CommandLineFlagCombo = " + testEntry); - - if (skipTestCase(testEntry)) - continue; - - OutputAnalyzer dumpOutput = TestCommon.dump(appJar, classList, testEntry); - if (!TestCommon.isDynamicArchive()) { - TestCommon.checkDump(dumpOutput, "Loading classes to share"); - } else { - if (testEntry.contains("ObjectAlignmentInBytes")) { - dumpOutput.shouldHaveExitValue(1) - .shouldMatch("The shared archive file's ObjectAlignmentInBytes of .* does not equal the current ObjectAlignmentInBytes of"); - } else { - TestCommon.checkDump(dumpOutput, "Loading classes to share"); - } - } - - if ((TestCommon.isDynamicArchive() && !testEntry.contains("ObjectAlignmentInBytes")) || - !TestCommon.isDynamicArchive()) { - OutputAnalyzer execOutput = TestCommon.exec(appJar, testEntry, "Hello"); - TestCommon.checkExec(execOutput, "Hello World"); - } - } - - for (int i=0; i<2; i++) { - String g1Flag, serialFlag; - - // Interned strings are supported only with G1GC. However, we should not crash if: - // 0: archive has shared strings, but run time doesn't support shared strings - // 1: archive has no shared strings, but run time supports shared strings - - String dump_g1Flag = "-XX:" + (i == 0 ? "+" : "-") + "UseG1GC"; - String run_g1Flag = "-XX:" + (i != 0 ? "+" : "-") + "UseG1GC"; - String dump_serialFlag = "-XX:" + (i != 0 ? "+" : "-") + "UseSerialGC"; - String run_serialFlag = "-XX:" + (i == 0 ? "+" : "-") + "UseSerialGC"; - - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, classList, dump_g1Flag, dump_serialFlag); - - TestCommon.checkDump(dumpOutput, "Loading classes to share"); - - OutputAnalyzer execOutput = TestCommon.exec(appJar, run_g1Flag, run_serialFlag, "Hello"); - TestCommon.checkExec(execOutput, "Hello World"); - } - } - - private static boolean skipTestCase(String testEntry) throws Exception { - if (Platform.is32bit()) - { - if (testEntry.equals("-XX:+UseCompressedOops") || - testEntry.equals("-XX:+UseCompressedClassPointers") || - testEntry.contains("ObjectAlignmentInBytes") ) - { - System.out.println("Test case not applicable on 32-bit platforms"); - return true; - } - } - - if (Compiler.isGraalEnabled() && testEntry.equals("-XX:+UseConcMarkSweepGC")) - { - System.out.println("Graal does not support CMS"); - return true; - } - - return false; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CommandLineFlagCombo.java 2019-07-24 08:26:24.249471266 -0400 @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test CommandLineFlagCombo + * @requires vm.cds.archived.java.heap + * @comment This test explicitly chooses the type of GC to be used by sub-processes. It may conflict with the GC type set + * via the -vmoptions command line option of JTREG. vm.gc==null will help the test case to discard the explicitly passed + * vm options. + * @requires (vm.gc=="null") + * @summary Test command line flag combinations that + * could likely affect the behaviour of AppCDS + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission + * @compile test-classes/Hello.java + * @run main/othervm/timeout=240 -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. CommandLineFlagCombo + */ + +import jdk.test.lib.BuildHelper; +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; + +import sun.hotspot.code.Compiler; + +public class CommandLineFlagCombo { + + // shared base address test table + private static final String[] testTable = { + "-XX:+UseG1GC", "-XX:+UseSerialGC", "-XX:+UseParallelGC", "-XX:+UseConcMarkSweepGC", + "-XX:+FlightRecorder", + "-XX:+UseLargePages", // may only take effect on machines with large-pages + "-XX:+UseCompressedClassPointers", + "-XX:+UseCompressedOops", + "-XX:ObjectAlignmentInBytes=16", + "-XX:ObjectAlignmentInBytes=32", + "-XX:ObjectAlignmentInBytes=64" + }; + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String classList[] = {"Hello"}; + + for (String testEntry : testTable) { + System.out.println("CommandLineFlagCombo = " + testEntry); + + if (skipTestCase(testEntry)) + continue; + + OutputAnalyzer dumpOutput = TestCommon.dump(appJar, classList, testEntry); + if (!TestCommon.isDynamicArchive()) { + TestCommon.checkDump(dumpOutput, "Loading classes to share"); + } else { + if (testEntry.contains("ObjectAlignmentInBytes")) { + dumpOutput.shouldHaveExitValue(1) + .shouldMatch("The shared archive file's ObjectAlignmentInBytes of .* does not equal the current ObjectAlignmentInBytes of"); + } else { + TestCommon.checkDump(dumpOutput, "Loading classes to share"); + } + } + + if ((TestCommon.isDynamicArchive() && !testEntry.contains("ObjectAlignmentInBytes")) || + !TestCommon.isDynamicArchive()) { + OutputAnalyzer execOutput = TestCommon.exec(appJar, testEntry, "Hello"); + TestCommon.checkExec(execOutput, "Hello World"); + } + } + + for (int i=0; i<2; i++) { + String g1Flag, serialFlag; + + // Interned strings are supported only with G1GC. However, we should not crash if: + // 0: archive has shared strings, but run time doesn't support shared strings + // 1: archive has no shared strings, but run time supports shared strings + + String dump_g1Flag = "-XX:" + (i == 0 ? "+" : "-") + "UseG1GC"; + String run_g1Flag = "-XX:" + (i != 0 ? "+" : "-") + "UseG1GC"; + String dump_serialFlag = "-XX:" + (i != 0 ? "+" : "-") + "UseSerialGC"; + String run_serialFlag = "-XX:" + (i == 0 ? "+" : "-") + "UseSerialGC"; + + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, classList, dump_g1Flag, dump_serialFlag); + + TestCommon.checkDump(dumpOutput, "Loading classes to share"); + + OutputAnalyzer execOutput = TestCommon.exec(appJar, run_g1Flag, run_serialFlag, "Hello"); + TestCommon.checkExec(execOutput, "Hello World"); + } + } + + private static boolean skipTestCase(String testEntry) throws Exception { + if (Platform.is32bit()) + { + if (testEntry.equals("-XX:+UseCompressedOops") || + testEntry.equals("-XX:+UseCompressedClassPointers") || + testEntry.contains("ObjectAlignmentInBytes") ) + { + System.out.println("Test case not applicable on 32-bit platforms"); + return true; + } + } + + if (Compiler.isGraalEnabled() && testEntry.equals("-XX:+UseConcMarkSweepGC")) + { + System.out.println("Graal does not support CMS"); + return true; + } + + return false; + } +} --- old/test/hotspot/jtreg/runtime/appcds/CommandLineFlagComboNegative.java 2019-07-24 08:26:24.961471241 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test CommandLineFlagComboNegative - * @summary Test command line flag combinations that differ between - * the dump and execute steps, in such way that they cause errors - * E.g. use compressed oops for creating and archive, but then - * execute w/o compressed oops - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver CommandLineFlagComboNegative - */ - -import java.util.ArrayList; -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; - -public class CommandLineFlagComboNegative { - - private class TestVector { - public String testOptionForDumpStep; - public String testOptionForExecuteStep; - public String expectedErrorMsg; - public int expectedErrorCode; - - public TestVector(String testOptionForDumpStep, String testOptionForExecuteStep, - String expectedErrorMsg, int expectedErrorCode) { - this.testOptionForDumpStep=testOptionForDumpStep; - this.testOptionForExecuteStep=testOptionForExecuteStep; - this.expectedErrorMsg=expectedErrorMsg; - this.expectedErrorCode=expectedErrorCode; - } - } - - private ArrayList testTable = new ArrayList(); - - private void initTestTable() { - // These options are not applicable on 32-bit platforms - if (Platform.is64bit()) { - testTable.add( new TestVector("-XX:ObjectAlignmentInBytes=8", "-XX:ObjectAlignmentInBytes=16", - "An error has occurred while processing the shared archive file", 1) ); - if (!TestCommon.isDynamicArchive()) { - testTable.add( new TestVector("-XX:ObjectAlignmentInBytes=64", "-XX:ObjectAlignmentInBytes=32", - "An error has occurred while processing the shared archive file", 1) ); - } - testTable.add( new TestVector("-XX:+UseCompressedOops", "-XX:-UseCompressedOops", - "Class data sharing is inconsistent with other specified options", 1) ); - testTable.add( new TestVector("-XX:+UseCompressedClassPointers", "-XX:-UseCompressedClassPointers", - "Class data sharing is inconsistent with other specified options", 1) ); - } - } - - private void runTests() throws Exception - { - for (TestVector testEntry : testTable) { - System.out.println("CommandLineFlagComboNegative: dump = " + testEntry.testOptionForDumpStep); - System.out.println("CommandLineFlagComboNegative: execute = " + testEntry.testOptionForExecuteStep); - - String appJar = JarBuilder.getOrCreateHelloJar(); - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, new String[] {"Hello"}, testEntry.testOptionForDumpStep); - - TestCommon.checkDump(dumpOutput, "Loading classes to share"); - - OutputAnalyzer execOutput = TestCommon.exec(appJar, testEntry.testOptionForExecuteStep, "Hello"); - execOutput.shouldContain(testEntry.expectedErrorMsg); - execOutput.shouldHaveExitValue(testEntry.expectedErrorCode); - } - } - - public static void main(String[] args) throws Exception { - CommandLineFlagComboNegative thisClass = new CommandLineFlagComboNegative(); - thisClass.initTestTable(); - thisClass.runTests(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CommandLineFlagComboNegative.java 2019-07-24 08:26:24.637471252 -0400 @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test CommandLineFlagComboNegative + * @summary Test command line flag combinations that differ between + * the dump and execute steps, in such way that they cause errors + * E.g. use compressed oops for creating and archive, but then + * execute w/o compressed oops + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver CommandLineFlagComboNegative + */ + +import java.util.ArrayList; +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; + +public class CommandLineFlagComboNegative { + + private class TestVector { + public String testOptionForDumpStep; + public String testOptionForExecuteStep; + public String expectedErrorMsg; + public int expectedErrorCode; + + public TestVector(String testOptionForDumpStep, String testOptionForExecuteStep, + String expectedErrorMsg, int expectedErrorCode) { + this.testOptionForDumpStep=testOptionForDumpStep; + this.testOptionForExecuteStep=testOptionForExecuteStep; + this.expectedErrorMsg=expectedErrorMsg; + this.expectedErrorCode=expectedErrorCode; + } + } + + private ArrayList testTable = new ArrayList(); + + private void initTestTable() { + // These options are not applicable on 32-bit platforms + if (Platform.is64bit()) { + testTable.add( new TestVector("-XX:ObjectAlignmentInBytes=8", "-XX:ObjectAlignmentInBytes=16", + "An error has occurred while processing the shared archive file", 1) ); + if (!TestCommon.isDynamicArchive()) { + testTable.add( new TestVector("-XX:ObjectAlignmentInBytes=64", "-XX:ObjectAlignmentInBytes=32", + "An error has occurred while processing the shared archive file", 1) ); + } + testTable.add( new TestVector("-XX:+UseCompressedOops", "-XX:-UseCompressedOops", + "Class data sharing is inconsistent with other specified options", 1) ); + testTable.add( new TestVector("-XX:+UseCompressedClassPointers", "-XX:-UseCompressedClassPointers", + "Class data sharing is inconsistent with other specified options", 1) ); + } + } + + private void runTests() throws Exception + { + for (TestVector testEntry : testTable) { + System.out.println("CommandLineFlagComboNegative: dump = " + testEntry.testOptionForDumpStep); + System.out.println("CommandLineFlagComboNegative: execute = " + testEntry.testOptionForExecuteStep); + + String appJar = JarBuilder.getOrCreateHelloJar(); + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, new String[] {"Hello"}, testEntry.testOptionForDumpStep); + + TestCommon.checkDump(dumpOutput, "Loading classes to share"); + + OutputAnalyzer execOutput = TestCommon.exec(appJar, testEntry.testOptionForExecuteStep, "Hello"); + execOutput.shouldContain(testEntry.expectedErrorMsg); + execOutput.shouldHaveExitValue(testEntry.expectedErrorCode); + } + } + + public static void main(String[] args) throws Exception { + CommandLineFlagComboNegative thisClass = new CommandLineFlagComboNegative(); + thisClass.initTestTable(); + thisClass.runTests(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/CompilerUtils.java 2019-07-24 08:26:25.349471228 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import javax.tools.JavaCompiler; -import javax.tools.StandardJavaFileManager; -import javax.tools.StandardLocation; -import javax.tools.ToolProvider; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * This class consists exclusively of static utility methods for invoking the - * java compiler. - * - * This class will eventually move to jdk.testlibrary. - */ - -public final class CompilerUtils { - private CompilerUtils() { } - - /** - * Compile all the java sources in {@code /**} to - * {@code /**}. The destination directory will be created if - * it doesn't exist. - * - * All warnings/errors emitted by the compiler are output to System.out/err. - * - * @return true if the compilation is successful - * - * @throws IOException if there is an I/O error scanning the source tree or - * creating the destination directory - */ - public static boolean compile(Path source, Path destination, String ... options) - throws IOException - { - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - StandardJavaFileManager jfm = compiler.getStandardFileManager(null, null, null); - - List sources - = Files.find(source, Integer.MAX_VALUE, - (file, attrs) -> (file.toString().endsWith(".java"))) - .collect(Collectors.toList()); - - Files.createDirectories(destination); - jfm.setLocationFromPaths(StandardLocation.CLASS_OUTPUT, - Arrays.asList(destination)); - - List opts = Arrays.asList(options); - JavaCompiler.CompilationTask task - = compiler.getTask(null, jfm, null, opts, null, - jfm.getJavaFileObjectsFromPaths(sources)); - - return task.call(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/CompilerUtils.java 2019-07-24 08:26:25.009471239 -0400 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import javax.tools.JavaCompiler; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * This class consists exclusively of static utility methods for invoking the + * java compiler. + * + * This class will eventually move to jdk.testlibrary. + */ + +public final class CompilerUtils { + private CompilerUtils() { } + + /** + * Compile all the java sources in {@code /**} to + * {@code /**}. The destination directory will be created if + * it doesn't exist. + * + * All warnings/errors emitted by the compiler are output to System.out/err. + * + * @return true if the compilation is successful + * + * @throws IOException if there is an I/O error scanning the source tree or + * creating the destination directory + */ + public static boolean compile(Path source, Path destination, String ... options) + throws IOException + { + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + StandardJavaFileManager jfm = compiler.getStandardFileManager(null, null, null); + + List sources + = Files.find(source, Integer.MAX_VALUE, + (file, attrs) -> (file.toString().endsWith(".java"))) + .collect(Collectors.toList()); + + Files.createDirectories(destination); + jfm.setLocationFromPaths(StandardLocation.CLASS_OUTPUT, + Arrays.asList(destination)); + + List opts = Arrays.asList(options); + JavaCompiler.CompilationTask task + = compiler.getTask(null, jfm, null, opts, null, + jfm.getJavaFileObjectsFromPaths(sources)); + + return task.call(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/DirClasspathTest.java 2019-07-24 08:26:25.709471215 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Handling of directories in -cp is based on the classlist - * @requires vm.cds - * @library /test/lib - * @modules jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @compile test-classes/Super.java - * @run driver DirClasspathTest - */ - -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; - -public class DirClasspathTest { - private static final int MAX_PATH = 260; - - // We add helloJar into the classpath to be compatible with TestCommon.DYNAMIC_DUMP - static OutputAnalyzer doDump(String path, String classList[], - String... suffix) throws Exception { - String helloJar = JarBuilder.getOrCreateHelloJar(); - return TestCommon.dump(helloJar + File.pathSeparator + path, classList, suffix); - } - - public static void main(String[] args) throws Exception { - File dir = new File(System.getProperty("user.dir")); - File emptydir = new File(dir, "emptydir"); - emptydir.mkdir(); - - - ///////////////////////////////////////////////////////////////// - // The classlist only contains boot class in following test cases - ///////////////////////////////////////////////////////////////// - String bootClassList[] = {"java/lang/Object"}; - - // Empty dir in -cp: should be OK - OutputAnalyzer output; - output = doDump(emptydir.getPath(), bootClassList, "-Xlog:class+path=info"); - TestCommon.checkDump(output); - - // Long path to empty dir in -cp: should be OK - Path classDir = Paths.get(System.getProperty("test.classes")); - Path destDir = classDir; - int subDirLen = MAX_PATH - classDir.toString().length() - 2; - if (subDirLen > 0) { - char[] chars = new char[subDirLen]; - Arrays.fill(chars, 'x'); - String subPath = new String(chars); - destDir = Paths.get(System.getProperty("test.classes"), subPath); - } - File longDir = destDir.toFile(); - longDir.mkdir(); - File subDir = new File(longDir, "subdir"); - subDir.mkdir(); - output = doDump(subDir.getPath(), bootClassList, "-Xlog:class+path=info"); - TestCommon.checkDump(output); - - // Non-empty dir in -cp: should be OK - // is not empty because it has at least one subdirectory, i.e., - output = doDump(dir.getPath(), bootClassList, "-Xlog:class+path=info"); - TestCommon.checkDump(output); - - // Long path to non-empty dir in -cp: should be OK - // is not empty because it has at least one subdirectory, i.e., - output = doDump(longDir.getPath(), bootClassList, "-Xlog:class+path=info"); - TestCommon.checkDump(output); - - ///////////////////////////////////////////////////////////////// - // The classlist contains non-boot class in following test cases - ///////////////////////////////////////////////////////////////// - String appClassList[] = {"java/lang/Object", "com/sun/tools/javac/Main"}; - - // Non-empty dir in -cp: should be OK (as long as no classes were loaded from there) - output = doDump(dir.getPath(), appClassList, "-Xlog:class+path=info"); - TestCommon.checkDump(output); - - // Long path to non-empty dir in -cp: should be OK (as long as no classes were loaded from there) - output = doDump(longDir.getPath(), appClassList, "-Xlog:class+path=info"); - TestCommon.checkDump(output); - - ///////////////////////////////////////////////////////////////// - // Loading an app class from a directory - ///////////////////////////////////////////////////////////////// - String appClassList2[] = {"Super", "java/lang/Object", "com/sun/tools/javac/Main"}; - // Non-empty dir in -cp: should report error if a class is loaded from it - output = doDump(classDir.toString(), appClassList2, "-Xlog:class+path=info,class+load=trace"); - output.shouldNotHaveExitValue(0); - output.shouldContain("Cannot have non-empty directory in paths"); - - // Long path to non-empty dir in -cp: should report error if a class is loaded from it - File srcClass = new File(classDir.toFile(), "Super.class"); - File destClass = new File(longDir, "Super.class"); - Files.copy(srcClass.toPath(), destClass.toPath()); - output = doDump(longDir.getPath(), appClassList2, "-Xlog:class+path=info"); - output.shouldNotHaveExitValue(0); - output.shouldContain("Cannot have non-empty directory in paths"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/DirClasspathTest.java 2019-07-24 08:26:25.417471225 -0400 @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Handling of directories in -cp is based on the classlist + * @requires vm.cds + * @library /test/lib + * @modules jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @compile test-classes/Super.java + * @run driver DirClasspathTest + */ + +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; + +public class DirClasspathTest { + private static final int MAX_PATH = 260; + + // We add helloJar into the classpath to be compatible with TestCommon.DYNAMIC_DUMP + static OutputAnalyzer doDump(String path, String classList[], + String... suffix) throws Exception { + String helloJar = JarBuilder.getOrCreateHelloJar(); + return TestCommon.dump(helloJar + File.pathSeparator + path, classList, suffix); + } + + public static void main(String[] args) throws Exception { + File dir = new File(System.getProperty("user.dir")); + File emptydir = new File(dir, "emptydir"); + emptydir.mkdir(); + + + ///////////////////////////////////////////////////////////////// + // The classlist only contains boot class in following test cases + ///////////////////////////////////////////////////////////////// + String bootClassList[] = {"java/lang/Object"}; + + // Empty dir in -cp: should be OK + OutputAnalyzer output; + output = doDump(emptydir.getPath(), bootClassList, "-Xlog:class+path=info"); + TestCommon.checkDump(output); + + // Long path to empty dir in -cp: should be OK + Path classDir = Paths.get(System.getProperty("test.classes")); + Path destDir = classDir; + int subDirLen = MAX_PATH - classDir.toString().length() - 2; + if (subDirLen > 0) { + char[] chars = new char[subDirLen]; + Arrays.fill(chars, 'x'); + String subPath = new String(chars); + destDir = Paths.get(System.getProperty("test.classes"), subPath); + } + File longDir = destDir.toFile(); + longDir.mkdir(); + File subDir = new File(longDir, "subdir"); + subDir.mkdir(); + output = doDump(subDir.getPath(), bootClassList, "-Xlog:class+path=info"); + TestCommon.checkDump(output); + + // Non-empty dir in -cp: should be OK + // is not empty because it has at least one subdirectory, i.e., + output = doDump(dir.getPath(), bootClassList, "-Xlog:class+path=info"); + TestCommon.checkDump(output); + + // Long path to non-empty dir in -cp: should be OK + // is not empty because it has at least one subdirectory, i.e., + output = doDump(longDir.getPath(), bootClassList, "-Xlog:class+path=info"); + TestCommon.checkDump(output); + + ///////////////////////////////////////////////////////////////// + // The classlist contains non-boot class in following test cases + ///////////////////////////////////////////////////////////////// + String appClassList[] = {"java/lang/Object", "com/sun/tools/javac/Main"}; + + // Non-empty dir in -cp: should be OK (as long as no classes were loaded from there) + output = doDump(dir.getPath(), appClassList, "-Xlog:class+path=info"); + TestCommon.checkDump(output); + + // Long path to non-empty dir in -cp: should be OK (as long as no classes were loaded from there) + output = doDump(longDir.getPath(), appClassList, "-Xlog:class+path=info"); + TestCommon.checkDump(output); + + ///////////////////////////////////////////////////////////////// + // Loading an app class from a directory + ///////////////////////////////////////////////////////////////// + String appClassList2[] = {"Super", "java/lang/Object", "com/sun/tools/javac/Main"}; + // Non-empty dir in -cp: should report error if a class is loaded from it + output = doDump(classDir.toString(), appClassList2, "-Xlog:class+path=info,class+load=trace"); + output.shouldNotHaveExitValue(0); + output.shouldContain("Cannot have non-empty directory in paths"); + + // Long path to non-empty dir in -cp: should report error if a class is loaded from it + File srcClass = new File(classDir.toFile(), "Super.class"); + File destClass = new File(longDir, "Super.class"); + Files.copy(srcClass.toPath(), destClass.toPath()); + output = doDump(longDir.getPath(), appClassList2, "-Xlog:class+path=info"); + output.shouldNotHaveExitValue(0); + output.shouldContain("Cannot have non-empty directory in paths"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/DumpClassList.java 2019-07-24 08:26:26.065471203 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary DumpLoadedClassList should exclude generated classes, classes in bootclasspath/a and - * --patch-module. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @compile test-classes/ArrayListTest.java - * @run driver DumpClassList - */ - -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class DumpClassList { - public static void main(String[] args) throws Exception { - // build The app - String[] appClass = new String[] {"ArrayListTest"}; - String classList = "app.list"; - - JarBuilder.build("app", appClass[0]); - String appJar = TestCommon.getTestJar("app.jar"); - - // build patch-module - String source = "package java.lang; " + - "public class NewClass { " + - " static { " + - " System.out.println(\"NewClass\"); "+ - " } " + - "}"; - - ClassFileInstaller.writeClassToDisk("java/lang/NewClass", - InMemoryJavaCompiler.compile("java.lang.NewClass", source, "--patch-module=java.base"), - System.getProperty("test.classes")); - - String patchJar = JarBuilder.build("javabase", "java/lang/NewClass"); - - // build bootclasspath/a - String source2 = "package boot.append; " + - "public class Foo { " + - " static { " + - " System.out.println(\"Foo\"); " + - " } " + - "}"; - - ClassFileInstaller.writeClassToDisk("boot/append/Foo", - InMemoryJavaCompiler.compile("boot.append.Foo", source2), - System.getProperty("test.classes")); - - String appendJar = JarBuilder.build("bootappend", "boot/append/Foo"); - - // dump class list - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - true, - "-XX:DumpLoadedClassList=" + classList, - "--patch-module=java.base=" + patchJar, - "-Xbootclasspath/a:" + appendJar, - "-cp", - appJar, - appClass[0]); - OutputAnalyzer output = TestCommon.executeAndLog(pb, "dumpClassList"); - TestCommon.checkExecReturn(output, 0, true, - "hello world", - "skip writing class java/lang/NewClass") // skip classes outside of jrt image - .shouldNotContain("skip writing class boot/append/Foo"); // but classes on -Xbootclasspath/a should not be skipped - - output = TestCommon.createArchive(appJar, appClass, - "-Xbootclasspath/a:" + appendJar, - "-Xlog:class+load", - "-XX:SharedClassListFile=" + classList); - TestCommon.checkDump(output) - .shouldNotContain("Preload Warning: Cannot find java/lang/invoke/LambdaForm") - .shouldNotContain("Preload Warning: Cannot find boot/append/Foo") - .shouldContain("[info][class,load] boot.append.Foo"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/DumpClassList.java 2019-07-24 08:26:25.769471213 -0400 @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary DumpLoadedClassList should exclude generated classes, classes in bootclasspath/a and + * --patch-module. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @compile test-classes/ArrayListTest.java + * @run driver DumpClassList + */ + +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class DumpClassList { + public static void main(String[] args) throws Exception { + // build The app + String[] appClass = new String[] {"ArrayListTest"}; + String classList = "app.list"; + + JarBuilder.build("app", appClass[0]); + String appJar = TestCommon.getTestJar("app.jar"); + + // build patch-module + String source = "package java.lang; " + + "public class NewClass { " + + " static { " + + " System.out.println(\"NewClass\"); "+ + " } " + + "}"; + + ClassFileInstaller.writeClassToDisk("java/lang/NewClass", + InMemoryJavaCompiler.compile("java.lang.NewClass", source, "--patch-module=java.base"), + System.getProperty("test.classes")); + + String patchJar = JarBuilder.build("javabase", "java/lang/NewClass"); + + // build bootclasspath/a + String source2 = "package boot.append; " + + "public class Foo { " + + " static { " + + " System.out.println(\"Foo\"); " + + " } " + + "}"; + + ClassFileInstaller.writeClassToDisk("boot/append/Foo", + InMemoryJavaCompiler.compile("boot.append.Foo", source2), + System.getProperty("test.classes")); + + String appendJar = JarBuilder.build("bootappend", "boot/append/Foo"); + + // dump class list + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + true, + "-XX:DumpLoadedClassList=" + classList, + "--patch-module=java.base=" + patchJar, + "-Xbootclasspath/a:" + appendJar, + "-cp", + appJar, + appClass[0]); + OutputAnalyzer output = TestCommon.executeAndLog(pb, "dumpClassList"); + TestCommon.checkExecReturn(output, 0, true, + "hello world", + "skip writing class java/lang/NewClass") // skip classes outside of jrt image + .shouldNotContain("skip writing class boot/append/Foo"); // but classes on -Xbootclasspath/a should not be skipped + + output = TestCommon.createArchive(appJar, appClass, + "-Xbootclasspath/a:" + appendJar, + "-Xlog:class+load", + "-XX:SharedClassListFile=" + classList); + TestCommon.checkDump(output) + .shouldNotContain("Preload Warning: Cannot find java/lang/invoke/LambdaForm") + .shouldNotContain("Preload Warning: Cannot find boot/append/Foo") + .shouldContain("[info][class,load] boot.append.Foo"); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/DumpSharedDictionary.java 2019-07-24 08:26:26.461471189 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 8130072 - * @summary Check that Shared Dictionary is printed out with jcmd - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * @run driver DumpSharedDictionary - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; - -public class DumpSharedDictionary { - - public static void main(String[] args) throws Exception { - if (args.length == 0) { - // Start this process - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - "-XX:SharedArchiveFile=./DumpSharedDictionary.jsa", - "-Xshare:dump"); - - OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "dump"); - out.shouldHaveExitValue(0); - - String testjdkPath = System.getProperty("test.jdk"); - - pb = ProcessTools.createJavaProcessBuilder( - "-XX:SharedArchiveFile=./DumpSharedDictionary.jsa", - "-Dtest.jdk=" + testjdkPath, - "-Xshare:on", "DumpSharedDictionary", "test"); - - out = CDSTestUtils.executeAndLog(pb, "exec"); - if (!CDSTestUtils.isUnableToMap(out)) { - out.shouldHaveExitValue(0); - } - } else { - // Grab my own PID - String pid = Long.toString(ProcessTools.getProcessId()); - - ProcessBuilder pb = new ProcessBuilder(); - pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary"}); - OutputAnalyzer output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary"); - try { - output.shouldContain("Shared Dictionary statistics:"); - output.shouldContain("Number of buckets"); - output.shouldContain("Number of entries"); - output.shouldContain("Maximum bucket size"); - } catch (RuntimeException e) { - output.shouldContain("Unknown diagnostic command"); - } - - pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary", "-verbose"}); - output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary-verbose"); - try { - output.shouldContain("Shared Dictionary"); - output.shouldContain("Dictionary for loader data: 0x"); - output.shouldContain("^java.lang.String"); - } catch (RuntimeException e) { - output.shouldContain("Unknown diagnostic command"); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/DumpSharedDictionary.java 2019-07-24 08:26:26.125471200 -0400 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8130072 + * @summary Check that Shared Dictionary is printed out with jcmd + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @run driver DumpSharedDictionary + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.JDKToolFinder; + +public class DumpSharedDictionary { + + public static void main(String[] args) throws Exception { + if (args.length == 0) { + // Start this process + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:SharedArchiveFile=./DumpSharedDictionary.jsa", + "-Xshare:dump"); + + OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "dump"); + out.shouldHaveExitValue(0); + + String testjdkPath = System.getProperty("test.jdk"); + + pb = ProcessTools.createJavaProcessBuilder( + "-XX:SharedArchiveFile=./DumpSharedDictionary.jsa", + "-Dtest.jdk=" + testjdkPath, + "-Xshare:on", "DumpSharedDictionary", "test"); + + out = CDSTestUtils.executeAndLog(pb, "exec"); + if (!CDSTestUtils.isUnableToMap(out)) { + out.shouldHaveExitValue(0); + } + } else { + // Grab my own PID + String pid = Long.toString(ProcessTools.getProcessId()); + + ProcessBuilder pb = new ProcessBuilder(); + pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary"}); + OutputAnalyzer output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary"); + try { + output.shouldContain("Shared Dictionary statistics:"); + output.shouldContain("Number of buckets"); + output.shouldContain("Number of entries"); + output.shouldContain("Maximum bucket size"); + } catch (RuntimeException e) { + output.shouldContain("Unknown diagnostic command"); + } + + pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary", "-verbose"}); + output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary-verbose"); + try { + output.shouldContain("Shared Dictionary"); + output.shouldContain("Dictionary for loader data: 0x"); + output.shouldContain("^java.lang.String"); + } catch (RuntimeException e) { + output.shouldContain("Unknown diagnostic command"); + } + } + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/DumpSymbolAndStringTable.java 2019-07-24 08:26:26.813471177 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 8059510 - * @summary Test jcmd VM.symboltable, VM.stringtable and VM.systemdictionary options - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run main/othervm -XX:+UnlockDiagnosticVMOptions DumpSymbolAndStringTable - */ -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; - -public class DumpSymbolAndStringTable { - public static void main(String[] args) throws Exception { - // Grab my own PID - String pid = Long.toString(ProcessTools.getProcessId()); - - ProcessBuilder pb = new ProcessBuilder(); - pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.symboltable", "-verbose"}); - OutputAnalyzer output = CDSTestUtils.executeAndLog(pb, "jcmd-symboltable"); - try { - output.shouldContain("24 2: DumpSymbolAndStringTable\n"); - } catch (RuntimeException e) { - output.shouldContain("Unknown diagnostic command"); - } - - pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.stringtable", "-verbose"}); - output = CDSTestUtils.executeAndLog(pb, "jcmd-stringtable"); - try { - output.shouldContain("16: java.lang.String\n"); - } catch (RuntimeException e) { - output.shouldContain("Unknown diagnostic command"); - } - - pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary"}); - output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary"); - try { - output.shouldContain("System Dictionary for 'app' class loader statistics:"); - output.shouldContain("Number of buckets"); - output.shouldContain("Number of entries"); - output.shouldContain("Maximum bucket size"); - } catch (RuntimeException e) { - output.shouldContain("Unknown diagnostic command"); - } - - pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary", "-verbose"}); - output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary"); - try { - output.shouldContain("Dictionary for loader data: 0x"); - output.shouldContain("^java.lang.String"); - } catch (RuntimeException e) { - output.shouldContain("Unknown diagnostic command"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/DumpSymbolAndStringTable.java 2019-07-24 08:26:26.525471187 -0400 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8059510 + * @summary Test jcmd VM.symboltable, VM.stringtable and VM.systemdictionary options + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run main/othervm -XX:+UnlockDiagnosticVMOptions DumpSymbolAndStringTable + */ +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.JDKToolFinder; + +public class DumpSymbolAndStringTable { + public static void main(String[] args) throws Exception { + // Grab my own PID + String pid = Long.toString(ProcessTools.getProcessId()); + + ProcessBuilder pb = new ProcessBuilder(); + pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.symboltable", "-verbose"}); + OutputAnalyzer output = CDSTestUtils.executeAndLog(pb, "jcmd-symboltable"); + try { + output.shouldContain("24 2: DumpSymbolAndStringTable\n"); + } catch (RuntimeException e) { + output.shouldContain("Unknown diagnostic command"); + } + + pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.stringtable", "-verbose"}); + output = CDSTestUtils.executeAndLog(pb, "jcmd-stringtable"); + try { + output.shouldContain("16: java.lang.String\n"); + } catch (RuntimeException e) { + output.shouldContain("Unknown diagnostic command"); + } + + pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary"}); + output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary"); + try { + output.shouldContain("System Dictionary for 'app' class loader statistics:"); + output.shouldContain("Number of buckets"); + output.shouldContain("Number of entries"); + output.shouldContain("Maximum bucket size"); + } catch (RuntimeException e) { + output.shouldContain("Unknown diagnostic command"); + } + + pb.command(new String[] {JDKToolFinder.getJDKTool("jcmd"), pid, "VM.systemdictionary", "-verbose"}); + output = CDSTestUtils.executeAndLog(pb, "jcmd-systemdictionary"); + try { + output.shouldContain("Dictionary for loader data: 0x"); + output.shouldContain("^java.lang.String"); + } catch (RuntimeException e) { + output.shouldContain("Unknown diagnostic command"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_1.txt 2019-07-24 08:26:27.213471163 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,11 +0,0 @@ -VERSION: 1.0 -@SECTION: Symbol -0 -1: -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -11 -1 linkMethod -18 -1: type can't be null -20 -1: isAlphaNumericString -43 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z -1 -1: \t -15 -1: IntCumulateTask -1 -1: \n --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ExtraSymbols.invalid_1.txt 2019-07-24 08:26:26.877471174 -0400 @@ -0,0 +1,11 @@ +VERSION: 1.0 +@SECTION: Symbol +0 -1: +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +11 -1 linkMethod +18 -1: type can't be null +20 -1: isAlphaNumericString +43 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z +1 -1: \t +15 -1: IntCumulateTask +1 -1: \n --- old/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_2.txt 2019-07-24 08:26:27.605471149 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,5 +0,0 @@ -@SECTION: Symbol -20 -1: isAlphaNumericString -43 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z -15 -1: IntCumulateTask -1 -1: \n --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ExtraSymbols.invalid_2.txt 2019-07-24 08:26:27.269471161 -0400 @@ -0,0 +1,5 @@ +@SECTION: Symbol +20 -1: isAlphaNumericString +43 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z +15 -1: IntCumulateTask +1 -1: \n --- old/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_3.txt 2019-07-24 08:26:27.957471137 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,13 +0,0 @@ -VERSION: 1.0 -@SECTION: Symbol -11 -1: linkMethod -18 -1: isAlphaNumericString -33 -1: java/util/Locale$LocaleNameGetter -23 -1: sun/invoke/util/Wrapper -12 -1: reduceToLong -11 -1: setReadOnly -8 -1: endsWith -55 -1: (Ljava/lang/ClassValue;TT;)V -20 -1: createAnnotationData -6 -1: OfLong -17 -1: getClassSignature --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ExtraSymbols.invalid_3.txt 2019-07-24 08:26:27.669471147 -0400 @@ -0,0 +1,13 @@ +VERSION: 1.0 +@SECTION: Symbol +11 -1: linkMethod +18 -1: isAlphaNumericString +33 -1: java/util/Locale$LocaleNameGetter +23 -1: sun/invoke/util/Wrapper +12 -1: reduceToLong +11 -1: setReadOnly +8 -1: endsWith +55 -1: (Ljava/lang/ClassValue;TT;)V +20 -1: createAnnotationData +6 -1: OfLong +17 -1: getClassSignature --- old/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.java 2019-07-24 08:26:28.349471123 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Adding extra symbols into CDS archive using -XX:SharedArchiveConfigFile - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver ExtraSymbols - */ - -import java.io.*; -import jdk.test.lib.process.OutputAnalyzer; - -public class ExtraSymbols { - static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables"; - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - - // 1. Dump without extra symbols. - OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello"), - CDS_LOGGING); - checkOutput(output); - int numEntries1 = numOfEntries(output); - - // 2. Dump an archive with extra symbols. All symbols in - // ExtraSymbols.symbols.txt are valid. Dumping should succeed. - output = TestCommon.dump(appJar, TestCommon.list("Hello"), CDS_LOGGING, - "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("ExtraSymbols.symbols.txt")); - checkOutput(output); - int numEntries2 = numOfEntries(output); - if (numEntries2 <= numEntries1) { - throw new RuntimeException("No extra symbols added to archive"); - } - output = TestCommon.exec(appJar, "Hello"); - TestCommon.checkExec(output); - - // 3. Dump with invalid symbol files. Dumping should fail. - String invalid_symbol_files[] = {"ExtraSymbols.invalid_1.txt", - "ExtraSymbols.invalid_2.txt", - "ExtraSymbols.invalid_3.txt"}; - String err_msgs[] = {"Corrupted at line", - "wrong version of hashtable dump file", - "Corrupted at line"}; - for (int i = 0; i < invalid_symbol_files.length; i++) { - output = TestCommon.dump(appJar, TestCommon.list("Hello"), - "-XX:SharedArchiveConfigFile=" + - TestCommon.getSourceFile(invalid_symbol_files[i])); - output.shouldContain("Error occurred during initialization of VM"); - output.shouldContain(err_msgs[i]); - } - } - - static int numOfEntries(OutputAnalyzer output) { - String s = output.firstMatch("Number of entries : .*"); - String subs[] = s.split("[:]"); - int numEntries = Integer.parseInt(subs[1].trim()); - return numEntries; - } - - static void checkOutput(OutputAnalyzer output) throws Exception { - output.shouldContain("Loading classes to share"); - output.shouldContain("Shared symbol table stats -------- base:"); - output.shouldHaveExitValue(0); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ExtraSymbols.java 2019-07-24 08:26:28.013471135 -0400 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Adding extra symbols into CDS archive using -XX:SharedArchiveConfigFile + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver ExtraSymbols + */ + +import java.io.*; +import jdk.test.lib.process.OutputAnalyzer; + +public class ExtraSymbols { + static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables"; + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + + // 1. Dump without extra symbols. + OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello"), + CDS_LOGGING); + checkOutput(output); + int numEntries1 = numOfEntries(output); + + // 2. Dump an archive with extra symbols. All symbols in + // ExtraSymbols.symbols.txt are valid. Dumping should succeed. + output = TestCommon.dump(appJar, TestCommon.list("Hello"), CDS_LOGGING, + "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("ExtraSymbols.symbols.txt")); + checkOutput(output); + int numEntries2 = numOfEntries(output); + if (numEntries2 <= numEntries1) { + throw new RuntimeException("No extra symbols added to archive"); + } + output = TestCommon.exec(appJar, "Hello"); + TestCommon.checkExec(output); + + // 3. Dump with invalid symbol files. Dumping should fail. + String invalid_symbol_files[] = {"ExtraSymbols.invalid_1.txt", + "ExtraSymbols.invalid_2.txt", + "ExtraSymbols.invalid_3.txt"}; + String err_msgs[] = {"Corrupted at line", + "wrong version of hashtable dump file", + "Corrupted at line"}; + for (int i = 0; i < invalid_symbol_files.length; i++) { + output = TestCommon.dump(appJar, TestCommon.list("Hello"), + "-XX:SharedArchiveConfigFile=" + + TestCommon.getSourceFile(invalid_symbol_files[i])); + output.shouldContain("Error occurred during initialization of VM"); + output.shouldContain(err_msgs[i]); + } + } + + static int numOfEntries(OutputAnalyzer output) { + String s = output.firstMatch("Number of entries : .*"); + String subs[] = s.split("[:]"); + int numEntries = Integer.parseInt(subs[1].trim()); + return numEntries; + } + + static void checkOutput(OutputAnalyzer output) throws Exception { + output.shouldContain("Loading classes to share"); + output.shouldContain("Shared symbol table stats -------- base:"); + output.shouldHaveExitValue(0); + } +} --- old/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.symbols.txt 2019-07-24 08:26:28.709471110 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,10826 +0,0 @@ -VERSION: 1.0 -@SECTION: Symbol -69 -1: ------------------------------------------------------------123456789 -68 -1: # The values in this file are only used for testing the operation of -63 -1: # adding extra symbols into the CDS archive. None of the values -70 -1: # are interpreted in any way. So even if they contain names of classes -70 -1: # that have been renamed or removed, or string literals that have been -66 -1: # changed or remove from Java source code, it would not affect the -26 -1: # correctness of the test. -0 -1: -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -11 -1: linkMethod -18 -1: type can't be null -20 -1: isAlphaNumericString -43 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z -72 -1: (Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process; -1 -1: \t -15 -1: IntCumulateTask -1 -1: \n -33 -1: java/util/Locale$LocaleNameGetter -23 -1: sun/invoke/util/Wrapper -57 -1: (Ljava/io/InputStream;Ljava/nio/charset/CharsetDecoder;)V -12 -1: reduceToLong -11 -1: setReadOnly -34 -1: (Ljava/lang/reflect/Executable;)[B -54 -1: ([Ljava/net/URL;Ljava/security/AccessControlContext;)V -15 -1: LegacyMergeSort -8 -1: endsWith -55 -1: (Ljava/lang/ClassValue;TT;)V -20 -1: createAnnotationData -6 -1: OfLong -90 -1: (Ljava/util/Map;)Ljava/util/Map; -1 -1: -17 -1: getClassSignature -1 -1: " -1 -1: # -1 -1: ( -21 -1: MethodHandleImpl.java -10 -1: getUTF8At0 -1 -1: ) -1 -1: * -1 -1: + -1 -1: , -1 -1: - -1 -1: . -18 -1: unsignedEntryNames -1 -1: / -1 -1: 0 -19 -1: java/io/InputStream -38 -1: java/util/concurrent/ThreadLocalRandom -1 -1: : -1 -1: ; -1 -1: < -13 -1: getAndAddLong -1 -1: = -1 -1: > -1 -1: ? -20 -1: getMethodAtIfLoaded0 -1 -1: @ -1 -1: A -7 -1: isAlive -1 -1: B -10 -1: checkIndex -1 -1: C -1 -1: D -1 -1: E -1 -1: F -1 -1: I -30 -1: sun/misc/JavaUtilZipFileAccess -11 -1: classloader -1 -1: J -1 -1: L -14 -1: packageEnabled -8 -1: ([BIII)V -24 -1: Ljava/io/BufferedWriter; -1 -1: S -32 -1: (Ljava/util/function/Consumer;)V -11 -1: refKindName -1 -1: U -1 -1: V -3 1: yyy -18 -1: JavaNetAccess.java -1 -1: Z -7 -1: members -1 -1: [ -1 -1: ] -13 -1: ShortLanguage -1 -1: _ -9 -1: invoke__L -28 -1: (D)Ljava/lang/StringBuilder; -15 -1: isInvokeSpecial -1 -1: c -17 -1: subListRangeCheck -1 -1: e -29 -1: Ljava/security/AllPermission; -27 -1: (C)Ljava/lang/StringBuffer; -28 -1: ([Ljava/lang/Comparable;II)V -50 -1: (Ljava/util/zip/ZipFile;Ljava/util/zip/Inflater;)V -9 -1: invoke__V -1 -1: m -101 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetEncoder;)Lsun/nio/cs/StreamEncoder; -13 -1: MAX_SURROGATE -18 -1: Ljava/lang/String; -21 -1: ensureProtectedAccess -18 -1: getIfModifiedSince -1 -1: r -9 -1: setExtra0 -1 -1: s -47 -1: Ljava/lang/Enum; -1 -1: x -1 -1: { -7 -1: getLast -1 -1: | -1 -1: } -1 -1: ~ -71 -1: (Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -34 -1: (Ljava/nio/charset/Charset;[BII)[C -10 -1: DST_NSHIFT -25 -1: ForEachTransformedKeyTask -26 -1: Ljava/nio/charset/Charset; -56 -1: (Ljava/lang/reflect/Method;)Lsun/reflect/MethodAccessor; -22 -1: StackTraceElement.java -24 -1: sun.zip.zipFile.openTime -27 -1: JNI_COPY_TO_ARRAY_THRESHOLD -26 -1: java/lang/ClassValue$Entry -19 -1: [Ljava/lang/Thread; -56 -1: (Ljava/lang/ClassLoader$NativeLibrary;)Ljava/lang/Class; -7 -1: message -18 -1: parameterToArgSlot -20 -1: [[Ljava/lang/String; -11 -1: bumpVersion -26 -1: Ljava/lang/reflect/Method; -9 -1: getMethod -6 -1: (I)TE; -49 -1: (Ljava/lang/String;)Ljava/lang/invoke/MemberName; -33 -1: sun/misc/URLClassPath$JarLoader$1 -57 -1: (BLjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V -33 -1: sun/misc/URLClassPath$JarLoader$2 -33 -1: sun/misc/URLClassPath$JarLoader$3 -87 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; -19 -1: FileDescriptor.java -12 -1: forEachValue -36 -1: (Ljava/util/List;)[Ljava/lang/Class; -53 -1: (Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder; -8 -1: hasArray -4 -1: ROWS -10 -1: linkMethod -9 -1: remaining -23 -1: ARRAY_FLOAT_BASE_OFFSET -35 -1: java/lang/reflect/ReflectPermission -24 -1: ()Ljava/net/InetAddress; -7 -1: ngroups -81 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction;>; -10 -1: putTreeVal -4 -1: list -5 -1: trace -7 -1: blocker -21 -1: reset() not supported -8 -1: JAPANESE -11 -1: PRIVATE_USE -53 -1: (Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodHandle; -32 -1: Invalid JavaFX launch parameters -15 -1: SECONDS_PER_DAY -11 -1: UTF_16.java -24 -1: sun/nio/cs/UTF_8$Encoder -102 -1: (Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)V -20 -1: (Lsun/misc/Signal;)V -22 -1: MagicAccessorImpl.java -84 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class; -14 -1: altMetafactory -13 -1: queryOverflow -30 -1: exists, but is not accessible -3 -1: edt -14 -1: MAX_ARRAY_SIZE -20 -1: aliases_UTF_16LE_BOM -34 -1: Ljava/lang/reflect/Constructor<*>; -20 -1: (S)Ljava/lang/Short; -6 -1: STRICT -19 -1: internalCallerClass -27 -1: java/nio/DirectLongBufferRU -13 -1: TIMED_WAITING -15 -1: toGenericString -6 -1: client -10 -1: attachImpl -22 -1: ReflectionFactory.java -8 -1: jsse.jar -37 -1: (IZ)Ljava/lang/AbstractStringBuilder; -41 -1: java/util/LinkedHashMap$LinkedKeyIterator -15 -1: computeIfAbsent -10 -1: GET_TARGET -53 -1: ;>(Ljava/lang/Class;)[TE; -35 -1: java/util/Collections$SingletonList -7 -1: addYear -35 -1: Ljava/lang/Class; -65 -1: (Ljava/util/LinkedHashMap$Entry;Ljava/util/LinkedHashMap$Entry;)V -14 -1: image/x-bitmap -10 -1: (IIII[JI)V -50 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/net/URL;)V -13 -1: getLineNumber -20 -1: toUpperCaseCharArray -62 -1: (Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection; -11 -1: rotateRight -10 -1: checkPtype -85 -1: (JLjava/util/function/ToLongFunction<-TK;>;JLjava/util/function/LongBinaryOperator;)J -81 -1: (Ljava/lang/Class;Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor; -15 -1: Illegal style: -28 -1: (Ljava/lang/StringBuilder;)V -41 -1: 1.8.0-internal-iklam_2013_11_27_21_25-b00 -25 -1: Invalid authority field: -55 -1: (Ljava/lang/CharSequence;)Ljava/util/function/Supplier; -12 -1: staticOffset -32 -1: java/util/HashMap$KeySpliterator -13 -1: javaNioAccess -24 -1: (Ljava/util/SortedSet;)V -17 -1: thenComparingLong -2 -1: \n\n -22 -1: registerFieldsToFilter -34 -1: java/lang/invoke/LambdaMetafactory -225 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsTask;Ljava/util/function/BiFunction;Ljava/util/function/BiFunction;)V -26 -1: [[Ljava/lang/CharSequence; -32 -1: java/util/Collections$CheckedMap -147 -1: Ljava/util/AbstractSequentialList;Ljava/util/List;Ljava/util/Deque;Ljava/lang/Cloneable;Ljava/io/Serializable; -204 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; -27 -1: sun/nio/cs/UTF_16BE$Decoder -12 -1: getZoneInfo0 -77 -1: (Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType; -9 -1: Traverser -35 -1: Ljava/lang/ref/ReferenceQueue; -27 -1: lambda$comparing$ea9a8b3a$1 -7 -1: ([CI)[C -6 -1: getenv -9 -1: newMethod -52 -1: Ljava/lang/reflect/Executable; -164 -1: (Ljava/security/ProtectionDomain;Ljava/security/DomainCombiner;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)V -40 -1: (Ljava/lang/String;)Ljava/util/TimeZone; -11 -1: countTokens -202 -1: Ljava/util/concurrent/ConcurrentHashMap$CollectionView;>;Ljava/util/Set;>;Ljava/io/Serializable; -78 -1: (Ljava/util/Collection;)Ljava/util/Collection; -34 -1: (Ljava/lang/reflect/Constructor;)I -15 -1: comparingDouble -24 -1: ()Ljava/util/Collection; -14 -1: invokeFinalize -14 -1: encodeISOArray -77 -1: (Ljava/lang/ref/Reference;Ljava/lang/ref/Reference;)Ljava/lang/ref/Reference; -11 -1: bad index: -34 -1: (Ljava/lang/reflect/Constructor;)V -68 -1: (Ljava/util/jar/JarEntry;Lsun/security/util/ManifestEntryVerifier;)V -53 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;IIIJ)V -27 -1: ([CII)Ljava/nio/CharBuffer; -6 -1: setOut -41 -1: (ILjava/lang/Object;Ljava/lang/Object;I)V -12 -1: MIN_EXPONENT -30 -1: PrivilegedExceptionAction.java -18 -1: key cannot be null -6 -1: CENHDR -73 -1: (ITK;TV;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; -23 -1: java/lang/reflect/Array -8 -1: AF_LIMIT -2 -1: \r\n -11 -1: getFileName -10 -1: parseShort -22 -1: java/lang/LinkageError -15 -1: FT_LAST_WRAPPER -32 -1: java/util/ArrayDeque$DeqIterator -24 -1: pc-multilingual-850+euro -3 -1: zfc -14 -1: incrementExact -38 -1: (IIII)Lsun/util/calendar/CalendarDate; -8 -1: (II[BI)V -8 -1: isLocked -13 -1: ZoneInfo.java -36 -1: (Lsun/util/calendar/CalendarDate;J)V -35 -1: java/lang/invoke/MethodHandleImpl$1 -31 -1: (Ljava/util/Comparator<-TE;>;)V -19 -1: CharsetEncoder.java -52 -1: ()Ljava/util/Enumeration; -44 -1: (Ljava/io/InputStream;)Ljava/io/InputStream; -7 -1: field -5 -1: abort -25 -1: java/lang/SecurityManager -66 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToDoubleTask -1316 -1: \xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe5\xa0\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\xa0\x80\xe4\x80\x8f\xe6\x80\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\xa0\x80\xe4\x80\x8f\xe6\x80\x80\xe4\x80\x8c\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xe2\xa0\x80\x18\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\x18\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xee\xa0\x80\x15\xee\xa0\x80\x16\xe6\xa0\x80\x18\xe2\x80\x80\x19\xe3\xa0\x80\x18\xe2\x80\x80\x14\xe3\xa0\x80\x18\xe3\xa0\x80\x18\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe3\xa0\x80\x18\xe6\xa0\x80\x18\xee\xa0\x80\x19\xe6\xa0\x80\x19\xee\xa0\x80\x19\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xee\xa0\x80\x15\xe6\xa0\x80\x18\xee\xa0\x80\x16\xe6\xa0\x80\x1b\xe6\xa0\x80\xe5\x80\x97\xe6\xa0\x80\x1b\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xee\xa0\x80\x15\xe6\xa0\x80\x19\xee\xa0\x80\x16\xe6\xa0\x80\x19\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe5\x80\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe3\xa0\x80\x0c\xe6\xa0\x80\x18\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\xe6\x80\x9a\xe6\xa0\x80\x1c\xe6\xa0\x80\x18\xe6\xa0\x80\x1b\xe6\xa0\x80\x1c\xc0\x80\xe7\x80\x85\xee\xa0\x80\x1d\xe6\xa0\x80\x19\xe4\xa0\x80\xe1\x80\x90\xe6\xa0\x80\x1c\xe6\xa0\x80\x1b\xe2\xa0\x80\x1c\xe2\xa0\x80\x19\xe1\xa0\x80\xd8\x8b\xe1\xa0\x80\xd8\x8b\xe6\xa0\x80\x1b\xdf\xbd\xe7\x80\x82\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xe6\xa0\x80\x1b\xe1\xa0\x80\xd4\x8b\xc0\x80\xe7\x80\x85\xee\xa0\x80\x1e\xe6\xa0\x80\xe0\xa0\x8b\xe6\xa0\x80\xe0\xa0\x8b\xe6\xa0\x80\xe0\xa0\x8b\xe6\xa0\x80\x18\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xe6\xa0\x80\x19\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xdf\xbd\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xe6\xa0\x80\x19\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xd8\x9d\xe7\x80\x82 -6 -1: (J[I)I -162 -1: (Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List; -21 -1: getQualifiedFieldName -46 -1: Ljava/util/Set;>; -47 -1: (Ljava/util/Collection;Ljava/util/Collection;)Z -10 -1: getRuntime -30 -1: threadLocalRandomSecondarySeed -18 -1: (Ljava/io/File;I)J -10 -1: methodName -34 -1: sun/reflect/generics/tree/TypeTree -35 -1: (Ljava/io/File;)[Ljava/lang/String; -31 -1: java/util/Collections$EmptyList -15 -1: LF_INVINTERFACE -9 -1: notifyAll -18 -1: (Ljava/io/File;I)V -94 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class<*>; -45 -1: (Ljava/lang/String;)Ljava/net/ContentHandler; -3 -1: enc -3 -1: end -18 -1: (Ljava/io/File;I)Z -47 -1: (Ljava/lang/Object;Ljava/lang/reflect/Method;)V -76 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V -19 -1: getURLStreamHandler -46 -1: (Ljava/lang/ClassLoader;Ljava/lang/Class<*>;)V -17 -1: COMPILE_THRESHOLD -15 -1: charset is null -7 -1: ibm-912 -10 -1: basicTypes -7 -1: ibm-914 -78 -1: (Ljava/lang/Class;Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;)Z -7 -1: ibm-915 -12 -1: JarFileEntry -12 -1: setThreshold -22 -1: (ILjava/lang/Object;)V -55 -1: Ljava/lang/Object; -16 -1: Unknown signal: -3 -1: zip -13 -1: CR_UNMAPPABLE -19 -1: getClassAtIfLoaded0 -21 -1: WindowsClientCounters -29 -1: Ljava/lang/invoke/MethodType; -91 -1: Ljava/util/Collections$UnmodifiableList;Ljava/util/RandomAccess; -23 -1: StackOverflowError.java -13 -1: Launcher.java -9 -1: Signature -7 -1: ibm-920 -153 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V -13 -1: setExtensions -26 -1: [Ljava/lang/ref/Reference; -7 -1: ibm-923 -12 -1: BMH.reinvoke -34 -1: java/lang/IllegalArgumentException -53 -1: (Ljava/lang/String;)Ljava/lang/NumberFormatException; -5 -1: .dirs -13 -1: finishToArray -22 -1: (ZI)Ljava/lang/String; -84 -1: (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/RuntimeException; -15 -1: charsetProvider -24 -1: ()Ljava/lang/Class; -10 -1: wordsInUse -26 -1: (Ljava/io/ExpiringCache;)I -53 -1: ()Ljava/util/Iterator;>; -25 -1: com/sun/management/GcInfo -26 -1: getCompatibilityExtensions -69 -1: (Ljava/lang/ref/ReferenceQueue;Ljava/util/concurrent/ConcurrentMap;)V -15 -1: getConstantPool -24 -1: [[Ljava/lang/Comparable; -26 -1: (Ljava/io/ExpiringCache;)V -8 -1: getTable -53 -1: sun/reflect/generics/repository/ConstructorRepository -5 -1: range -36 -1: (Ljava/lang/String;)Ljava/lang/Byte; -72 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V -60 -1: ([TT;TT;Ljava/util/Comparator<-TT;>;)I -20 -1: (Ljava/nio/Bits$1;)V -30 -1: ()Ljava/util/Spliterator; -6 -1: ([BB)I -53 -1: (Ljava/lang/ref/Finalizer;Lsun/misc/JavaLangAccess;)V -11 -1: memberTypes -45 -1: (ILjava/lang/String;)Ljava/lang/StringBuffer; -12 -1: OTHER_SYMBOL -65 -1: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodType; -43 -1: (Ljava/util/Set;)[Ljava/lang/reflect/Field; -30 -1: (Ljava/lang/ref/Reference$1;)V -18 -1: GREGORIAN_INSTANCE -31 -1: Ljava/lang/FunctionalInterface; -57 -1: (Ljava/lang/Error;Ljava/lang/Exception;)Ljava/lang/Error; -54 -1: ([Ljava/lang/reflect/Field;)[Ljava/lang/reflect/Field; -14 -1: not an array: -6 -1: ([BB)V -9 -1: ISO8859_1 -8 -1: addTrans -27 -1: getFunctionalInterfaceClass -29 -1: lambda$comparingInt$7b0bb60$1 -8 -1: TreeNode -138 -1: Ljava/util/Dictionary;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; -3 -1: era -22 -1: fakeMethodHandleInvoke -9 -1: addToList -39 -1: (Ljava/lang/Class;[Ljava/lang/String;)V -17 -1: launchApplication -21 -1: randomNumberGenerator -51 -1: Ljava/lang/ThreadLocal;>; -35 -1: java/io/ObjectOutputStream$PutField -42 -1: (ILjava/util/function/IntBinaryOperator;)I -3 -1: err -13 -1: cachedDecoder -32 -1: sun/util/calendar/ZoneInfoFile$1 -23 -1: doIntersectionPrivilege -19 -1: cspc850multilingual -56 -1: Ljava/util/Map;[Ljava/lang/String;>; -11 -1: loader_data -27 -1: (Ljava/util/jar/Manifest;)V -5 -1: files -90 -1: Ljava/util/concurrent/ConcurrentMap; -36 -1: [[Ljava/lang/invoke/LambdaForm$Name; -5 -1: lines -55 -1: (Lsun/misc/URLClassPath$JarLoader;)Lsun/misc/MetaIndex; -9 -1: ansi-1251 -15 -1: refKindIsMethod -29 -1: java/lang/reflect/Constructor -3 -1: est -19 -1: Lsun/misc/Launcher; -109 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)TT; -10 -1: getOffsets -9 -1: removeAll -23 -1: java/util/regex/Matcher -8 -1: sumCount -7 -1: implies -10 -1: MAIN_CLASS -75 -1: (Ljava/util/List;)[Ljava/lang/String; -11 -1: getISO3Code -4 -1: high -53 -1: (TK;Ljava/util/function/BiFunction<-TK;-TV;+TV;>;)TV; -17 -1: setNormalizedDate -23 -1: AbstractRepository.java -28 -1: java/util/LinkedList$ListItr -8 -1: isFrozen -38 -1: (Ljava/lang/String;Z)Ljava/lang/Class; -16 -1: ReflectUtil.java -30 -1: ()Ljava/util/stream/IntStream; -57 -1: (Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object; -11 -1: getResource -16 -1: ThreadDeath.java -24 -1: unmodifiableNavigableSet -59 -1: (Ljava/lang/String;)Ljava/util/Enumeration; -24 -1: java.security.auth.debug -58 -1: (Ljava/io/FileInputStream;)Ljava/nio/channels/FileChannel; -25 -1: ()Ljava/util/Enumeration; -11 -1: getInstance -6 -1: MONDAY -15 -1: jdkMinorVersion -16 -1: newThreadWithAcc -6 -1: CENHOW -32 -1: Max. Heap Size (Estimated): -61 -1: (Ljava/lang/invoke/MethodType;Z)Ljava/lang/invoke/LambdaForm; -11 -1: windows-932 -7 -1: Index: -11 -1: composeList -6 -1: utf-16 -6 -1: ibm437 -10 -1: getJarFile -8 -1: , rem = -13 -1: multiNewArray -14 -1: getDefaultPort -39 -1: Ljava/security/cert/CertificateFactory; -10 -1: L_RESERVED -19 -1: getMethodAtIfLoaded -8 -1: needCast -8 -1: IS_FIELD -15 -1: ClassValue.java -31 -1: ()Ljava/util/function/Supplier; -125 -1: (Ljava/lang/Class<*>;)Ljava/util/Map;Ljava/lang/annotation/Annotation;>; -34 -1: lambda$comparingByValue$827a17d5$1 -4 -1: NONE -21 -1: java/nio/DoubleBuffer -33 -1: ()Lsun/reflect/LangReflectAccess; -26 -1: invalid compression method -6 -1: (TK;)Z -16 -1: FT_UNCHECKED_REF -14 -1: getGenericType -17 -1: pathSeparatorChar -8 -1: writeUTF -8 -1: NO_PROXY -188 -1: (Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V -13 -1: finalRefCount -12 -1: NF_checkCast -6 -1: utf-32 -26 -1: (Ljava/util/ArrayDeque;I)Z -19 -1: prefetchWriteStatic -14 -1: computeInvoker -5 -1: cap= -19 -1: generateCertificate -15 -1: methodModifiers -3 -1: exc -27 -1: ()Lsun/misc/JavaLangAccess; -5 -1: State -14 -1: NullComparator -10 -1: getClassAt -15 -1: printProperties -110 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)Ljava/lang/reflect/Constructor; -40 -1: (Ljava/util/List<*>;Ljava/util/Random;)V -63 -1: ()[Ljava/lang/reflect/TypeVariable; -28 -1: (I)Ljava/lang/StringBuilder; -48 -1: ([DIILjava/util/function/DoubleBinaryOperator;)V -3 -1: exp -11 -1: interpret_L -17 -1: Serializable.java -8 -1: FJDouble -12 -1: HashMap.java -9 -1: sys_paths -17 -1: getMainAttributes -14 -1: asDoubleBuffer -10 -1: buildNames -26 -1: TOPLEVEL_WINDOW_PERMISSION -4 -1: Type -31 -1: (Ljava/util/Collection<+TE;>;)V -64 -1: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class<*>; -100 -1: (Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection; -10 -1: checkError -31 -1: (Ljava/util/Collection<+TE;>;)Z -31 -1: java/lang/NoSuchMethodException -6 -1: attach -87 -1: (BLjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; -9 -1: writeChar -44 -1: java/util/ArraysParallelSortHelpers$FJObject -34 -1: (Ljava/lang/Class;Ljava/io/File;)Z -21 -1: java/util/zip/ZipFile -5 -1: dirty -6 -1: (JIZ)V -12 -1: leftoverChar -39 -1: is being loaded in another classloader -10 -1: writeBytes -6 -1: unlink -41 -1: (TT;Ljava/lang/ref/ReferenceQueue;)V -21 -1: getBootstrapResources -95 -1: Ljava/util/AbstractMap;Ljava/io/Serializable; -10 -1: PathStatus -25 -1: java/io/InputStreamReader -15 -1: ISO_8859-9:1989 -37 -1: java/lang/ExceptionInInitializerError -14 -1: exceptionTypes -19 -1: BufferedReader.java -34 -1: Could not create SecurityManager: -13 -1: definePackage -12 -1: getAndAddInt -50 -1: (Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle; -30 -1: (Ljava/lang/SecurityManager;)V -12 -1: fxLaunchName -22 -1: BINARYSEARCH_THRESHOLD -29 -1: JVMTI_THREAD_STATE_TERMINATED -9 -1: fullFence -60 -1: (Ljava/lang/String;Z)Ljava/util/Enumeration; -29 -1: java/lang/Thread$WeakClassKey -47 -1: (Ljava/nio/charset/Charset;Ljava/lang/String;)V -8 -1: (TV;)TV; -60 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;I)V -47 -1: java/security/cert/CertificateEncodingException -12 -1: BA_DIRECTORY -53 -1: (Ljava/lang/Class;ZLjava/lang/Class;)Ljava/util/List; -9 -1: checkRead -6 -1: -4 -1: args -17 -1: genericMethodType -10 -1: writeFloat -26 -1: Can't handle static method -49 -1: (Ljava/lang/String;)Ljava/lang/invoke/MethodType; -22 -1: MapReduceKeysToIntTask -17 -1: jvm_micro_version -29 -1: (Ljava/util/Map<+TK;+TV;>;Z)V -40 -1: ([Ljava/lang/Object;Ljava/lang/Object;)I -7 -1: vmindex -22 -1: maybeCompileToBytecode -89 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl; -11 -1: getLauncher -17 -1: jvm_major_version -36 -1: ([IIII)Ljava/util/Spliterator$OfInt; -40 -1: ([Ljava/lang/Object;Ljava/lang/Object;)V -33 -1: IllegalMonitorStateException.java -73 -1: ([ILjava/util/function/IntUnaryOperator;)Ljava/util/function/IntConsumer; -39 -1: (Ljava/lang/String;)Ljava/lang/Package; -29 -1: java/lang/CharacterDataLatin1 -52 -1: (Ljava/lang/annotation/Annotation;)Ljava/lang/Class; -49 -1: (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; -53 -1: (Ljava/lang/Object;)Ljava/nio/charset/CharsetDecoder; -22 -1: Ljava/net/FileNameMap; -16 -1: isAnonymousClass -4 -1: item -7 -1: compute -12 -1: user.country -22 -1: malformed context url: -16 -1: jvm_build_number -69 -1: (Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; -17 -1: getDirectionality -4 -1: save -8 -1: UNMARKED -58 -1: (Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V -12 -1: searchFields -9 -1: frequency -23 -1: getLocalizedInputStream -2 -1: -126 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;ILjava/lang/Class<*>;)Ljava/util/List; -39 -1: (Ljava/lang/String;Z)Ljava/lang/String; -7 -1: setZone -2 -1: " -9 -1: checkRef( -11 -1: loadFromXML -49 -1: (Ljava/util/jar/JarFile;Ljava/util/Enumeration;)V -68 -1: (IILsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate; -2 -1: ( -54 -1: (Ljava/util/TimeZone;)Lsun/util/calendar/CalendarDate; -6 -1: rewind -13 -1: getAndSetLong -30 -1: java/lang/invoke/MethodHandles -11 -1: ListPattern -97 -1: Ljava/util/AbstractList;Ljava/util/RandomAccess;Ljava/io/Serializable; -25 -1: (Ljava/io/InputStream;I)V -9 -1: setMethod -10 -1: H_REG_NAME -39 -1: ([Ljava/lang/Object;)Ljava/lang/Object; -16 -1: AbstractMap.java -68 -1: Ljava/util/Hashtable; -58 -1: (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process; -23 -1: getFileSystemAttributes -12 -1: toSurrogates -2 -1: !/ -5 -1: empty -24 -1: isUnicodeIdentifierStart -35 -1: sun/nio/cs/StandardCharsets$Classes -27 -1: [Ljava/security/Permission; -13 -1: getDefinition -11 -1: permission= -42 -1: (ILjava/lang/String;)Ljava/nio/ByteBuffer; -69 -1: (Ljava/util/List;>;)Ljava/lang/invoke/MethodType; -3 1: zzz -17 -1: hasLongPrimitives -2 -1: != -13 -1: getInterfaces -2 -1: " -11 -1: noInflation -14 -1: aliases_UTF_16 -2 -1: ") -17 -1: ()Ljava/util/Map; -55 -1: ()Ljava/util/Map; -6 -1: charAt -12 -1: getStringAt0 -10 -1: superClone -28 -1: Ljava/util/AbstractSet; -40 -1: java/lang/ref/Reference$ReferenceHandler -22 -1: NaturalOrderComparator -9 -1: markValue -9 -1: getRegion -26 -1: null permissions parameter -17 -1: Ljava/util/Stack; -14 -1: codebase= -36 -1: (Ljava/util/List;)Ljava/lang/Object; -17 -1: setJavaLangAccess -16 -1: hasQueuedThreads -5 -1: (CC)I -8 -1: toString -5 -1: (CC)J -11 -1: permissions -10 -1: getHeaders -27 -1: java/io/BufferedInputStream -21 -1: unicodelittleunmarked -51 -1: (Ljava/net/URLClassLoader;Ljava/util/Enumeration;)V -14 -1: generateMethod -11 -1: skipForward -55 -1: java/util/concurrent/ConcurrentHashMap$ForEachEntryTask -5 -1: (CC)Z -15 -1: getURLClassPath -84 -1: Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet; -23 -1: primitiveParameterCount -8 -1: security -14 -1: aliases_UTF_32 -22 -1: ()Ljava/util/Set; -9 -1: listFiles -15 -1: insertElementAt -42 -1: Ljava/util/Comparator; -11 -1: getUserInfo -46 -1: ([JIILjava/util/function/LongBinaryOperator;)V -23 -1: (Ljava/util/Iterator;)V -46 -1: ([Ljava/lang/Object;II)Ljava/util/Spliterator; -67 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Object;)Ljava/lang/Object; -14 -1: normalizeMonth -13 -1: getStackTrace -51 -1: java/lang/invoke/MethodType$ConcurrentWeakInternSet -8 -1: makeChar -2 -1: %% -9 -1: getTarget -21 -1: packageDefinitionLock -52 -1: java/util/concurrent/ConcurrentHashMap$ValueIterator -12 -1: OTHER_NUMBER -22 -1: java/util/jar/JarEntry -11 -1: access$1000 -16 -1: NON_SPACING_MARK -13 -1: last-modified -68 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; -16 -1: Australia/Darwin -55 -1: (Ljava/lang/management/ThreadInfo;[Ljava/lang/Object;)V -29 -1: Ljava/lang/ref/WeakReference; -19 -1: expungeStaleEntries -41 -1: Ljava/security/PrivilegedActionException; -6 -1: update -23 -1: (Ljava/lang/Object;JB)V -10 -1: newUpdater -39 -1: (Ljava/net/URL;)Ljava/util/jar/JarFile; -25 -1: Ljava/net/ContentHandler; -21 -1: ARRAY_INT_INDEX_SCALE -13 -1: hasSurrogates -27 -1: (Ljava/lang/ThreadGroup;Z)Z -20 -1: createGCNotification -21 -1: negative day of week -11 -1: getInIfOpen -22 -1: java/util/RandomAccess -24 -1: available locales = -21 -1: AccessController.java -44 -1: can not access a protected member of class -4 -1: LONG -15 -1: objectOnlyTypes -75 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetDecoder;)V -14 -1: getFindClasses -10 -1: storeFence -16 -1: asNormalOriginal -45 -1: (Ljava/lang/String;)Ljava/lang/StringBuilder; -6 -1: millis -16 -1: America/St_Johns -38 -1: ()Ljava/lang/IllegalArgumentException; -37 -1: DIRECTIONALITY_POP_DIRECTIONAL_FORMAT -15 -1: implReplaceWith -29 -1: ([C)Ljava/lang/StringBuilder; -15 -1: Appendable.java -41 -1: (Ljava/lang/String;)Ljava/io/InputStream; -26 -1: Illegal Initial Capacity: -9 -1: checkBase -7 -1: setYear -15 -1: DISPLAY_VARIANT -7 -1: getType -31 -1: Ljava/lang/ref/Reference<+TT;>; -15 -1: isFieldOrMethod -35 -1: appendToClassPathForInstrumentation -16 -1: LocaleNameGetter -7 -1: compact -55 -1: ()Ljava/util/Map; -10 -1: dummyQueue -3 -1: ROC -2 -1: (" -15 -1: checkPermission -38 -1: java/util/zip/ZipFile$ZipEntryIterator -8 -1: hexDigit -8 -1: pairs: -2 -1: () -2 -1: )\n -43 -1: handler for url different from this handler -15 -1: isAutoDetecting -37 -1: (Ljava/util/LinkedList$Node;)TE; -11 -1: Unsafe.java -12 -1: windows-1250 -39 -1: java/util/Collections$CheckedCollection -12 -1: windows-1251 -15 -1: codePointAtImpl -12 -1: windows-1252 -12 -1: windows-1253 -12 -1: windows-1254 -58 -1: (Ljava/lang/String;Ljava/lang/Integer;)Ljava/lang/Integer; -5 -1: deref -12 -1: windows-1255 -12 -1: windows-1256 -12 -1: windows-1257 -12 -1: windows-1258 -14 -1: FT_CHECKED_REF -47 -1: (Ljava/util/Hashtable;Ljava/util/Hashtable$1;)V -37 -1: (J)Lsun/util/calendar/Gregorian$Date; -19 -1: checkPropertyAccess -4 -1: file -17 -1: emptyListIterator -26 -1: sun/util/calendar/ZoneInfo -14 -1: file.separator -4 -1: fill -62 -1: (Ljava/util/Spliterator$OfLong;Z)Ljava/util/stream/LongStream; -18 -1: java/util/Iterator -20 -1: reduceValuesToDouble -12 -1: LF_CS_LINKER -26 -1: java/util/Arrays$ArrayList -45 -1: Ljava/util/concurrent/ConcurrentHashMap$Node; -6 -1: skipLF -2 -1: )= -39 -1: (I[Ljava/lang/invoke/LambdaForm$Name;)I -90 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;)V -18 -1: parameterModifiers -31 -1: (Ljava/util/Collection<+TK;>;)Z -21 -1: proxy can not be null -22 -1: java/io/FileDescriptor -6 -1: Loader -21 -1: numberOfTrailingZeros -10 -1: addMapping -39 -1: (I[Ljava/lang/invoke/LambdaForm$Name;)Z -30 -1: java/util/Locale$LanguageRange -20 -1: getReflectionFactory -16 -1: shouldMeterInput -56 -1: ([Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method; -23 -1: sun/net/ProgressMonitor -510 -1: \xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\x01\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\x01\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80 -28 -1: java/util/Spliterator$OfLong -24 -1: SynchronizedNavigableMap -4 -1: find -6 -1: unsafe -31 -1: java/nio/ByteBufferAsIntBufferB -2 -1: ,\n -6 -1: [ call -14 -1: registerFilter -10 -1: ValuesView -9 -1: untreeify -59 -1: ([Ljava/lang/Object;IILjava/util/function/BinaryOperator;)V -13 -1: getSimpleName -41 -1: (Ljava/util/Vector;Ljava/util/Vector$1;)V -31 -1: java/nio/ByteBufferAsIntBufferL -45 -1: (Ljava/lang/reflect/Field;)Ljava/lang/Object; -13 -1: getDefaultRef -18 -1: mapAlternativeName -30 -1: setDefaultAllowUserInteraction -13 -1: cannotCastMsg -4 -1: )=>{ -7 -1: println -2 -1: , -70 -1: (Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult; -32 -1: (ILjava/util/Collection<+TE;>;)Z -9 -1: interpret -104 -1: (Ljava/util/NavigableSet;Ljava/lang/Class;)Ljava/util/NavigableSet; -7 -1: advance -86 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; -11 -1: Stack trace -6 -1: raise0 -68 -1: ()Ljava/util/Collections$UnmodifiableNavigableMap$EmptyNavigableMap; -32 -1: sun/util/calendar/Gregorian$Date -33 -1: java/lang/ref/ReferenceQueue$Lock -19 -1: constructorAccessor -6 -1: IBM367 -18 -1: CharacterData.java -8 -1: parseURL -32 -1: java/io/FilePermissionCollection -7 -1: ([JI)[J -9 -1: JIS_X0201 -2 -1: -1 -8 -1: encoding -63 -1: ([Ljava/util/WeakHashMap$Entry;[Ljava/util/WeakHashMap$Entry;)V -9 -1: localhost -66 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal$1;)V -54 -1: (II[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -67 -1: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle; -14 -1: containsAllPDs -23 -1: setAllowUserInteraction -30 -1: Ljava/security/DomainCombiner; -26 -1: Ljava/security/Permission; -30 -1: serializePropertiesToByteArray -112 -1: (Ljava/util/Iterator;Ljava/util/Map;)V -2 -1: .. -6 -1: LOCEXT -2 -1: ./ -26 -1: (Ljava/nio/ByteBuffer;II)V -18 -1: (Ljava/io/File;J)Z -45 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;)V -17 -1: asCollectorChecks -7 -1: actions -5 -1: ([I)I -20 -1: asChange_otherthread -20 -1: forInputStreamReader -69 -1: java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject -5 -1: FINAL -17 -1: staticPermissions -44 -1: (Ljava/lang/Object;)Ljava/lang/StringBuffer; -5 -1: ([I)V -4 -1: swap -10 -1: readOffset -2 -1: /* -112 -1: (JLjava/util/function/Function<-TK;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; -12 -1: isAsciiDigit -2 -1: /- -2 -1: /. -2 -1: // -5 -1: zones -37 -1: (ILjava/lang/Object;)Ljava/util/List; -17 -1: SHUFFLE_THRESHOLD -32 -1: java/lang/CharacterDataUndefined -23 -1: sun.reflect.noInflation -11 -1: Can not set -36 -1: (Ljava/util/Properties$LineReader;)V -9 -1: debugName -78 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; -6 -1: (III)J -58 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String; -19 -1: BufferedWriter.java -148 -1: (Ljava/lang/Class;[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B)Ljava/lang/reflect/Constructor; -6 -1: printf -7 -1: signers -2 -1: 0. -4 -1: Date -15 -1: findReplacement -6 -1: (III)V -32 -1: java/nio/ReadOnlyBufferException -92 -1: ([Ljava/lang/String;)Ljava/util/Map;>; -6 -1: (III)Z -43 -1: (Ljava/lang/ClassValue;Ljava/lang/Object;)V -32 -1: java/nio/ByteBufferAsLongBufferB -16 -1: Constructor.java -10 -1: removeLast -9 -1: ([CII[B)I -40 -1: ()Ljava/util/List;>; -2 -1: 1. -7 -1: VARARGS -32 -1: java/nio/ByteBufferAsLongBufferL -18 -1: java/lang/Shutdown -40 -1: not supported, using ISO-8859-1 instead -40 -1: Ljava/util/Collections$EmptyEnumeration; -146 -1: (Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/SortedMap; -20 -1: aliases_UTF_32LE_BOM -23 -1: getEnclosingConstructor -2 -1: 0X -11 -1: NO_TIMEZONE -37 -1: ()Lsun/misc/JavaNioAccess$BufferPool; -18 -1: printXUsageMessage -9 -1: isPrivate -63 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/invoke/MethodHandle;)V -17 -1: maxSkipBufferSize -76 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetEncoder;)V -40 -1: (Ljava/lang/String;II)Ljava/lang/String; -17 -1: selectAlternative -53 -1: [Ljava/util/concurrent/ConcurrentHashMap$CounterCell; -87 -1: (Ljava/util/function/Supplier<+TS;>;)Ljava/lang/ThreadLocal; -40 -1: Ljava/util/concurrent/ConcurrentHashMap; -41 -1: (Ljava/lang/Character;)Ljava/lang/String; -19 -1: getMemberRefInfoAt0 -14 -1: reduceToDouble -18 -1: SUPPRESSED_CAPTION -6 -1: CANADA -64 -1: (IZ[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Ljava/lang/String; -12 -1: UnicodeBlock -2 -1: 0x -44 -1: (Ljava/lang/CharSequence;II)Ljava/io/Writer; -23 -1: getPermissionCollection -19 -1: threadLocalHashCode -9 -1: createMap -25 -1: checkForSpecialAttributes -12 -1: Mark invalid -36 -1: java/lang/CharSequence$1CharIterator -11 -1: local time -16 -1: Enumeration.java -27 -1: (Ljava/util/zip/ZipEntry;)V -11 -1: MATH_SYMBOL -8 -1: filename -24 -1: (Ljava/util/List<*>;II)V -9 -1: bindCache -18 -1: java/io/FileFilter -12 -1: checkInvoker -18 -1: OSEnvironment.java -8 -1: EmptyMap -11 -1: getIterator -35 -1: java/util/function/IntUnaryOperator -35 -1: java/util/WeakHashMap$EntryIterator -90 -1: (Ljava/util/Queue;Ljava/lang/Class;)Ljava/util/Queue; -8 -1: batchFor -16 -1: isValidCodePoint -27 -1: ([Lsun/util/calendar/Era;)V -16 -1: ThreadGroup.java -33 2: sun/net/www/protocol/file/Handler -7 -1: isField -22 -1: sun/misc/OSEnvironment -38 -1: Ljava/lang/Class; -12 -1: ADDRESS_SIZE -8 -1: forDigit -49 -1: (Ljava/lang/Object;)Ljava/util/WeakHashMap$Entry; -13 -1: getCodeSource -41 -1: ([Ljava/lang/Class<*>;)Ljava/lang/String; -39 -1: (Ljava/util/function/Predicate<-TE;>;)Z -13 -1: asFloatBuffer -34 -1: ()Lsun/reflect/generics/tree/Tree; -3 -1: ftp -18 -1: maybeReBoxElements -82 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)[[Ljava/lang/annotation/Annotation; -48 -1: ()Ljava/util/Set;>; -27 -1: (Ljava/util/NavigableMap;)V -18 -1: parameterSlotCount -20 -1: NF_getCallSiteTarget -16 -1: aliases_US_ASCII -13 -1: NF_staticBase -31 -1: sun/reflect/ConstructorAccessor -26 -1: guessContentTypeFromStream -10 -1: Deprecated -35 -1: System initialization has completed -11 -1: initialized -7 -1: compare -15 -1: maxDirectMemory -19 -1: setLastModifiedTime -7 -1: (J[BZ)J -12 -1: readEpochSec -66 -1: (Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/BaseLocale; -69 -1: ()Lsun/misc/JavaSecurityProtectionDomainAccess$ProtectionDomainCache; -9 -1: Constants -11 -1: valueOffset -62 -1: (Ljava/util/Hashtable;)V -33 -1: java/lang/CharacterDataPrivateUse -21 -1: Exception in thread " -40 -1: ()Ljava/util/Set; -12 -1: Asia/Yerevan -40 -1: (Ljava/lang/Throwable;)Ljava/lang/Error; -25 -1: (IS)Ljava/nio/ByteBuffer; -7 -1: (I[CI)I -45 -1: java/nio/charset/UnmappableCharacterException -23 -1: java/util/WeakHashMap$1 -21 -1: setFXLaunchParameters -1250 -1: ADANDAEAREAFAFGAGATGAIAIAALALBAMARMANANTAOAGOAQATAARARGASASMATAUTAUAUSAWABWAXALAAZAZEBABIHBBBRBBDBGDBEBELBFBFABGBGRBHBHRBIBDIBJBENBLBLMBMBMUBNBRNBOBOLBQBESBRBRABSBHSBTBTNBVBVTBWBWABYBLRBZBLZCACANCCCCKCDCODCFCAFCGCOGCHCHECICIVCKCOKCLCHLCMCMRCNCHNCOCOLCRCRICUCUBCVCPVCWCUWCXCXRCYCYPCZCZEDEDEUDJDJIDKDNKDMDMADODOMDZDZAECECUEEESTEGEGYEHESHERERIESESPETETHFIFINFJFJIFKFLKFMFSMFOFROFRFRAGAGABGBGBRGDGRDGEGEOGFGUFGGGGYGHGHAGIGIBGLGRLGMGMBGNGINGPGLPGQGNQGRGRCGSSGSGTGTMGUGUMGWGNBGYGUYHKHKGHMHMDHNHNDHRHRVHTHTIHUHUNIDIDNIEIRLILISRIMIMNININDIOIOTIQIRQIRIRNISISLITITAJEJEYJMJAMJOJORJPJPNKEKENKGKGZKHKHMKIKIRKMCOMKNKNAKPPRKKRKORKWKWTKYCYMKZKAZLALAOLBLBNLCLCALILIELKLKALRLBRLSLSOLTLTULULUXLVLVALYLBYMAMARMCMCOMDMDAMEMNEMFMAFMGMDGMHMHLMKMKDMLMLIMMMMRMNMNGMOMACMPMNPMQMTQMRMRTMSMSRMTMLTMUMUSMVMDVMWMWIMXMEXMYMYSMZMOZNANAMNCNCLNENERNFNFKNGNGANINICNLNLDNONORNPNPLNRNRUNUNIUNZNZLOMOMNPAPANPEPERPFPYFPGPNGPHPHLPKPAKPLPOLPMSPMPNPCNPRPRIPSPSEPTPRTPWPLWPYPRYQAQATREREUROROURSSRBRURUSRWRWASASAUSBSLBSCSYCSDSDNSESWESGSGPSHSHNSISVNSJSJMSKSVKSLSLESMSMRSNSENSOSOMSRSURSSSSDSTSTPSVSLVSXSXMSYSYRSZSWZTCTCATDTCDTFATFTGTGOTHTHATJTJKTKTKLTLTLSTMTKMTNTUNTOTONTRTURTTTTOTVTUVTWTWNTZTZAUAUKRUGUGAUMUMIUSUSAUYURYUZUZBVAVATVCVCTVEVENVGVGBVIVIRVNVNMVUVUTWFWLFWSWSMYEYEMYTMYTZAZAFZMZMBZWZWE -60 -1: Ljava/util/Set;>; -24 -1: ()Ljava/security/Policy; -7 -1: initted -44 -1: java/util/Collections$UnmodifiableCollection -12 -1: Pacific/Apia -23 -1: checkProxyPackageAccess -7 -1: (I[CI)V -64 -1: ([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I -16 -1: getJavaNioAccess -7 -1: reverse -7 -1: nocerts -16 -1: activeGroupCount -34 -1: java/util/jar/JarFile$JarFileEntry -7 -1: loaders -9 -1: toRadians -24 -1: java/util/HashMap$KeySet -37 -1: (Ljava/lang/Class;)Ljava/lang/Object; -6 -1: getRef -6 -1: H_DASH -17 -1: LinkageError.java -66 -1: (Ljava/lang/invoke/MethodTypeForm;)Ljava/lang/invoke/MethodHandle; -41 -1: (Ljava/nio/ByteBuffer;)Ljava/util/BitSet; -10 -1: addMinutes -58 -1: ([TT;II)Ljava/util/Spliterator; -9 -1: parseJars -13 -1: getUnsignedCS -28 -1: (Ljava/util/AbstractList;I)V -22 -1: threadLocalRandomProbe -19 -1: newDirectByteBuffer -27 -1: Filter already registered: -8 -1: unescape -31 -1: sun/misc/URLClassPath$JarLoader -6 -1: TAIWAN -53 -1: ()Ljava/util/ListIterator; -17 -1: REVERSE_THRESHOLD -31 -1: Java(TM) SE Runtime Environment -7 -1: SECONDS -70 -1: (Ljava/util/function/ToLongFunction<-TT;>;)Ljava/util/Comparator; -7 -1: BLOCKED -6 -1: Caches -63 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)V -2 -1: : -210 -1: (Ljava/util/Map;Ljava/lang/annotation/Annotation;>;Ljava/util/Map;Ljava/lang/annotation/Annotation;>;I)V -153 -1: (JLjava/util/function/BiFunction;Ljava/util/Map$Entry;+Ljava/util/Map$Entry;>;)Ljava/util/Map$Entry; -22 -1: ()Ljava/lang/Class<*>; -28 -1: Ljava/lang/OutOfMemoryError; -19 -1: writeFileDescriptor -39 -1: Ljava/util/LinkedHashMap$Entry; -26 -1: (ILjava/util/Collection;)Z -18 -1: getEncodedInternal -16 -1: ForEachValueTask -23 -1: (Ljava/util/List<*>;I)V -19 -1: SharedArchiveLoader -20 -1: probeBackupLocations -24 -1: java/lang/StringCoding$1 -28 -1: lookupContentHandlerClassFor -36 -1: ()Lsun/misc/Launcher$ExtClassLoader; -27 -1: reflectionFactoryAccessPerm -14 -1: ACCESSOR_FORMS -35 -1: ([JII)Ljava/util/stream/LongStream; -34 -1: ISO-8859-1 charset not available: -8 -1: cscesu-8 -2 -1: ;/ -17 -1: typeToPackageName -34 -1: (Ljava/net/URL;)Ljava/lang/String; -5 -1: (IZ)V -25 -1: Prohibited package name: -51 -1: (Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V -108 -1: (JLjava/util/function/ToIntFunction;>;ILjava/util/function/IntBinaryOperator;)I -12 -1: soleInstance -27 -1: (Ljava/io/BufferedReader;)V -71 -1: (Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder; -17 -1: Ljava/lang/Class; -38 -1: (Ljava/lang/String;)Ljava/lang/Double; -10 -1: viewAsType -22 -1: (Ljava/io/DataInput;)I -22 -1: (Ljava/io/DataInput;)J -105 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/WrongMethodTypeException; -16 -1: setJavaNetAccess -73 -1: (ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/util/HashMap$Node; -22 -1: (Ljava/io/DataInput;)V -14 -1: getHostAddress -37 -1: sun/reflect/annotation/TypeAnnotation -14 -1: ENCLOSING_MARK -5 -1: FALSE -14 -1: preDefineClass -9 -1: newKeySet -18 -1: getWaitQueueLength -32 -1: ()Lsun/misc/URLClassPath$Loader; -54 -1: (Ljava/nio/CharBuffer;I)Ljava/nio/charset/CoderResult; -3 -1: SEP -45 -1: (ITK;TV;Ljava/util/Hashtable$Entry;)V -17 -1: getDeclaredFields -7 -1: getDate -10 -1: getClasses -240 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToIntTask;Ljava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)V -12 -1: WeakClassKey -14 -1: LF_GEN_INVOKER -25 -1: Ljava/lang/StringBuilder; -2 -1: > -9 -1: getJarMap -4 -1: asin -37 -1: (Ljava/net/URLStreamHandlerFactory;)V -30 -1: not a constructor type or name -4 -1: main -22 -1: java/io/FilenameFilter -22 -1: sun.java.launcher.diag -30 -1: ()Ljava/util/Spliterator; -57 -1: ;>(Ljava/util/List;)V -86 -1: (Ljava/lang/ThreadLocal;>;)TT; -18 -1: canBeCalledVirtual -9 -1: Shift_JIS -24 -1: ()Ljava/util/ArrayDeque; -32 -1: (Ljava/lang/Class$MethodArray;)V -22 -1: java/lang/StringCoding -33 -1: sun/util/locale/LocaleObjectCache -20 -1: Sorry, deque too big -38 -1: java/lang/Throwable$WrappedPrintWriter -25 -1: (Ljava/io/InputStream;J)J -44 -1: (Ljava/security/Permission;)Ljava/util/List; -5 -1: thunk -5 -1: props -15 -1: getLastModified -120 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/util/HashMap;>;)V -146 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MemberName;Ljava/lang/Class;Ljava/lang/invoke/MethodHandleImpl$1;)V -27 -1: parseExtensionsDependencies -10 -1: getRawType -39 -1: (Ljava/nio/charset/CodingErrorAction;)V -22 -1: ObjectStreamField.java -6 -1: handle -11 -1: hasPrevious -18 -1: instanceof Float: -52 -1: (ZLjava/io/OutputStream;Ljava/nio/charset/Charset;)V -4 -1: make -13 -1: isIdeographic -26 -1: java/util/HashMap$EntrySet -51 -1: (Ljava/util/Hashtable;)[Ljava/util/Hashtable$Entry; -91 -1: (Ljava/lang/CharSequence;Ljava/lang/Iterable<+Ljava/lang/CharSequence;>;)Ljava/lang/String; -13 -1: makeAllocator -10 -1: , headless -20 -1: expungeStaleElements -58 -1: sun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget -41 -1: ([Ljava/lang/Object;Ljava/lang/Class$1;)V -50 -1: (I)Ljava/util/Iterator; -7 -1: TreeBin -21 -1: Ljava/io/IOException; -56 -1: (I[Ljava/lang/Class;)[Ljava/lang/invoke/LambdaForm$Name; -6 -1: LOCFLG -6 -1: DIRECT -3 -1: SIG -37 -1: java/security/NoSuchProviderException -39 -1: " with illegal data type conversion to -16 -1: getCodeSourceURL -51 -1: java/util/concurrent/ConcurrentHashMap$EntrySetView -47 -1: (Ljava/util/ArrayList;Ljava/util/ArrayList$1;)V -6 -1: delete -38 -1: sun/reflect/UnsafeFieldAccessorFactory -11 -1: isDestroyed -140 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z -9 -1: unaligned -36 -1: ()Lsun/misc/Launcher$AppClassLoader; -57 -1: (Ljava/lang/String;Ljava/util/Locale;)[Ljava/lang/String; -37 -1: sun/reflect/annotation/AnnotationType -49 -1: ([TT;)Ljava/util/List; -24 -1: (S)Ljava/nio/ByteBuffer; -6 -1: ([DD)I -9 -1: setTarget -29 -1: (IF)Ljava/lang/StringBuilder; -12 -1: forBasicType -10 -1: (IIII[BI)V -8 -1: ([DIID)I -9 -1: BASE_YEAR -19 -1: ()Ljava/lang/Error; -42 -1: (Ljava/util/Map;)V -6 -1: ([DD)V -14 -1: Illegal size: -8 -1: ([DIID)V -7 -1: (II[I)I -17 -1: java_profile_name -28 -1: java/util/AbstractCollection -43 -1: (Ljava/net/URL;)[Ljava/security/CodeSource; -62 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/net/URLStreamHandler; -33 -1: [Ljava/util/HashMap$Node; -15 -1: (Native Method) -11 -1: fileNameMap -26 -1: ()Ljava/util/ListIterator; -25 -1: java/util/LinkedList$Node -18 -1: SELECT_ALTERNATIVE -35 -1: (Ljava/lang/Object;)Ljava/util/Set; -19 -1: java/io/IOException -16 -1: : already loaded -9 -1: image/gif -6 -1: (TE;)I -25 -1: (Ljava/util/Properties;)V -40 -1: (Ljava/lang/String;)Ljava/nio/file/Path; -19 -1: checkedNavigableMap -9 -1: checkInt( -17 -1: getContentTypeFor -26 -1: ()Ljava/io/FileDescriptor; -69 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V -6 -1: (TE;)V -25 -1: WARNING: Default charset -14 -1: ZipFile closed -2 -1: CA -6 -1: (TE;)Z -64 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToLongTask -15 -1: FileSystem.java -75 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -10 -1: FileLoader -44 -1: (Lsun/util/PreHashedMap;)[Ljava/lang/Object; -19 -1: availableProcessors -2 -1: CN -36 -1: ([JII)Ljava/util/Spliterator$OfLong; -11 -1: access$1100 -18 -1: getFieldAtIfLoaded -30 -1: PrivilegedActionException.java -6 -1: EUC-JP -20 -1: (F)Ljava/lang/Float; -22 -1: unable to instantiate -31 -1: java/lang/reflect/ReflectAccess -23 -1: (Ljava/lang/Object;JC)V -3 -1: get -59 -1: ([TT;IILjava/util/Comparator<-TT;>;)V -2 -1: DE -13 -1: GMT_ID_LENGTH -7 -1: execute -12 -1: MethodHandle -18 -1: AllPermission.java -54 -1: (Ljava/util/Locale;)Lsun/util/locale/LocaleExtensions; -23 -1: MapReduceKeysToLongTask -12 -1: varargsArray -23 -1: java/util/jar/JarFile$1 -23 -1: java/util/jar/JarFile$2 -23 -1: java/util/jar/JarFile$3 -12 -1: getAndUpdate -13 -1: reserveMemory -17 -1: expungeStaleEntry -6 -1: EUC-KR -120 -1: Ljava/lang/ref/WeakReference;Ljava/util/Map$Entry; -69 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher; -26 -1: ()Ljava/util/NavigableMap; -7 -1: L_PCHAR -23 -1: (Ljava/lang/String$1;)V -4 -1: KEYS -37 -1: (Ljava/util/List;Ljava/lang/Object;)I -31 -1: Ljava/lang/ArithmeticException; -15 -1: [Ljava/net/URL; -37 -1: (Ljava/util/List;Ljava/lang/Object;)V -18 -1: MAX_HIGH_SURROGATE -6 -1: (JCZ)V -4 -1: mark -17 -1: setMethodAccessor -21 -1: java/io/ExpiringCache -21 -1: PrivilegedAction.java -21 -1: MappedByteBuffer.java -2 -1: FR -10 -1: copyMemory -8 -1: L_SERVER -13 -1: assertionLock -12 -1: searchValues -46 -1: (Ljava/util/Collection<*>;Ljava/lang/Object;)I -21 -1: ProtectionDomainCache -32 -1: USE_PREDEFINED_INTERPRET_METHODS -2 -1: GB -16 -1: getFinalRefCount -23 -1: Ljava/lang/ClassLoader; -4 -1: mask -94 -1: (Ljava/util/function/ToDoubleFunction<-TT;>;)Ljava/util/Comparator; -4 -1: bind -41 -1: (Ljava/lang/Class<*>;I)Ljava/lang/Object; -9 -1: COUNT_GWT -16 -1: DASH_PUNCTUATION -24 -1: UNICODE_LOCALE_EXTENSION -15 -1: checkInvariants -10 -1: stringSize -12 -1: deepHashCode -30 -1: java/security/cert/Certificate -19 -1: America/Los_Angeles -19 -1: unmappableForLength -6 -1: UTF-16 -10 -1: methodType -21 -1: sun/misc/URLClassPath -19 -1: META-INF/INDEX.LIST -10 -1: jniVersion -6 -1: IBM437 -29 -1: sun/reflect/FieldAccessorImpl -21 -1: ()Ljava/lang/Package; -32 -1: java/security/SecurityPermission -57 -1: (Lsun/util/calendar/Era;)Lsun/util/calendar/CalendarDate; -34 -1: [Ljava/util/concurrent/locks/Lock; -11 -1: replacement -20 -1: ()Ljava/lang/String; -6 -1: resize -12 -1: UTF_32BE_BOM -26 -1: (Ljava/util/jar/JarFile;)V -24 -1: DEFAULT_INITIAL_CAPACITY -87 -1: (ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode; -74 -1: (Ljava/util/jar/JarFile;)Ljava/util/Enumeration; -18 -1: parameterSlotDepth -26 -1: (Ljava/util/jar/JarFile;)Z -18 -1: makePlatformString -24 -1: doPrivilegedWithCombiner -48 -1: (Ljava/lang/String;)Lsun/util/calendar/ZoneInfo; -27 -1: ()Ljava/lang/ref/Reference; -40 -1: java/util/ArrayList$ArrayListSpliterator -67 -1: ([Ljava/lang/Object;IILjava/util/Comparator;[Ljava/lang/Object;II)V -2 -1: ID -19 -1: stringPropertyNames -28 -1: (Ljava/util/Collections$1;)V -12 -1: STATE_YELLOW -12 -1: isNormalized -10 -1: fromIndex( -16 -1: getFloatVolatile -37 -1: Lsun/util/calendar/BaseCalendar$Date; -10 -1: properties -17 -1: peakFinalRefCount -102 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; -68 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; -2 -1: IT -9 -1: ([BI[BI)V -51 -1: scl permissions SecureClassLoader assigns -36 -1: (Ljava/util/Set;Ljava/lang/Object;)V -11 -1: ([SII[SII)V -21 -1: sun.io.useCanonCaches -18 -1: Illegal capacity: -22 -1: (Ljava/lang/Integer;)I -83 -1: ([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set<[Ljava/lang/Object;>;)V -65 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;II)V -17 -1: java/util/Objects -48 -1: (ILjava/util/List;)Ljava/lang/invoke/LambdaForm; -31 -1: java/util/Properties$XmlSupport -10 -1: L_LOWALPHA -13 -1: long overflow -25 -1: NullPointerException.java -32 -1: (I)Ljava/lang/StackTraceElement; -34 -1: ()[Ljava/lang/reflect/Constructor; -2 -1: JP -3 -1: SST -12 -1: ShortCountry -48 -1: (Ljava/util/stream/Collector;)Ljava/lang/Object; -29 -1: Lsun/reflect/CallerSensitive; -10 -1: addElement -12 -1: lastReturned -6 -1: putInt -34 -1: sun.misc.JarIndex.metaInfFilenames -13 -1: getBaseLocale -20 -1: StringTokenizer.java -8 -1: entrySet -11 -1: getTypeName -17 -1: America/Sao_Paulo -5 -1: \t... -35 -1: (Lsun/util/calendar/CalendarDate;)I -28 -1: java/lang/StackOverflowError -35 -1: (Lsun/util/calendar/CalendarDate;)J -10 -1: logicalAnd -18 -1: csISOLatinCyrillic -43 -1: (Ljava/lang/String;II)Ljava/nio/CharBuffer; -73 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;Z)Ljava/lang/invoke/MethodType; -14 -1: aliases_MS1250 -14 -1: aliases_MS1251 -17 -1: getImplMethodKind -17 -1: getLastAccessTime -14 -1: aliases_MS1252 -14 -1: aliases_MS1253 -35 -1: (Lsun/util/calendar/CalendarDate;)V -2 -1: KR -14 -1: aliases_MS1254 -14 -1: getGenericInfo -8 -1: utf_32be -14 -1: aliases_MS1257 -35 -1: (Lsun/util/calendar/CalendarDate;)Z -13 -1: StringEncoder -7 -1: LDT2037 -7 -1: generic -2 -1: L9 -45 -1: ([DLjava/util/function/IntToDoubleFunction;)V -17 -1: isOtherAlphabetic -9 -1: implWrite -24 -1: PC-Multilingual-850+euro -12 -1: valueMatches -78 -1: (Ljava/lang/String;Lsun/util/locale/ParseStatus;)Lsun/util/locale/LanguageTag; -3 -1: gmt -19 -1: (Ljava/io/Reader;)V -25 -1: (JJ)Ljava/nio/ByteBuffer; -7 -1: val$url -26 -1: (Ljava/nio/ByteBuffer;IJ)V -10 -1: isImplicit -19 -1: getDeclaredClasses0 -4 -1: (I)B -4 -1: (I)C -4 -1: (I)D -9 -1: byteValue -4 -1: (I)F -5 -1: ([J)I -6 -1: isLive -5 -1: sleep -4 -1: (I)I -4 -1: (I)J -6 -1: outBuf -77 -1: Ljava/util/AbstractCollection;Ljava/util/Set; -4 -1: (I)S -5 -1: ([J)V -4 -1: (I)V -30 -1: (I[C)Ljava/lang/StringBuilder; -14 -1: intBitsToFloat -4 -1: (I)Z -15 -1: MethodType.java -14 -1: resolveSibling -9 -1: Enum.java -111 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V -14 -1: IS_CONSTRUCTOR -4 -1: bits -34 -1: java/security/PermissionCollection -9 -1: autoFlush -21 -1: java/util/Collections -12 -1: bindReceiver -20 -1: DMH.invokeStaticInit -11 -1: charsetName -14 -1: x-utf-32be-bom -5 -1: cause -7 -1: handle0 -43 -1: ([I[C[Ljava/lang/invoke/LambdaForm$Name;I)Z -30 -1: getDefaultAllowUserInteraction -18 -1: ConcurrentMap.java -35 -1: (Ljava/lang/String;Z)Ljava/net/URL; -33 -1: Ljava/nio/charset/CharsetDecoder; -36 -1: java/lang/invoke/MethodHandleStatics -34 -1: java/util/concurrent/ConcurrentMap -16 -1: collectArguments -22 -1: packageAssertionStatus -79 -1: (JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J -39 -1: Cannot reflectively create enum objects -62 -1: attempt to add a Permission to a readonly PermissionCollection -22 -1: FieldAccessorImpl.java -9 -1: ByteCache -4 -1: TRUE -85 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable; -17 -1: java.library.path -7 -1: encoder -21 -1: default locale = -11 -1: secondOfDay -37 -1: (Lsun/util/calendar/ZoneInfoFile$1;)V -35 -1: sun/reflect/UnsafeFieldAccessorImpl -24 -1: (Ljava/lang/Object;JJJ)V -16 -1: countStackFrames -24 -1: (Ljava/lang/Object;JJJ)Z -17 -1: nonfairTryAcquire -20 -1: ArrayListSpliterator -5 -1: /DMH= -68 -1: (Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String; -2 -1: PI -8 -1: cspcp852 -112 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale; -8 -1: cspcp855 -58 -1: (Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z -33 -1: sun/misc/PerfCounter$CoreCounters -6 -1: CESU_8 -7 -1: vmslots -4 -1: Init -7 -1: handler -11 -1: getProperty -10 -1: isVolatile -8 -1: ([J[IJ)I -25 -1: ()Ljava/lang/ClassLoader; -8 -1: asChange -81 -1: (Ljava/net/URLClassLoader;Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; -12 -1: naturalOrder -8 -1: getState -40 -1: (Ljava/lang/Object;I)[Ljava/lang/String; -36 -1: java/security/AccessControlException -10 -1: linkBefore -48 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;Z)V -26 -1: (Ljava/util/WeakHashMap;)V -23 -1: bad method type alias: -7 -1: putChar -18 -1: basicTypeSignature -33 -1: sun/misc/InvalidJarIndexException -13 -1: getPrivateuse -14 -1: isConstantZero -24 -1: java/io/FilePermission$1 -9 -1: Long.java -19 -1: getLocaleExtensions -10 -1: discovered -17 -1: Invalid file path -12 -1: MAX_MH_ARITY -20 -1: observesDaylightTime -31 -1: Ljava/lang/invoke/MethodHandle; -6 -1: , end -24 -1: java/io/FileDescriptor$1 -12 -1: loadLibrary. -11 -1: Method.java -12 -1: loadLibrary0 -23 -1: java/util/stream/Stream -37 -1: sun.lang.ClassLoader.allowArraySyntax -8 -1: appClass -15 -1: FileReader.java -5 -1: (IF)I -29 -1: [Ljava/lang/ClassValue$Entry; -12 -1: (principals -30 -1: jar jar verification -22 -1: ARRAY_CHAR_BASE_OFFSET -18 -1: newDirectoryStream -4 -1: atan -5 -1: (IF)V -24 -1: (Ljava/lang/Character;)I -2 -1: TH -10 -1: startsWith -9 -1: baseCount -13 -1: canonicalize0 -47 -1: (Ljava/lang/ClassLoader;[Ljava/lang/Class<*>;)V -22 -1: Ljava/io/OutputStream; -2 -1: TW -10 -1: H_RESERVED -19 -1: URLClassLoader.java -16 -1: isAccessibleFrom -59 -1: Ljava/util/Hashtable; -33 -1: java/lang/invoke/ConstantCallSite -14 -1: Ljava/net/URL; -12 -1: deleteOnExit -20 -1: MAX_SKIP_BUFFER_SIZE -30 -1: [Ljava/lang/ref/WeakReference; -15 -1: contentPathProp -9 -1: initCause -53 -1: (Ljava/util/Queue;Ljava/lang/Class;)Ljava/util/Queue; -20 -1: java/util/TimeZone$1 -2 -1: UK -86 -1: (BLjava/lang/Class;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; -51 -1: (II[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; -18 -1: Lsun/misc/Cleaner; -31 -1: RuntimeInvisibleTypeAnnotations -2 -1: US -7 -1: makeInt -40 -1: sun/reflect/annotation/AnnotationSupport -28 -1: sun/reflect/misc/ReflectUtil -8 -1: utf_32le -40 -1: (Ljava/lang/Object;JLjava/lang/Object;)V -24 -1: java/nio/file/WatchEvent -66 -1: (Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/invoke/MethodType; -91 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; -114 -1: (Ljava/lang/ThreadLocal;ILjava/lang/ThreadLocal$ThreadLocalMap$Entry;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; -20 -1: internalWriteEntries -79 -1: (TT;Ljava/util/function/Supplier;)TT; -14 -1: bitIndex < 0: -88 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; -6 -1: , len -28 -1: java/io/BufferedOutputStream -11 -1: System.java -11 -1: csISOLatin1 -11 -1: csISOLatin2 -28 -1: Ljava/io/OutputStreamWriter; -27 -1: IllegalAccessException.java -11 -1: csISOLatin4 -14 -1: isDaylightTime -11 -1: csISOLatin5 -21 -1: getYearLengthInMonths -13 -1: canonicalizes -93 -1: "'s signer information does not match signer information of other classes in the same package -32 -1: ()Lsun/management/GcInfoBuilder; -37 -1: (IILjava/nio/charset/CoderResult$1;)V -10 -1: stateNames -46 -1: (Ljava/lang/String;)Ljava/nio/charset/Charset; -21 -1: acquireMethodAccessor -2 -1: X- -32 -1: java/security/ProtectionDomain$1 -5 -1: atan2 -32 -1: java/security/ProtectionDomain$2 -32 -1: java/security/ProtectionDomain$3 -41 -1: malformed input: partial character at end -18 -1: dropParameterTypes -44 -1: (Ljava/lang/String;)Ljava/lang/StringBuffer; -18 -1: CalendarUtils.java -5 -1: month -84 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; -33 -1: sun/misc/JavaNioAccess$BufferPool -18 -1: SearchMappingsTask -38 -1: DelegatingConstructorAccessorImpl.java -80 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class<*>;)Ljava/lang/invoke/MemberName; -8 -1: instance -54 -1: Parameter annotations don't match number of parameters -14 -1: createConstant -35 -1: java/lang/invoke/MemberName$Factory -4 -1: scrt -34 -1: Ljava/lang/InstantiationException; -20 -1: allowUserInteraction -15 -1: java/util/Deque -16 -1: forEachRemaining -35 -1: (J)Lsun/util/calendar/CalendarDate; -13 -1: no such field -25 -1: java/nio/file/FileSystems -16 -1: expectedModCount -44 -1: (Ljava/io/File;ILjava/nio/charset/Charset;)V -12 -1: createString -15 -1: useDaylightTime -31 -1: java/util/Properties$LineReader -111 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Class<*>;I[Ljava/lang/invoke/MemberName;)I -16 -1: java/util/Locale -26 -1: URLClassPath.getResource(" -58 -1: (Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)V -10 -1: appendTail -7 -1: cleaner -78 -1: (Lsun/nio/cs/FastCharsetProvider;Ljava/lang/String;)Ljava/nio/charset/Charset; -18 -1: convertOldISOCodes -4 -1: year -38 -1: java/lang/ReflectiveOperationException -28 -1: (Ljava/lang/StringBuffer;B)V -27 -1: (D)Ljava/lang/StringBuffer; -17 -1: emptyNavigableSet -7 -1: indices -10 -1: is sealed -21 -1: SPECIFICATION_VERSION -3 -1: TE; -8 -1: addMonth -24 -1: java/util/HashMap$Values -17 -1: SEARCH_ALL_SUPERS -18 -1: uncaught exception -14 -1: declaredFields -2 -1: [B -2 -1: [C -8 -1: ABSTRACT -2 -1: [D -2 -1: [F -2 -1: [I -2 -1: [J -5 -1: false -36 -1: (Ljava/net/URL;Ljava/lang/String;J)V -12 -1: equalContext -11 -1: VOID_RESULT -2 -1: [S -24 -1: (JLjava/lang/Object;JJ)V -36 -1: Ljava/security/PermissionCollection; -2 -1: [Z -17 -1: floatToRawIntBits -2 -1: [] -21 -1: ()[Ljava/lang/Thread; -20 -1: [Ljava/lang/Integer; -42 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Z)V -19 -1: checkPrintJobAccess -40 -1: (Ljava/lang/Object;)Ljava/lang/Class<*>; -31 -1: (Lsun/reflect/FieldAccessor;Z)V -10 -1: reallyPoll -52 -1: (Ljava/lang/ref/Reference;)Ljava/lang/ref/Reference; -100 -1: (JLjava/util/function/Function<-TV;+TU;>;Ljava/util/function/Consumer<-TU;>;)V -19 -1: CheckedNavigableMap -48 -1: (Ljava/lang/String;)Ljava/lang/RuntimeException; -35 -1: java/util/Hashtable$ValueCollection -89 -1: (JLjava/util/function/ToDoubleFunction<-TK;>;DLjava/util/function/DoubleBinaryOperator;)D -10 -1: Stack.java -57 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;I)V -12 -1: getTimeOfDay -12 -1: reduceValues -22 -1: warnUnsupportedCharset -34 -1: (Ljava/lang/ref/Reference<+TS;>;)Z -31 -1: EEE, dd MMM yyyy HH:mm:ss 'GMT' -19 -1: setCachedLambdaForm -21 -1: (I)Ljava/lang/Object; -85 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;Ljava/util/Locale$1;)V -36 -1: java/security/AccessControlContext$1 -27 -1: Lsun/net/www/MessageHeader; -23 -1: ()[Ljava/lang/Class<*>; -14 -1: refKindIsValid -41 -1: sun/reflect/NativeConstructorAccessorImpl -6 -1: binary -23 -1: ()Ljava/nio/CharBuffer; -8 -1: getSpace -45 -1: bootstrap method failed to produce a CallSite -15 -1: getISO3Language -17 -1: TRANSITION_NSHIFT -163 -1: ([Ljava/lang/String;Ljava/util/Map;>;)Ljava/util/Map;>; -7 -1: os.name -38 -1: java/util/function/IntToDoubleFunction -8 -1: checkInt -21 -1: java/lang/VerifyError -42 -1: sunpkcs11 SunPKCS11 provider debugging -19 -1: URI is not absolute -23 -1: java/io/DataInputStream -53 -1: (Ljava/lang/Object;)Ljava/nio/charset/CharsetEncoder; -2 -1: _# -41 -1: (Ljava/io/FilenameFilter;)[Ljava/io/File; -26 -1: Ljava/util/jar/Attributes; -7 -1: collect -17 -1: Lsun/misc/Unsafe; -97 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; -78 -1: (Ljava/util/Enumeration;)Ljava/util/ArrayList; -28 -1: (II)Ljava/lang/StringBuffer; -54 -1: (Ljava/lang/reflect/Constructor<*>;)Ljava/lang/String; -28 -1: ()Ljava/util/ResourceBundle; -48 -1: java/util/ArraysParallelSortHelpers$FJInt$Sorter -9 -1: no access -57 -1: Ljava/lang/ref/ReferenceQueue; -7 -1: getPerf -11 -1: getClassAt0 -11 -1: rtypeOffset -20 -1: thread can't be null -12 -1: addArguments -12 -1: utf_32le_bom -21 -1: allowThreadSuspension -25 -1: defaultExpectedLineLength -11 -1: removeFirst -13 -1: reduceEntries -20 -1: Read-ahead limit < 0 -57 -1: (Ljava/util/Collection<-TT;>;[TT;)Z -39 -1: ()Ljava/lang/invoke/MemberName$Factory; -13 -1: ZipCoder.java -16 -1: java/lang/Thread -27 -1: java/lang/NoSuchMethodError -66 -1: (Ljava/util/jar/JarFile;Ljava/net/URL;)[Ljava/security/CodeSource; -22 -1: java/lang/StringBuffer -3 -1: TK; -34 -1: (I)Ljava/lang/invoke/MethodHandle; -30 -1: (Ljava/lang/reflect/Method;Z)V -13 -1: file.encoding -14 -1: removeTreeNode -27 -1: sun/misc/JavaSecurityAccess -58 -1: ([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object; -19 -1: equalLimitedContext -22 -1: appendVmSynonymMessage -10 -1: applyAsInt -23 -1: privateGetPublicMethods -11 -1: dumpThreads -25 -1: RuntimeVisibleAnnotations -37 -1: (IF)Ljava/lang/AbstractStringBuilder; -18 -1: getBooleanVolatile -27 -1: (Ljava/util/zip/ZipFile;J)V -25 -1: INITIAL_QUOTE_PUNCTUATION -51 -1: (Ljava/util/Map;)[Ljava/lang/annotation/Annotation; -54 -1: (ILjava/lang/Object;)Ljava/lang/AbstractStringBuilder; -20 -1: reflectionDataOffset -2 1: aa -51 -1: (Ljava/util/jar/Attributes$Name;)Ljava/lang/String; -13 -1: transferLinks -18 -1: java/util/Vector$1 -10 -1: ensureOpen -22 -1: getDeclaredConstructor -2 -1: am -19 -1: NF_allocateInstance -66 -1: (Ljava/util/Spliterator$OfDouble;Z)Ljava/util/stream/DoubleStream; -6 -1: ([SS)I -17 -1: newReflectionData -19 -1: subclassAuditsQueue -11 -1: access$1200 -16 -1: ValueSpliterator -18 -1: preparedLambdaForm -38 -1: (Ljava/net/URL;)Ljava/net/InetAddress; -14 -1: getMaxPriority -32 -1: ()[Ljava/lang/StackTraceElement; -67 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToDoubleTask -62 -1: (Ljava/util/Hashtable;)V -6 -1: EXTHDR -14 -1: java/util/Date -2 -1: az -6 -1: ([SS)V -15 -1: arrayBaseOffset -9 -1: isTrusted -23 -1: (Ljava/lang/Object;JD)V -2 -1: bb -10 -1: ([BII[BI)V -7 -1: toLower -14 -1: invoke_LLLLL_L -7 -1: jarfile -42 -1: (Ljava/lang/String;)Lsun/misc/PerfCounter; -28 -1: java/lang/ref/Reference$Lock -16 -1: java/util/BitSet -22 -1: jarfile parsing error! -18 -1: jdk_update_version -14 -1: invoke_LLLLL_V -20 -1: java/util/LinkedList -22 -1: erasedInvokerWithDrops -25 -1: timeout value is negative -21 -1: getCalendarProperties -25 -1: not a method descriptor: -2 -1: cb -31 -1: (Lsun/misc/JavaUtilJarAccess;)V -2 -1: cd -43 -1: Lsun/util/PreHashedMap; -12 -1: getEntrySize -2 -1: ce -24 -1: guessContentTypeFromName -2 -1: ch -14 -1: JulianCalendar -22 -1: [Ljava/lang/Cloneable; -122 -1: Ljava/util/AbstractCollection;Ljava/util/Deque;Ljava/lang/Cloneable;Ljava/io/Serializable; -34 -1: Lsun/util/locale/BaseLocale$Cache; -14 -1: LinkedEntrySet -72 -1: Ljava/util/AbstractSet;Ljava/io/Serializable; -39 -1: ()Ljava/io/ObjectOutputStream$PutField; -2 -1: cs -8 -1: indexFor -25 -1: (Ljava/util/List<+TE;>;)V -7 -1: subpath -11 -1: invokeExact -14 -1: setFileNameMap -22 -1: LangReflectAccess.java -8 -1: referent -34 -1: java/util/MissingResourceException -77 -1: (Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package; -11 -1: ([FII[FII)V -17 -1: getParameterCount -18 -1: isMemberAccessible -10 -1: getExtDirs -69 -1: (Ljava/util/List<-TT;>;Ljava/util/List<+TT;>;)V -9 -1: getNextPC -13 -1: setProperties -2 -1: de -16 -1: generateCertPath -6 -1: decode -16 -1: getDefaultParent -50 -1: (Ljava/net/URL;[Ljava/security/cert/Certificate;)V -24 -1: Certificate factory for -35 -1: ()Ljava/lang/reflect/AnnotatedType; -2 -1: ee -12 -1: asLongBuffer -7 -1: PRIVATE -16 -1: aliases_UTF_32BE -2 -1: en -2 -1: eq -7 -1: indexOf -136 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class<+Ljava/lang/Throwable;>;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; -24 -1: (Ljava/lang/Class<*>;I)V -72 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/IllegalAccessException; -35 -1: java/util/jar/JavaUtilJarAccessImpl -24 -1: (Ljava/lang/Class<*>;I)Z -2 -1: ex -24 -1: getProtectionDomainCache -101 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;JLjava/security/AccessControlContext;)V -3 -1: hit -8 -1: UTF_16BE -2 -1: fd -16 -1: EmptyEnumeration -4 -1: attr -16 -1: fromIndex < -1: -7 -1: getIntB -22 -1: java/io/FilePermission -2 -1: fr -2 -1: fs -7 -1: lazySet -7 -1: getIntL -37 -1: configfile JAAS ConfigFile loading -24 -1: sun/nio/cs/StreamEncoder -40 -1: (Ljava/time/ZoneId;)Ljava/util/TimeZone; -132 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/BiConsumer;)V -2 -1: gc -18 -1: Ljava/lang/Thread; -10 -1: cacheArray -48 -1: (Ljava/util/jar/JarFile;)Ljava/util/jar/JarFile; -61 -1: (Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)V -8 -1: readByte -7 -1: ([S[S)Z -24 -1: findBootstrapClassOrNull -2 -1: hb -7 -1: REPLACE -45 -1: ()Ljava/util/Enumeration; -10 -1: isOverflow -2 -1: he -13 -1: getCachedJan1 -12 -1: getClassPath -8 -1: leapYear -31 -1: java/lang/invoke/MethodTypeForm -10 -1: ANNOTATION -20 -1: getGregorianCalendar -11 -1: ISO_8859_13 -11 -1: ISO_8859_15 -6 -1: invoke -2 -1: ht -7 -1: ListItr -15 -1: synchronizedMap -7 -1: cleanup -94 -1: (Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;)Lsun/reflect/annotation/AnnotationType; -3 -1: TT; -69 -1: (JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/Gregorian$Date; -81 -1: (Ljava/util/HashMap$TreeNode;)Z -20 -1: Min. Heap Size: -33 -1: (IZ)Ljava/lang/invoke/MethodType; -2 -1: id -7 -1: ([DI)[D -37 -1: (Ljava/lang/reflect/Constructor<*>;)I -42 -1: ;>([TT;II)V -13 -1: addSuppressed -28 -1: internalMemberNameEnsureInit -2 -1: in -17 -1: getCompressedSize -34 -1: sun/misc/Launcher$AppClassLoader$1 -88 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class<*>;)Ljava/security/AccessControlContext; -37 -1: (Ljava/lang/reflect/Constructor<*>;)V -2 -1: is -2 -1: it -6 -1: ENDOFF -4 -1: void -2 -1: iw -14 -1: emptySortedSet -2 -1: ix -17 -1: unicode-1-1-utf-8 -64 -1: (Ljava/lang/Class;Ljava/util/List;)Ljava/lang/invoke/MethodType; -46 -1: (Lsun/misc/URLClassPath$Loader;)Ljava/net/URL; -2 -1: ja -13 -1: synchronized -76 -1: ([DLjava/util/function/IntToDoubleFunction;)Ljava/util/function/IntConsumer; -11 -1: wrapperType -51 -1: ()Ljava/util/Comparator; -106 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/Object; -17 -1: removeAllElements -2 -1: ji -24 -1: java/util/Vector$ListItr -14 -1: getNestedTypes -6 -1: L_MARK -27 -1: Source does not fit in dest -2 -1: l1 -2 -1: jp -2 -1: l2 -4 -1: (J)B -57 -1: (Ljava/lang/String;Ljava/util/Locale;I)Ljava/lang/String; -4 -1: (J)C -27 -1: ForEachTransformedValueTask -2 -1: l4 -26 -1: java/util/Hashtable$KeySet -4 -1: (J)D -2 -1: l5 -39 -1: java/security/BasicPermissionCollection -4 -1: (J)F -2 -1: jv -29 -1: MapReduceMappingsToDoubleTask -18 -1: copyFromShortArray -2 -1: l9 -3 -1: TV; -4 -1: (J)I -4 -1: (J)J -23 -1: Lsun/util/calendar/Era; -8 -1: x-EUC-TW -15 -1: checkSetFactory -7 -1: Special -4 -1: (J)S -4 -1: (J)V -7 -1: invoke_ -25 -1: (IC)Ljava/nio/ByteBuffer; -68 -1: (JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/attribute/FileTime; -36 -1: ()Ljava/net/URLStreamHandlerFactory; -4 -1: (J)Z -181 -1: (Ljava/lang/Class<*>;Ljava/lang/ref/SoftReference;>;Ljava/lang/ref/SoftReference;>;)Z -9 -1: getOffset -46 -1: (ILjava/lang/String;)Ljava/lang/StringBuilder; -7 -1: element -15 -1: createByteArray -17 -1: uncaughtException -2 -1: ko -29 -1: java/nio/file/DirectoryStream -15 -1: getISOCountries -246 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class<*>;Ljava/lang/Class;)Ljava/lang/invoke/MemberName;^Ljava/lang/IllegalAccessException;^TNoSuchMemberException; -7 -1: invoker -17 -1: langReflectAccess -10 -1: bindSingle -23 -1: java/lang/reflect/Proxy -2 -1: lb -2 -1: lc -29 -1: CREATE_CLASSLOADER_PERMISSION -5 -1: isSet -18 -1: ([Ljava/io/File;)V -15 -1: urlNoFragString -21 -1: DirectByteBuffer.java -15 -1: java.class.path -15 -1: createDirectory -4 -1: GMT -37 -1: sun/reflect/annotation/ExceptionProxy -28 -1: (Ljava/util/Map<+TK;+TV;>;)V -17 -1: getContentHandler -26 -1: GenericDeclRepository.java -56 -1: (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; -15 -1: getJavaIOAccess -39 -1: java/util/Collections$EmptyListIterator -34 -1: java/lang/ConditionalSpecialCasing -82 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/management/GarbageCollectorMBean; -58 -1: (Ljava/util/function/ToIntFunction;)Ljava/util/Comparator; -21 -1: ()Lsun/misc/Launcher; -2 -1: lt -92 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V -8 -1: disjoint -62 -1: (Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V -24 -1: ([Ljava/lang/Object;)TT; -4 -1: lmap -8 -1: SATURDAY -12 -1: toStringUTF8 -91 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object; -46 -1: pkcs11 PKCS11 session manager debugging -27 -1: (Z)Ljava/lang/StringBuffer; -7 -1: forEach -17 -1: (Ljava/io/File;)I -17 -1: (Ljava/io/File;)J -5 -1: RESET -6 -1: isFile -14 -1: Exception.java -8 -1: isPublic -27 -1: computeInitialPreparedForms -50 -1: (BZLjava/lang/Class;)Ljava/lang/invoke/LambdaForm; -19 -1: getAvailableLocales -17 -1: (Ljava/io/File;)V -28 -1: ()Ljava/nio/charset/Charset; -10 -1: appendNull -17 -1: (Ljava/io/File;)Z -23 -1: java/lang/InternalError -2 -1: ne -6 -1: radix -8 -1: checksum -66 -1: (Lsun/net/www/MessageHeader;Ljava/lang/String;Ljava/lang/Object;)V -45 -1: (Ljava/io/FilenameFilter;)[Ljava/lang/String; -8 -1: checkJar -28 -1: default format locale = -13 -1: normalizeTime -26 -1: java/util/AbstractList$Itr -30 -1: java/util/function/IntFunction -7 -1: TIS-620 -12 -1: reverseBytes -2 -1: of -26 -1: java/lang/ClassFormatError -109 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; -10 -1: delimiters -20 -1: indexOfSupplementary -16 -1: aliases_UTF_32LE -134 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/Map; -17 -1: [Ljava/lang/Long; -2 -1: or -12 -1: getClassName -31 -1: (Ljava/nio/charset/Charset;FF)V -6 -1: ([FF)I -39 -1: (Ljava/util/Locale;)[Ljava/lang/String; -33 -1: java/util/WeakHashMap$KeyIterator -8 -1: UTF_16LE -12 -1: isISOControl -75 -1: (Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult; -7 -1: ([I[I)Z -28 -1: Self-causation not permitted -6 -1: ([FF)V -14 -1: defaultCharset -12 -1: isJavaLetter -2 -1: pm -39 -1: cannot reflectively invoke MethodHandle -20 -1: getSystemClassLoader -42 -1: ([Ljava/lang/Object;IILjava/lang/Object;)I -56 -1: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; -42 -1: ([Ljava/lang/Object;IILjava/lang/Object;)V -12 -1: ZipFile.java -43 -1: (Ljava/util/zip/ZipFile;)Ljava/lang/String; -22 -1: Ljava/net/InetAddress; -15 -1: getCharVolatile -32 -1: ()[Ljava/lang/reflect/Parameter; -13 -1: delimsChanged -13 -1: getFileSystem -13 -1: METHOD_RETURN -20 -1: sun/misc/PerfCounter -61 -1: (Ljava/util/HashMap;)Ljava/util/HashMap$Node; -8 -1: newIndex -18 -1: getDisplayLanguage -36 -1: (C)Ljava/lang/AbstractStringBuilder; -36 -1: java/lang/StringCoding$StringEncoder -12 -1: forEachEntry -23 -1: [Ljava/io/Serializable; -13 -1: totalCapacity -26 -1: java/io/FileOutputStream$1 -14 -1: signatureArity -90 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/security/cert/Certificate;)V -17 -1: reflectionFactory -6 -1: ibm737 -17 -1: fillInStackTrace0 -16 -1: allocateInstance -52 -1: (Lsun/util/locale/BaseLocale$Key;)Ljava/lang/String; -9 -1: addExtURL -16 -1: copyFromIntArray -65 -1: (Ljava/security/Permission;Z)Ljava/security/PermissionCollection; -57 -1: java/util/concurrent/ConcurrentHashMap$SearchMappingsTask -10 -1: toEpochDay -4 -1: gate -24 -1: sun/nio/cs/UTF_8$Decoder -8 -1: entries2 -18 -1: isCharsetSupported -10 -1: toCustomID -2 -1: rw -33 -1: java/nio/ByteBufferAsFloatBufferB -25 -1: (ID)Ljava/nio/ByteBuffer; -12 -1: addTimeOfDay -61 -1: (Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z -2 -1: sd -25 -1: (Ljava/net/InetAddress;)V -33 -1: java/nio/ByteBufferAsFloatBufferL -2 -1: se -15 -1: hasQueuedThread -24 -1: assertMemberIsConsistent -37 -1: java/util/Collections$UnmodifiableMap -2 -1: sp -20 -1: setJavaUtilJarAccess -96 -1: (Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class; -8 -1: language -76 -1: (Ljava/util/SortedSet;)Ljava/util/SortedSet; -11 -1: findLibrary -61 -1: (Ljava/lang/Class<*>;)Lsun/reflect/annotation/AnnotationType; -6 -1: ([BZ)V -24 -1: DEFAULT_BYTE_BUFFER_SIZE -25 -1: (Ljava/util/ArrayList;I)V -2 -1: th -47 -1: (Ljava/util/Collection;)Ljava/util/Enumeration; -49 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/net/URL; -7 -1: ([D[D)Z -2 -1: to -22 -1: java/util/Locale$Cache -8 -1: iterator -30 -1: (Ljava/lang/StringBuilder;IZ)V -17 -1: ()Ljava/util/Set; -2 -1: tr -27 -1: (Ljava/nio/ByteBuffer;ISZ)V -6 -1: method -13 -1: allPermission -9 -1: ruleArray -8 -1: UTC_TIME -10 -1: LF_COUNTER -26 -1: Lsun/nio/cs/StreamDecoder; -25 -1: ()Lsun/util/calendar/Era; -6 -1: LOCHDR -21 -1: sun/net/www/MimeTable -12 -1: Cannot cast -2 -1: us -2 -1: ut -52 -1: Ljava/lang/invoke/MethodHandle$PolymorphicSignature; -6 -1: encode -15 -1: CharBuffer.java -24 -1: (C)Ljava/nio/ByteBuffer; -56 -1: (Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;)V -18 -1: getEnclosingMethod -56 -1: (Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;)Z -6 -1: ibm775 -9 -1: (IIIIII)I -44 -1: ([JLjava/util/function/IntToLongFunction;I)V -9 -1: (IIIIII)J -64 -1: (Ljava/util/Locale$LocaleKey;)Lsun/util/locale/LocaleExtensions; -2 -1: x- -2 -1: vm -5 -1: clock -9 -1: (IIIIII)V -10 -1: XmlSupport -19 -1: sun/nio/cs/US_ASCII -10 -1: toRealPath -5 -1: cp367 -6 -1: ST_END -58 -1: [Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule; -12 -1: hasSameRules -108 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/LocaleExtensions; -22 -1: java/lang/Class$Atomic -4 -1: sync -6 -1: listen -12 -1: firstElement -142 -1: (Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B[B)Ljava/lang/reflect/Method; -18 -1: internalProperties -28 -1: (Ljava/lang/StringBuffer;C)V -7 -1: factory -18 -1: ()Ljava/util/List; -50 -1: (Ljava/util/concurrent/CountedCompleter;[D[DIIII)V -44 -1: (Ljava/lang/Class;)Lsun/invoke/util/Wrapper; -83 -1: (JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D -12 -1: erasedType: -53 -1: (Ljava/util/AbstractList;Ljava/util/AbstractList$1;)V -20 -1: Cannot find package -27 -1: java/util/ArrayList$ListItr -10 -1: copyMethod -23 -1: java/lang/ThreadLocal$1 -16 -1: iso_646.irv:1983 -42 -1: (Ljava/lang/Thread;Ljava/lang/Throwable;)V -19 -1: DEFAULT_LOAD_FACTOR -40 -1: ([Ljava/lang/Object;)[Ljava/lang/Object; -10 -1: (JJJ[BII)I -12 -1: singletonMap -8 -1: RESERVED -9 -1: zipAccess -21 -1: SynchronizedSortedMap -4 -1: flag -15 -1: UnmodifiableSet -18 -1: WrappedPrintWriter -7 -1: resume0 -2 -1: yi -10 -1: erasedType -31 -1: CHECK_AWT_EVENTQUEUE_PERMISSION -8 -1: -59 -1: (Ljava/lang/String;)Ljava/security/cert/CertificateFactory; -40 -1: java/lang/management/MemoryManagerMXBean -33 -1: newGetIntIllegalArgumentException -16 -1: iso_646.irv:1991 -58 -1: (Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; -2 -1: zc -26 -1: (Ljava/util/AbstractMap;)V -6 -1: THROWS -11 -1: toCharArray -64 -1: (Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor; -2 -1: zh -68 -1: Ljava/lang/ref/SoftReference;>; -25 -1: (Ljava/util/Collection;)V -20 -1: getJdkSpecialVersion -17 -1: getTypeParameters -32 -1: [Ljava/lang/ClassValue$Entry<*>; -25 -1: (Ljava/util/Collection;)Z -26 -1: Lsun/nio/ch/Interruptible; -5 -1: 0.0p0 -5 -1: CACHE -7 -1: namesOK -21 -1: Ljava/lang/Exception; -51 -1: (Ljava/net/URL;Lsun/net/www/protocol/jar/Handler;)V -19 -1: jdk_special_version -66 -1: (Ljava/util/List;)Ljava/util/List; -75 -1: (Ljava/util/Comparator;Ljava/util/function/Function;)Ljava/util/Comparator; -11 -1: Arrays.java -19 -1: (Ljava/lang/Byte;)I -17 -1: java/lang/Class$1 -17 -1: java/lang/Class$2 -17 -1: java/lang/Class$3 -47 -1: java/lang/invoke/MethodHandleImpl$WrappedMember -17 -1: java/lang/Class$4 -44 -1: (Ljava/lang/Throwable;)Ljava/lang/Throwable; -9 -1: charCount -24 -1: ()Ljava/net/FileNameMap; -44 -1: sun/util/locale/provider/TimeZoneNameUtility -17 -1: not an array type -2 -1: {} -24 -1: (Lsun/misc/Launcher$1;)V -12 -1: directMemory -10 -1: parameters -5 -1: java. -14 -1: allocateDirect -51 -1: (Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder; -23 -1: java/nio/file/Watchable -37 -1: createDiagnosticFrameworkNotification -54 -1: (Ljava/lang/Class<*>;Z)Ljava/lang/invoke/MethodHandle; -35 -1: sun/nio/cs/StandardCharsets$Aliases -9 -1: retDelims -11 -1: MAX_ENTRIES -12 -1: CumulateTask -64 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedKeyTask -3 -1: iae -12 -1: AF_PUTSTATIC -21 -1: java/lang/Throwable$1 -45 -1: (Ljava/util/HashMap;)Ljava/util/HashMap$Node; -77 -1: (JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I -5 -1: after -29 -1: (Ljava/security/CodeSource;)Z -248 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToDoubleTask;Ljava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)V -6 -1: H_URIC -7 -1: L_DIGIT -7 -1: toNanos -24 -1: (D)Ljava/nio/ByteBuffer; -25 -1: getDiagnosticCommandMBean -6 2: [LFoo; -14 -1: path.separator -16 -1: toUnsignedString -40 -1: DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR -87 -1: (Ljava/security/Permission;[Ljava/security/cert/Certificate;)Ljava/security/Permission; -16 -1: inheritedChannel -11 -1: audio/basic -27 -1: sun.classloader.findClasses -10 -1: queryCount -20 -1: NF_ensureInitialized -12 -1: getBufIfOpen -23 -1: sun/nio/cs/UTF_16LE_BOM -134 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; -17 -1: getImplMethodName -14 -1: linkMethod => -25 -1: Ljava/lang/invoke/Stable; -32 -1: Ljava/lang/annotation/Retention; -7 -1: doInput -9 -1: -_.!~*'() -62 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;B)V -18 -1: separateWithCommas -43 -1: com/sun/crypto/provider/CipherBlockChaining -14 -1: createTempFile -9 -1: implFlush -20 -1: getOffsetsByStandard -21 -1: OutOfMemoryError.java -7 -1: jce.jar -46 -1: java/util/Collections$UnmodifiableNavigableMap -30 -1: (Ljava/io/File;)Ljava/io/File; -15 -1: LinkedList.java -15 -1: iso_8859-9:1989 -50 -1: sun/reflect/generics/factory/CoreReflectionFactory -10 -1: : JVM has -19 -1: HeapByteBuffer.java -6 -1: getURL -37 -1: java/security/cert/CertificateFactory -23 -1: getAllowUserInteraction -12 -1: otherParents -25 -1: ARRAY_BOOLEAN_BASE_OFFSET -9 -1: L_UPALPHA -41 -1: ([Ljava/util/Hashtable$Entry<**>;TK;TV;)V -6 -1: LOCHOW -11 -1: access$1300 -30 -1: sun/reflect/MethodAccessorImpl -130 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/List; -9 -1: MALFORMED -38 -1: (Ljava/lang/String;I)Ljava/lang/Short; -26 -1: File format not recognised -12 -1: setTimeOfDay -19 -1: java/lang/Exception -15 -1: getOutputStream -74 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -41 -1: (Ljava/lang/String;Z)Ljava/util/TimeZone; -49 -1: Lsun/reflect/generics/repository/ClassRepository; -8 -1: getCerts -90 -1: (Ljava/lang/Class<*>;ZLjava/lang/Class<*>;)Ljava/util/List; -5 -1: clone -32 -1: ()Ljava/lang/ref/Reference$Lock; -15 -1: caseIgnoreMatch -23 -1: (Ljava/util/Set;)V -25 -1: enumerateStringProperties -9 -1: inherited -4 -1: flip -8 -1: setMonth -38 -1: (Ljava/util/function/Consumer<-TV;>;)V -55 -1: java/util/concurrent/ConcurrentHashMap$ReduceValuesTask -37 -1: getJavaSecurityProtectionDomainAccess -67 -1: (Ljava/util/NavigableSet;Ljava/lang/Class;)Ljava/util/NavigableSet; -10 -1: reduceKeys -14 -1: MAX_CODE_POINT -24 -1: getGenericExceptionTypes -8 -1: fraction -30 -1: java/lang/InterruptedException -46 -1: (Ljava/lang/String;II[BI)Ljava/nio/ByteBuffer; -114 -1: ([Ljava/util/HashMap$Node;Ljava/util/HashMap$TreeNode;)V -66 -1: (Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/InternalError; -45 -1: (Ljava/lang/Object;)Ljava/lang/StringBuilder; -8 -1: putLongB -101 -1: (Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)Lsun/nio/cs/StreamDecoder; -16 -1: standardProvider -14 -1: parameterCount -59 -1: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/List; -8 -1: putLongL -12 -1: (TT;TV;TV;)Z -37 -1: Lsun/reflect/ConstructorAccessorImpl; -11 -1: ([CII[CII)V -14 -1: parameterArray -15 -1: | interpretName -62 -1: (JLjava/util/function/Function;Ljava/util/function/Consumer;)V -30 -1: (Z)Lsun/reflect/FieldAccessor; -19 -1: jvm_special_version -22 -1: java/util/ArrayDeque$1 -12 -1: initVersions -22 -1: java/lang/CharSequence -21 -1: NF_internalMemberName -5 -1: ()TE; -97 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;IZ)Ljava/lang/invoke/MethodHandle; -25 -1: java/nio/MappedByteBuffer -6 -1: addURL -17 -1: isConvertibleFrom -14 -1: extendWithType -9 -1: interrupt -11 -1: floorDivide -16 -1: x-ISO-2022-CN-GB -12 -1: CheckedQueue -7 -1: setLong -64 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V -108 -1: (Ljava/util/NavigableMap;)Ljava/util/NavigableMap; -38 -1: java/nio/channels/spi/SelectorProvider -17 -1: makeGuardWithTest -20 -1: (Ljava/util/List;Z)V -8 -1: val$path -12 -1: Runtime.java -7 -1: channel -71 -1: ([TT;IILjava/util/function/BinaryOperator;)V -18 -1: initializedHeaders -32 -1: ()[Lsun/launcher/LauncherHelper; -13 -1: jvInitialized -10 -1: getSeconds -7 -1: Decoder -20 -1: getYearFromFixedDate -6 -1: PREFIX -21 -1: sun.boot.library.path -11 -1: FIXED_DATES -33 -1: (JLjava/util/function/Consumer;)V -27 -1: initializeJavaAssertionMaps -13 -1: toOctalString -9 -1: fixResult -10 -1: typeParams -94 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node; -4 -1: Help -11 -1: setIfNotSet -39 -1: java/lang/UnsupportedOperationException -15 -1: zip file closed -8 -1: floorDiv -10 -1: canExecute -10 -1: encodeLoop -18 -1: addRequestProperty -56 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;I)V -10 -1: superclass -5 -1: close -56 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;I)Z -6 -1: ignore -32 -1: ()Ljava/lang/ref/ReferenceQueue; -19 -1: java/util/Formatter -27 -1: java/lang/ClassLoaderHelper -23 -1: (Ljava/lang/Object;JZ)V -29 -1: java/nio/file/WatchEvent$Kind -6 -1: CENLEN -4 -1: SIZE -68 -1: (Ljava/util/Deque;)Ljava/util/Queue; -9 -1: isEscaped -12 -1: LF_INTERPRET -22 -1: (I)Ljava/lang/Integer; -60 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; -49 -1: ([Ljava/lang/Class<*>;Ljava/lang/StringBuilder;)V -11 -1: getZipEntry -16 -1: metaInfFilenames -27 -1: (Ljava/lang/StringBuffer;)V -57 -1: (Ljava/lang/Object;)Ljava/util/WeakHashMap$Entry; -76 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class<*>; -8 -1: ([CII)[B -27 -1: (Ljava/lang/StringBuffer;)Z -24 -1: getManifestFromReference -8 -1: ([CII)[C -10 -1: H_LOWALPHA -18 -1: FileURLMapper.java -12 -1: fxLaunchMode -24 -1: isMethodHandleInvokeName -17 -1: winTimeToFileTime -19 -1: checkTopLevelWindow -26 -1: MapReduceMappingsToIntTask -13 -1: NORM_PRIORITY -18 -1: lookupViaProviders -30 -1: (I)Ljava/util/LinkedList$Node; -3 -1: UTC -10 -1: UNMAPPABLE -68 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;B)V -9 -1: META-INF/ -13 -1: Iterable.java -71 -1: ([Ljava/lang/reflect/Field;Ljava/lang/String;)Ljava/lang/reflect/Field; -9 -1: setOffset -8 -1: FJObject -50 -1: (Ljava/lang/CharSequence;)Ljava/util/StringJoiner; -23 -1: java/nio/HeapByteBuffer -23 -1: sun/util/PreHashedMap$1 -23 -1: sun/util/PreHashedMap$2 -34 -1: newGetCharIllegalArgumentException -40 -1: jca JCA engine class debugging -39 -1: (Ljava/lang/Object;I)Ljava/lang/Object; -42 -1: (Ljava/lang/String;)Ljava/net/InetAddress; -25 -1: (Ljava/net/FileNameMap;)V -44 -1: (Ljava/util/SortedMap;)Ljava/util/SortedMap; -52 -1: (Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long; -27 -1: ()[Ljava/util/HashMap$Node; -29 -1: java/util/EmptyStackException -16 -1: not a field type -14 -1: Ljava/io/File; -28 -1: ()[Ljava/security/Principal; -69 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V -5 -1: ()TK; -10 -1: ISO8859-13 -40 -1: java/lang/invoke/DirectMethodHandle$Lazy -30 -1: The object is not initialized. -10 -1: ISO8859-15 -88 -1: (Ljava/util/List;Ljava/lang/Class;)Ljava/util/List; -25 -1: (ZILjava/lang/String;II)Z -9 -1: stackSize -61 -1: (Ljava/util/Comparator;Ljava/lang/Object;Ljava/lang/Object;)I -16 -1: synchronizedList -90 -1: (Ljava/util/Comparator;Ljava/util/function/Function;Ljava/lang/Object;Ljava/lang/Object;)I -9 -1: nullCheck -174 -1: Ljava/util/concurrent/ConcurrentMap;Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;>; -14 -1: java/lang/Enum -3 -1: int -13 -1: detailMessage -56 -1: java/util/concurrent/ConcurrentHashMap$SearchEntriesTask -10 -1: ISO-8859-1 -10 -1: ISO-8859-2 -10 -1: ISO-8859-3 -10 -1: ISO-8859-4 -10 -1: ISO-8859-5 -10 -1: ISO-8859-6 -24 -1: ([Ljava/lang/Object;II)V -10 -1: ISO-8859-7 -10 -1: ISO-8859-8 -139 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)[Ljava/util/concurrent/ConcurrentHashMap$Node; -10 -1: ISO-8859-9 -5 -1: round -25 -1: DIRECTIONALITY_WHITESPACE -13 -1: NamedFunction -10 -1: startAgent -3 -1: ioe -7 -1: closing -24 -1: appendSchemeSpecificPart -56 -1: sun/reflect/ReflectionFactory$GetReflectionFactoryAction -83 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; -17 -1: isCharsetDetected -11 -1: getJarFiles -22 -1: getEnclosingMethodInfo -11 -1: setReadable -61 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)V -10 -1: attachment -34 -1: (Ljava/io/File;)Ljava/lang/String; -18 -1: ZipFileInputStream -15 -1: CodeSource.java -61 -1: (Ljava/util/jar/JarFile;)Ljava/util/List; -7 -1: cp00858 -108 -1: ([Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/invoke/LambdaForm$Name;II)Ljava/lang/invoke/LambdaForm$Name; -38 -1: ([DII)Ljava/util/Spliterator$OfDouble; -8 -1: val$name -11 -1: LF_REINVOKE -12 -1: validateTime -17 -1: copyFromCharArray -32 -1: throwSetIllegalArgumentException -14 -1: fieldModifiers -52 -1: (Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; -58 -1: (Ljava/io/OutputStream;Ljava/nio/charset/CharsetEncoder;)V -14 -1: generalInvoker -11 -1: interrupted -246 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToLongTask;Ljava/util/function/ToLongBiFunction;JLjava/util/function/LongBinaryOperator;)V -20 -1: java/util/Dictionary -17 -1: getDoubleVolatile -41 -1: (Ljava/lang/Class<*>;Ljava/lang/Object;)Z -8 -1: intValue -24 -1: (F)Ljava/nio/ByteBuffer; -5 -1: reset -54 -1: (ILjava/util/List;)[Ljava/lang/invoke/LambdaForm$Name; -19 -1: [Ljava/util/Locale; -43 -1: (Ljava/lang/String;II)Ljava/nio/ByteBuffer; -38 -1: ()Ljava/io/ObjectInputStream$GetField; -18 -1: [Locked by thread -10 -1: checkedMap -16 -1: checkedSortedMap -14 -1: illegal symbol -16 -1: TITLECASE_LETTER -4 -1: root -22 -1: (ZLjava/lang/String;)V -27 -1: ([JII)Ljava/nio/LongBuffer; -15 -1: printStackTrace -30 -1: newConstructorForSerialization -14 -1: getPermissions -13 -1: toStringCache -15 -1: equalParamTypes -37 -1: throwFinalFieldIllegalAccessException -35 -1: (Ljava/lang/String;Ljava/io/File;)V -34 -1: java/nio/charset/CoderResult$Cache -3 -1: .\n\n -33 -1: Ljava/nio/charset/CharsetEncoder; -11 -1: lambdaForms -65 -1: (Ljava/lang/Class;)TT; -39 -1: (CLjava/lang/Class;Ljava/lang/Object;)Z -3 -1: ise -14 -1: forLanguageTag -45 -1: ([Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Z -36 -1: RuntimeInvisibleParameterAnnotations -12 -1: binarySearch -24 -1: getAssociatedAnnotations -10 -1: decoderFor -6 -1: ibm813 -10 -1: logicalXor -10 -1: setVarargs -71 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Void;)V -4 -1: cast -6 -1: ibm819 -23 -1: getParentDelegationTime -8 -1: ([FII)[F -4 -1: .tmp -6 -1: (JII)J -27 -1: ()Ljava/lang/ref/Finalizer; -9 -1: sunec.jar -22 -1: java/net/URLConnection -41 -1: (Ljava/lang/Runnable;Ljava/lang/String;)V -20 -1: SecurityManager.java -18 -1: getZipFileOpenTime -7 -1: country -13 -1: inflaterCache -4 -1: -17 -1: java/lang/Runtime -125 -1: (Lsun/management/GcInfoBuilder;JJJ[Ljava/lang/management/MemoryUsage;[Ljava/lang/management/MemoryUsage;[Ljava/lang/Object;)V -24 -1: java/util/ResourceBundle -64 -1: Ljava/util/Hashtable; -79 -1: ([Ljava/util/WeakHashMap$Entry;[Ljava/util/WeakHashMap$Entry;)V -8 -1: x-ibm737 -39 -1: (Ljava/security/AccessControlContext;)Z -21 -1: (Ljava/lang/Class;I)V -4 -1: - -15 -1: calculateFields -22 -1: Ljava/util/Properties; -8 -1: getArray -21 -1: (Ljava/lang/Class;I)Z -41 -1: (Ljava/lang/ThreadGroup;)Ljava/lang/Void; -17 -1: Ljava/io/Console; -115 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; -12 -1: nextThreadID -81 -1: (Ljava/net/URLClassLoader;Ljava/lang/SecurityManager;Ljava/security/Permission;)V -23 -1: ARRAY_SHORT_BASE_OFFSET -10 -1: interpret_ -144 -1: (Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -20 -1: isIPv6LiteralAddress -13 -1: launcher_name -36 -1: java/util/function/IntToLongFunction -38 -1: java/util/WeakHashMap$EntrySpliterator -8 -1: copyInto -3 -1: ACT -11 -1: metafactory -31 -1: ([BLjava/nio/charset/Charset;)V -30 -1: java/lang/annotation/Retention -13 -1: getYearLength -42 -1: java/util/AbstractMap$SimpleImmutableEntry -31 -1: ()Ljava/lang/invoke/MemberName; -21 -1: sun/misc/JavaIOAccess -16 -1: jdk_build_number -8 -1: ST_RESET -96 -1: (BLjava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; -13 -1: getTypeString -15 -1: maxCharsPerByte -8 -1: checkKey -49 -1: (Ljava/nio/charset/Charset;Lsun/nio/cs/UTF_8$1;)V -80 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; -32 -1: Ljava/security/ProtectionDomain; -5 -1: ()TT; -6 -1: insert -10 -1: intersects -38 -1: ([Ljava/lang/Class;Ljava/lang/Class;)V -15 -1: java/lang/Class -12 -1: getPublicKey -37 -1: (ID)Ljava/lang/AbstractStringBuilder; -6 -1: ibm850 -6 -1: locsig -6 -1: ibm852 -19 -1: changeReferenceKind -3 -1: AET -42 -1: (Ljava/util/Collection;Ljava/lang/Class;)V -6 -1: ibm855 -16 -1: getPolicyNoCheck -39 -1: ([B)[[Ljava/lang/annotation/Annotation; -6 -1: ibm857 -10 -1: Error.java -38 -1: ()Ljava/util/List; -14 -1: createInstance -5 -1: cp437 -28 -1: Lsun/util/locale/BaseLocale; -17 -1: getStandardOffset -29 -1: sun/nio/cs/StandardCharsets$1 -36 -1: Ljava/security/ProtectionDomain$Key; -14 -1: ArrayList.java -78 -1: (Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; -38 -1: java/lang/invoke/MethodHandleImpl$Lazy -42 -1: (Ljava/util/LinkedHashMap$Entry;)V -8 -1: getLongB -7 -1: vmentry -21 -1: lookupExtendedCharset -32 -1: ([TT;)[TT; -53 -1: Ljava/util/concurrent/ConcurrentHashMap$EntrySetView; -6 -1: ibm862 -8 -1: getLongL -32 -1: (Ljava/lang/invoke/MemberName;)J -67 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; -6 -1: region -6 -1: ibm866 -89 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;I)Lsun/reflect/ConstructorAccessor; -22 -1: java/util/ListIterator -9 -1: wednesday -16 -1: unsuspendThreads -20 -1: Not a Proxy instance -45 -1: Ljava/lang/reflect/InvocationTargetException; -61 -1: (Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder; -5 -1: ()TV; -32 -1: (Ljava/lang/invoke/MemberName;)V -82 -1: (Ljava/util/jar/JarFile;Ljava/util/jar/JarEntry;)[Ljava/security/cert/Certificate; -34 -1: java/lang/ClassValue$ClassValueMap -32 -1: (Ljava/lang/invoke/MemberName;)Z -15 -1: SPACE_SEPARATOR -17 -1: caseIgnoreCompare -58 -1: (Ljava/lang/Class;)Ljava/lang/invoke/MethodHandles$Lookup; -4 -1: Code -3 -1: AGT -54 -1: (Ljava/lang/StringBuilder;II)Ljava/lang/StringBuilder; -6 -1: ibm874 -15 -1: newMemberBuffer -42 -1: (Ljava/nio/file/Path;)Ljava/nio/file/Path; -33 -1: Ljava/lang/NumberFormatException; -10 -1: Field.java -67 -1: (JLjava/util/function/Function<-TK;+TU;>;)TU; -4 -1: rows -12 -1: MIN_PRIORITY -25 -1: URI has a query component -41 -1: provider security provider debugging -29 -1: sun/nio/cs/ISO_8859_1$Encoder -26 -1: (Ljava/util/zip/ZipFile;)I -26 -1: (Ljava/util/zip/ZipFile;)J -20 -1: Bad digit at end of -29 -1: Ljava/lang/RuntimePermission; -12 -1: initResolved -9 -1: loadFence -13 -1: fieldAccessor -26 -1: (Ljava/util/zip/ZipFile;)V -36 -1: java/lang/CloneNotSupportedException -19 -1: getBasicConstraints -16 -1: putOrderedObject -26 -1: (Ljava/util/zip/ZipFile;)Z -6 -1: target -50 -1: (Ljava/util/concurrent/CountedCompleter;[I[IIIII)V -16 -1: changeReturnType -13 -1: CAUSE_CAPTION -14 -1: checkExactType -50 -1: sun/util/locale/provider/LocaleServiceProviderPool -47 -1: java/lang/invoke/DirectMethodHandle$Constructor -20 -1: CallerSensitive.java -30 -1: java/security/ProtectionDomain -26 -1: java.launcher.opt.vmselect -4 -1: \tat -42 -1: java/util/ArraysParallelSortHelpers$FJLong -39 -1: (Ljava/lang/String;)[Ljava/lang/String; -19 -1: sun.net.www.content -34 -1: ([III)Ljava/util/stream/IntStream; -20 -1: (Ljava/util/Deque;)V -35 -1: (Ljava/lang/reflect/Constructor;)[B -16 -1: WeakHashMap.java -8 -1: ([III)[I -46 -1: (Ljava/util/Properties;Ljava/io/InputStream;)V -54 -1: (I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -65 -1: (ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/util/HashMap$Node; -27 -1: URI path component is empty -3 -1: -1- -32 -1: Ljava/io/InterruptedIOException; -9 -1: setLocale -7 -1: [^, ;]* -6 -1: format -61 -1: (Ljava/util/function/Supplier;IZ)Ljava/util/stream/IntStream; -20 -1: getRequestProperties -16 -1: reallocateMemory -28 -1: java/lang/IllegalAccessError -5 -1: query -83 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;II)Ljava/lang/invoke/MethodHandle; -7 -1: threadQ -6 -1: STATIC -7 -1: enqueue -21 -1: uninitializedCallSite -3 -1: -2- -26 -1: ()Ljava/util/NavigableSet; -27 -1: getUncaughtExceptionHandler -42 -1: ([Ljava/net/URL;)Ljava/net/URLClassLoader; -30 -1: java/lang/UnsatisfiedLinkError -39 -1: java/util/Collections$ReverseComparator -7 -1: resolve -4 -1: poll -7 -1: (TE;I)V -21 -1: : Unknown launch mode -53 -1: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; -36 -1: sun.classloader.parentDelegationTime -25 -1: java/net/URLStreamHandler -39 -1: (Ljava/lang/Object;J)Ljava/lang/Object; -53 -1: Ljava/util/Map; -51 -1: java/util/ArraysParallelSortHelpers$FJDouble$Sorter -26 -1: getAnnotatedParameterTypes -18 -1: codePointCountImpl -7 -1: threads -12 -1: offsetBefore -29 -1: ()Ljava/util/Collection; -58 -1: (Lsun/invoke/util/Wrapper;)Ljava/lang/invoke/MethodHandle; -17 -1: DMH.invokeSpecial -3 -1: -3- -16 -1: decodeBufferLoop -43 -1: java/util/concurrent/atomic/AtomicReference -16 -1: reduceKeysToLong -27 -1: newIllegalArgumentException -3 -1: ALL -5 -1: cache -5 -1: queue -4 -1: 8bit -3 -1: -4- -35 -1: Ljava/util/Set; -9 -1: MIN_RADIX -26 -1: ZipFileInflaterInputStream -13 -1: MANIFEST_NAME -18 -1: java/util/TimeZone -175 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;Ljava/lang/invoke/MemberName;Ljava/lang/Class;Ljava/lang/invoke/DirectMethodHandle$1;)V -16 -1: getContentLength -11 -1: setDoOutput -22 -1: (Ljava/io/Closeable;)V -13 -1: TimeZone.java -28 -1: sun/misc/ExtensionDependency -6 -1: bindTo -3 -1: -5- -40 -1: ()[Ljava/util/WeakHashMap$Entry; -20 -1: ()Lsun/misc/Cleaner; -9 -1: compareTo -68 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToDoubleTask -11 -1: checkedList -14 -1: (ITK;TV;ZZ)TV; -5 -1: greek -3 -1: jar -21 -1: (Ljava/lang/String;)B -21 -1: (Ljava/lang/String;)C -21 -1: (Ljava/lang/String;)D -5 -1: (JS)V -21 -1: (Ljava/lang/String;)F -13 -1: LETTER_NUMBER -14 -1: isAlphaNumeric -21 -1: (Ljava/lang/String;)I -73 -1: (Ljava/nio/charset/Charset;Ljava/lang/String;Ljava/lang/StringCoding$1;)V -21 -1: (Ljava/lang/String;)J -25 -1: makeExactOrGeneralInvoker -3 -1: -6- -25 -1: java/nio/StringCharBuffer -21 -1: Ljava/util/Hashtable; -8 -1: ENQUEUED -8 -1: finalize -22 -1: DirectLongBufferU.java -21 -1: (Ljava/lang/String;)S -10 -1: localhost: -33 -1: isKnownNotToHaveSpecialAttributes -21 -1: (Ljava/lang/String;)V -45 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;Z)V -21 -1: (Ljava/lang/String;)Z -22 -1: (Ljava/util/Vector;I)V -44 -1: java/nio/charset/UnsupportedCharsetException -23 -1: java/lang/CharacterName -7 -1: checkIO -33 -1: (I)Lsun/misc/URLClassPath$Loader; -90 -1: (Ljava/lang/Class<*>;Ljava/lang/reflect/Constructor<*>;)Ljava/lang/reflect/Constructor<*>; -18 -1: getHeaderFieldDate -9 -1: MIN_VALUE -95 -1: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Ljava/util/Collection; -44 -1: (Ljava/lang/String;Z)Ljava/util/Enumeration; -8 -1: NOVEMBER -4 -1: gcal -17 -1: getConnectTimeout -124 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; -24 -1: INDEXOFSUBLIST_THRESHOLD -16 -1: isJulianLeapYear -21 -1: reduceEntriesToDouble -15 -1: getPrefixLength -17 -1: is not param at -14 -1: inDaylightTime -39 -1: (Ljava/lang/Class;[I)Ljava/lang/Object; -5 -1: force -98 -1: (Ljava/lang/Class;Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z -40 -1: (Lsun/reflect/ConstructorAccessorImpl;)V -27 -1: RuntimeInvisibleAnnotations -17 -1: checkTargetChange -9 -1: skipBytes -4 -1: port -25 -1: sun/nio/cs/UTF_16$Encoder -28 -1: MIN_SUPPLEMENTARY_CODE_POINT -4 -1: node -11 -1: not param: -9 -1: debugInit -6 -1: setURL -14 -1: getMonthLength -23 -1: ()Ljava/nio/ByteBuffer; -17 -1: CALENDAR_JAPANESE -11 -1: access$1400 -16 -1: ()Ljava/net/URI; -29 -1: (IZ)Ljava/lang/StringBuilder; -15 -1: Native Library -30 -1: Invalid lambda deserialization -14 -1: throwException -18 -1: nothing to verify! -23 -1: (Ljava/lang/Object;JF)V -3 -1: ART -16 -1: isExtClassLoader -18 -1: Illegal Capacity: -26 -1: java/util/zip/ZipException -4 -1: /../ -34 -1: ([II)Ljava/util/Spliterator$OfInt; -26 -1: (I)Ljava/util/Enumeration; -60 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType; -43 -1: not a field or nested class, no simple type -12 -1: nextPutIndex -15 -1: getConstructor0 -3 -1: AST -11 -1: fromURIPath -49 -1: (Ljava/util/Collections$UnmodifiableCollection;)V -8 -1: makeImpl -51 -1: (Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$1;)V -32 -1: (Ljava/util/function/Supplier;)V -20 -1: namedFunctionInvoker -37 -1: newGetBooleanIllegalArgumentException -19 -1: (Ljava/io/File;ZI)V -8 -1: NULL_KEY -36 -1: Ljava/lang/reflect/Constructor; -21 -1: (Ljava/lang/Object;)B -21 -1: (Ljava/lang/Object;)C -21 -1: (Ljava/lang/Object;)D -21 -1: (Ljava/lang/Object;)F -30 -1: ()Lsun/util/locale/BaseLocale; -21 -1: (Ljava/lang/Object;)I -21 -1: (Ljava/lang/Object;)J -10 -1: lineNumber -95 -1: (JLjava/util/function/ToDoubleBiFunction<-TK;-TV;>;DLjava/util/function/DoubleBinaryOperator;)D -16 -1: CoderResult.java -44 -1: (Ljava/util/NavigableSet;Ljava/lang/Class;)V -21 -1: (Ljava/lang/Object;)S -13 -1: getNameString -129 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;Ljava/lang/invoke/DirectMethodHandle$1;)V -21 -1: (Ljava/lang/Object;)V -21 -1: (Ljava/lang/Object;)Z -81 -1: Ljava/util/HashMap;>; -49 -1: java/util/concurrent/locks/ReentrantLock$FairSync -11 -1: csisolatin0 -11 -1: csisolatin1 -7 -1: isSpace -10 -1: getDefault -11 -1: csisolatin2 -16 -1: ()Ljava/net/URL; -11 -1: csisolatin4 -14 -1: invokeExact_MT -11 -1: csisolatin5 -28 -1: (Ljava/io/FileInputStream;)V -11 -1: csisolatin9 -8 -1: isLetter -15 -1: getConstructors -21 -1: mainAppContextDefault -29 -1: ()[Ljava/lang/reflect/Method; -23 -1: Ljava/util/WeakHashMap; -12 -1: LF_INVSTATIC -17 -1: DirectBuffer.java -10 -1: newEncoder -10 -1: getVersion -32 -1: java/lang/IllegalAccessException -20 -1: java/util/Collection -61 -1: (Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/Object;)V -19 -1: $deserializeLambda$ -8 -1: removeIf -25 -1: sun/reflect/FieldAccessor -129 -1: ;>(Ljava/util/function/Function<-TT;+TU;>;Ljava/util/Comparator<-TU;>;)Ljava/util/Comparator; -17 -1: parseAbsoluteSpec -37 -1: ([Ljava/util/HashMap$Node;I)V -17 -1: java/util/HashSet -13 -1: spreadInvoker -20 -1: suppressAccessChecks -32 -1: Ljava/lang/InterruptedException; -11 -1: oldMappings -9 -1: lookupTag -16 -1: java/lang/System -5 -1: LFI: -6 -1: IBM737 -9 -1: SHORT_IDS -45 -1: ([IIILjava/util/function/IntBinaryOperator;)V -20 -1: getMetaInfEntryNames -10 -1: isReadOnly -50 -1: ()Ljava/util/SortedSet; -12 -1: java.vm.name -30 -1: java/lang/Class$AnnotationData -61 -1: (ILjava/lang/invoke/LambdaForm;)Ljava/lang/invoke/LambdaForm; -7 -1: address -44 -1: (Ljava/util/function/BiConsumer<-TK;-TV;>;)V -58 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)V -112 -1: (Ljava/lang/Object;TV;Ljava/lang/ref/ReferenceQueue;ILjava/util/WeakHashMap$Entry;)V -14 -1: aliases_KOI8_R -3 -1: AWT -14 -1: aliases_KOI8_U -24 -1: ARRAY_DOUBLE_BASE_OFFSET -23 -1: Ljava/util/jar/JarFile; -91 -1: (Ljava/lang/Class;[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B)V -14 -1: mappingAddress -19 -1: [Ljava/lang/Object; -17 -1: sun/misc/JarIndex -9 -1: image/jpg -49 -1: (Ljava/lang/String;I)Lsun/util/calendar/ZoneInfo; -37 -1: java/lang/invoke/DirectMethodHandle$1 -34 -1: java/util/Collections$SingletonMap -89 -1: (JLjava/util/function/ToIntBiFunction<-TK;-TV;>;ILjava/util/function/IntBinaryOperator;)I -46 -1: (Ljava/util/Comparator;)Ljava/util/Comparator; -11 -1: isTitleCase -38 -1: java/lang/IllegalMonitorStateException -33 -1: java/nio/BufferUnderflowException -28 -1: java/lang/ClassValue$Version -11 -1: printLocale -13 -1: STORE_BARRIER -42 -1: ([ILjava/util/function/IntUnaryOperator;)V -26 -1: sun/util/locale/BaseLocale -29 -1: java/io/ObjectStreamException -41 -1: sun/reflect/UnsafeStaticFieldAccessorImpl -60 -1: ([Ljava/lang/Object;Ljava/util/Iterator;)[Ljava/lang/Object; -30 -1: (Ljava/nio/charset/Charset;)[B -73 -1: ([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process; -3 -1: VST -80 -1: Java(TM) SE Runtime Environment (build 1.8.0-internal-iklam_2013_11_27_21_25-b00 -85 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/net/URLStreamHandler;)V -20 -1: getStackTraceElement -36 -1: java/util/LinkedHashMap$LinkedKeySet -17 -1: getNormalizedYear -15 -1: maxBytesPerChar -16 -1: java/util/Random -34 -1: (I[C)Ljava/lang/invoke/LambdaForm; -11 -1: nbits < 0: -7 -1: H_PCHAR -29 -1: (Ljava/nio/charset/Charset;)I -36 -1: (I[I[C)Ljava/lang/invoke/LambdaForm; -23 -1: java/lang/ClassLoader$1 -23 -1: java/lang/ClassLoader$2 -23 -1: java/lang/ClassLoader$3 -9 -1: sizeTable -36 -1: (Z)Ljava/lang/AbstractStringBuilder; -29 -1: (Ljava/nio/charset/Charset;)V -25 -1: ARRAY_BOOLEAN_INDEX_SCALE -29 -1: (Ljava/nio/charset/Charset;)Z -6 -1: keySet -20 -1: declaredConstructors -25 -1: oracle/jrockit/jfr/Timing -12 -1: sizeIsSticky -6 -1: IBM775 -17 -1: currentTimeMillis -28 -1: java/nio/DirectDoubleBufferS -71 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/invoke/MethodType;B)V -28 -1: java/nio/DirectDoubleBufferU -19 -1: cachedFixedDateJan1 -15 -1: getClassContext -65 -1: (Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V -16 -1: unmodifiableList -10 -1: getDoubleB -82 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/String; -11 -1: getEntryCrc -10 -1: getDoubleL -20 -1: (C)Ljava/lang/Class; -11 -1: Null action -22 -1: java/io/BufferedWriter -67 -1: (Ljava/lang/String;[Ljava/lang/Class<*>;)Ljava/lang/reflect/Method; -22 -1: parseSelectAnnotations -6 -1: rename -20 -1: acquireFieldAccessor -43 -1: (Ljava/util/Vector;[Ljava/lang/Object;III)V -32 -1: Ljava/lang/NullPointerException; -29 -1: (Ljava/lang/ThreadLocal<*>;)V -18 -1: descendingIterator -37 -1: java/util/Collections$SynchronizedSet -24 -1: mark/reset not supported -12 -1: ) > toIndex( -13 -1: <> -10 -1: fastRemove -4 -1: load -31 -1: sun/reflect/ReflectionFactory$1 -39 -1: (Ljava/util/List<*>;)Ljava/lang/Object; -39 -1: Ljava/util/Map; -9 -1: offerLast -31 -1: ()Ljava/lang/invoke/MethodType; -40 -1: Ljava/lang/Object; -17 -1: getObjectVolatile -14 -1: suspendThreads -55 -1: (Ljava/lang/String;ZLjava/util/Set;)Lsun/misc/Resource; -75 -1: (Ljava/util/List<+Ljava/lang/Comparable<-TT;>;>;TT;)I -6 -1: Lookup -20 -1: java/io/OutputStream -41 -1: Could not create application class loader -28 -1: Lsun/misc/JavaUtilJarAccess; -46 -1: java/util/Collections$SynchronizedNavigableSet -8 -1: override -21 -1: threadLocalRandomSeed -10 -1: TEXT_PLAIN -22 -1: ([B)Ljava/lang/String; -29 -1: java/nio/InvalidMarkException -14 -1: Throwable.java -27 -1: newWrongMethodTypeException -6 -1: ptypes -8 -1: bugLevel -62 -1: (ILjava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder; -37 -1: ()Ljava/util/Locale$LocaleNameGetter; -14 -1: getEntryMethod -7 -1: getByte -12 -1: UTF-32BE-BOM -4 -1: lock -34 -1: java/security/AccessControlContext -79 -1: (Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MemberName; -5 -1: DEBUG -5 -1: unbox -17 -1: CLASSPATH_OPTOSFT -4 -1: cbrt -21 -1: LocalizedObjectGetter -21 -1: ProtectionDomain.java -22 -1: ([J)Ljava/util/BitSet; -17 -1: getUnresolvedName -34 -1: (Ljava/util/Map;Ljava/util/Map;I)V -7 -1: cskoi8r -14 -1: getInterfaces0 -48 -1: (Lsun/net/www/MessageHeader;)[Ljava/lang/String; -14 -1: getFileNameMap -16 -1: preserveCombiner -19 -1: getDefaultUseCaches -57 -1: (Ljava/lang/Class;[B[Ljava/lang/Object;)Ljava/lang/Class; -21 -1: (D)Ljava/lang/Double; -15 -1: iso8859_15_fdis -23 -1: java/util/regex/Pattern -6 -1: ibm912 -14 -1: findBuiltinLib -42 -1: java/lang/annotation/AnnotationFormatError -6 -1: ibm914 -6 -1: ibm915 -44 -1: java/nio/charset/IllegalCharsetNameException -22 -1: COMBINING_SPACING_MARK -20 -1: ()Ljava/lang/Thread; -8 -1: readLine -12 -1: (unresolved -65 -1: (Ljava/lang/String;Z)Ljava/util/Enumeration; -41 -1: ([Ljava/lang/String;[Ljava/lang/String;)V -30 -1: java/lang/Class$ReflectionData -8 -1: requests -52 -1: (Ljava/nio/charset/Charset;Lsun/nio/cs/US_ASCII$1;)V -12 -1: ACCESS_WRITE -6 -1: ibm920 -12 -1: CR_ERROR_MIN -6 -1: jarMap -6 -1: ibm923 -15 -1: java/lang/Error -11 -1: VM_SETTINGS -18 -1: name can't be null -7 -1: PRESENT -19 -1: setSecurityManager0 -101 -1: (Ljava/nio/channels/WritableByteChannel;Ljava/nio/charset/CharsetEncoder;I)Lsun/nio/cs/StreamEncoder; -25 -1: ()Ljava/util/jar/JarFile; -26 -1: java/io/ObjectOutputStream -13 -1: no !/ in spec -5 -1: (II)C -12 -1: setPriority0 -30 -1: (Z)[Ljava/lang/reflect/Method; -28 -1: sun/nio/cs/ThreadLocalCoders -5 -1: (II)I -22 -1: java/io/BufferedReader -26 -1: ()Lsun/misc/JavaNetAccess; -10 -1: Asia/Dhaka -14 -1: parallelStream -5 -1: (II)V -5 -1: (II)Z -31 -1: Ljava/lang/reflect/Constructor; -21 -1: ()Ljava/time/Instant; -31 -1: (Ljava/lang/String;III[J[I[IZ)V -8 -1: Volatile -23 -1: isUnicodeIdentifierPart -27 -1: longPrimitiveParameterCount -16 -1: Map is non-empty -24 -1: getLocalizedOutputStream -14 -1: java/lang/Byte -10 -1: staticBase -11 -1: lastElement -17 -1: replaceStaleEntry -17 -1: MAX_LOW_SURROGATE -28 -1: java.launcher.X.macosx.usage -20 -1: registerShutdownHook -16 -1: SECOND_IN_MILLIS -8 -1: Embedded -16 -1: BootstrapMethods -14 -1: numInvocations -79 -1: (Ljava/util/Collection;)Ljava/util/Enumeration; -10 -1: rotateLeft -46 -1: ([Ljava/lang/Object;)Ljava/util/stream/Stream; -6 -1: verify -17 -1: OTHER_PUNCTUATION -26 -1: acquireConstructorAccessor -38 -1: (Ljava/lang/String;I)Ljava/lang/Class; -30 -1: java/net/UnknownContentHandler -20 -1: PREFIX_LENGTH_OFFSET -12 -1: nextGetIndex -14 -1: standardOffset -10 -1: entryNames -15 -1: application/xml -3 -1: BET -39 -1: ([DIII)Ljava/util/Spliterator$OfDouble; -83 -1: (JLjava/util/function/BiFunction;Ljava/util/function/BiFunction;)Ljava/lang/Object; -10 -1: initMethod -47 -1: (Ljava/util/LinkedList$Node;)Ljava/lang/Object; -8 -1: isSealed -12 -1: isAccessible -11 -1: audio/x-wav -46 -1: (Ljava/lang/String;)Ljava/util/jar/Attributes; -24 -1: ()Ljava/io/OutputStream; -15 -1: FIELD_MODIFIERS -30 -1: sun/misc/URLClassPath$Loader$1 -20 -1: recursive invocation -34 -1: (Ljava/lang/String;)Ljava/net/URL; -12 -1: linkNodeLast -34 -1: call site initialization exception -17 -1: casAnnotationType -8 -1: x-ibm874 -7 -1: isUpper -58 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesTask -31 -1: Ill-formed Unicode locale key: -12 -1: defineClass0 -12 -1: defineClass1 -12 -1: defineClass2 -59 -1: Can not call newInstance() on the Class for java.lang.Class -10 -1: codePoints -3 -1: ... -14 -1: readAheadLimit -14 -1: parallelSetAll -41 -1: ([Ljava/lang/Object;I)[Ljava/lang/Object; -148 -1: (Ljava/lang/Throwable$PrintStreamOrWriter;[Ljava/lang/StackTraceElement;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V -10 -1: Deque.java -21 -1: Must be volatile type -7 -1: setForm -58 -1: Ljava/lang/Number;Ljava/lang/Comparable; -47 -1: (Ljava/lang/String;Ljava/security/CodeSource;)V -30 -1: java/io/InterruptedIOException -44 -1: java/util/Collections$SynchronizedCollection -16 -1: Invalid Jar file -32 -1: sun/util/calendar/CalendarSystem -67 -1: (JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate; -19 -1: DEFAULT_BUFFER_SIZE -16 -1: readObjectNoData -16 -1: setJavaNioAccess -73 -1: (Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/Object;)Ljava/lang/Object; -14 -1: copyToIntArray -10 -1: hasWaiters -20 -1: (I)Ljava/lang/Class; -35 -1: all turn on all debugging -14 -1: Invalid host: -26 -1: Lsun/nio/cs/StreamEncoder; -43 -1: sun/misc/JavaSecurityProtectionDomainAccess -11 -1: getNamedCon -8 -1: H_SERVER -27 -1: java/util/function/Consumer -12 -1: isLocalClass -81 -1: (Ljava/util/LinkedHashMap$Entry;Ljava/util/LinkedHashMap$Entry;)V -83 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable; -4 -1: exec -43 -1: java/lang/reflect/InvocationTargetException -35 -1: (Ljava/io/File;Ljava/lang/String;)V -9 -1: modifiers -35 -1: (Ljava/io/File;Ljava/lang/String;)Z -9 -1: Byte.java -12 -1: unknown mode -18 -1: initializeVerifier -24 -1: (Ljava/nio/ByteBuffer;)I -22 -1: ([Ljava/lang/Object;)I -11 -1: correctType -6 -1: escape -52 -1: (Ljava/security/ProtectionDomain;)Ljava/lang/String; -11 -1: annotations -121 -1: (Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; -22 -1: using an instance of -14 -1: getSpeciesData -28 -1: ()Ljava/security/CodeSource; -12 -1: JZENTRY_NAME -24 -1: (Ljava/nio/ByteBuffer;)V -4 -1: ZBSC -22 -1: ([Ljava/lang/Object;)V -7 -1: isParam -165 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -70 -1: (ILjava/util/List;>;)Ljava/lang/invoke/LambdaForm; -24 -1: Ljava/io/FilePermission; -22 -1: ([Ljava/lang/Object;)Z -11 -1: mergeHeader -11 -1: applyAsLong -28 -1: (IJ)Ljava/lang/StringBuffer; -10 -1: arityCheck -52 -1: (ILjava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -13 -1: toUpperCaseEx -9 -1: nextIndex -11 -1: start > end -4 -1: long -6 -1: Static -27 -1: ()Ljava/lang/reflect/Field; -10 -1: bufUpdater -43 -1: averageBytesPerChar exceeds maxBytesPerChar -105 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/BaseLocale$1;)V -23 -1: ARRAY_SHORT_INDEX_SCALE -15 -1: getHeaderFields -36 -1: java/util/HashMap$HashMapSpliterator -10 -1: Guard.java -29 -1: java/util/RandomAccessSubList -6 -1: addAll -7 -1: getTime -16 -1: invokeHandleForm -32 -1: sun/util/locale/LocaleExtensions -16 -1: checkAndLoadMain -19 -1: INTERFACE_MODIFIERS -11 -1: resolveName -20 -1: getContentLengthLong -53 -1: (ICLjava/lang/Object;)Ljava/lang/invoke/MethodHandle; -19 -1: name cannot be null -23 -1: hasReceiverTypeDispatch -12 -1: getExtension -49 -1: Ljava/util/Set; -114 -1: (Ljava/lang/String;[J[I[J[I[Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule;)Lsun/util/calendar/ZoneInfo; -24 -1: NativeSignalHandler.java -58 -1: (Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap; -10 -1: interface -68 -1: (Ljava/lang/String;)Ljava/lang/invoke/BoundMethodHandle$SpeciesData; -15 -1: addShutdownHook -32 -1: java/security/AccessController$1 -10 -1: filterTags -19 -1: [Ljava/lang/Number; -92 -1: (Ljava/util/function/ToLongFunction<-TT;>;)Ljava/util/Comparator; -43 -1: java/util/LinkedHashMap$LinkedEntryIterator -5 -1: utf-8 -11 -1: iso-8859-13 -11 -1: iso-8859-15 -58 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/util/jar/JarFile; -41 -1: CertPathValidator debugging -22 -1: ARRAY_LONG_BASE_OFFSET -57 -1: (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; -13 -1: queuePrintJob -14 -1: Watchable.java -15 -1: jdkMajorVersion -62 -1: (Ljava/lang/String;ZJJ)Ljava/lang/management/MemoryPoolMXBean; -23 -1: twoToTheDoubleScaleDown -22 -1: registerVMNotification -30 -1: ()Lsun/misc/JavaUtilJarAccess; -17 -1: getTargetVolatile -4 -1: exit -13 -1: StringDecoder -12 -1: hasRemaining -9 -1: bigEndian -14 -1: checkMulticast -13 -1: clearProperty -18 -1: ForEachMappingTask -15 -1: Collection.java -55 -1: (Ljava/io/InputStream;)Ljava/security/cert/Certificate; -5 -1: UTF-8 -11 -1: transitions -7 -1: wrapAlt -27 -1: ClassNotFoundException.java -20 -1: UnresolvedPermission -14 -1: charsetForName -9 -1: getParent -18 -1: [Ljava/lang/Short; -24 -1: UnmodifiableNavigableMap -5 -1: xflow -10 -1: interfaces -19 -1: doubleToRawLongBits -73 -1: (Ljava/lang/reflect/Constructor<*>;[Ljava/lang/Object;)Ljava/lang/Object; -10 -1: getInCheck -21 -1: (Ljava/lang/Thread;)V -15 -1: fromIndex < 0: -63 -1: (ITK;TV;Ljava/util/concurrent/ConcurrentHashMap$Node;)V -9 -1: pollFirst -21 -1: (Ljava/lang/Thread;)Z -16 -1: checkProxyMethod -39 -1: generateLambdaFormInterpreterEntryPoint -15 -1: findLoadedClass -6 -1: system -5 -1: ITALY -45 -1: combiner SubjectDomainCombiner debugging -34 -1: NativeConstructorAccessorImpl.java -22 -1: ([C)Ljava/lang/String; -39 -1: (Ljava/lang/String;Ljava/lang/Class;Z)V -18 -1: java/lang/Thread$1 -20 -1: window can't be null -10 -1: Debug.java -17 -1: singletonIterator -53 -1: java/util/concurrent/ConcurrentHashMap$ForEachKeyTask -20 -1: java/security/Policy -13 -1: getDescriptor -32 -1: (I)Ljava/lang/invoke/MethodType; -15 -1: nativeLibraries -27 -1: sun/util/locale/LanguageTag -8 -1: priority -12 -1: IntegerCache -14 -1: connectTimeout -9 -1: namePairs -17 -1: vmAllowSuspension -16 -1: METHOD_MODIFIERS -51 -1: (Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -20 -1: MIN_TREEIFY_CAPACITY -13 -1: getEntryBytes -33 -1: ()Lsun/reflect/ReflectionFactory; -17 -1: getDisplayCountry -13 -1: isWrapperType -5 -1: utf16 -12 -1: parallelSort -27 -1: (Ljava/nio/ByteBuffer;IIZ)V -56 -1: (Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Class;I)Z -9 -1: isDefined -20 -1: sun/misc/FloatConsts -10 -1: putDoubleB -30 -1: java/lang/NoSuchFieldException -27 -1: Value out of range. Value:" -36 -1: sun/reflect/NativeMethodAccessorImpl -7 -1: decoder -38 -1: ([Ljava/lang/invoke/MutableCallSite;)V -10 -1: putDoubleL -68 -1: (Ljava/lang/reflect/Method;)Lsun/reflect/generics/scope/MethodScope; -37 -1: java/lang/invoke/MethodHandles$Lookup -9 -1: Void.java -28 -1: sun/util/locale/BaseLocale$1 -10 -1: stackTrace -7 -1: toClass -11 -1: access$1500 -41 -1: (Ljava/lang/Object;I)Ljava/lang/Class<*>; -148 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;Ljava/lang/Object;JLjava/lang/invoke/DirectMethodHandle$1;)V -22 -1: ARRAY_BYTE_BASE_OFFSET -13 -1: ZipEntry.java -56 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/List; -5 -1: utf32 -16 -1: ISO_646.irv:1991 -5 -1: p-126 -20 -1: sun.net.www.protocol -3 -1: key -20 -1: IMPLEMENTATION_TITLE -93 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Lsun/util/locale/LanguageTag; -66 -1: ([Ljava/lang/Object;[Ljava/lang/Object;IIILjava/util/Comparator;)V -27 -1: java/nio/DirectFloatBufferS -27 -1: java/nio/DirectFloatBufferU -15 -1: JZENTRY_COMMENT -8 -1: casTabAt -10 -1: getVariant -24 -1: Ljava/lang/Thread$State; -35 -1: ()Ljava/lang/AbstractStringBuilder; -114 -1: (Ljava/security/CodeSource;Ljava/security/PermissionCollection;Ljava/lang/ClassLoader;[Ljava/security/Principal;)V -16 -1: getShortVolatile -18 -1: SoftReference.java -3 -1: BST -12 -1: isCastableTo -28 -1: sun.zip.disableMemoryMapping -11 -1: copyOfRange -17 -1: ()Lsun/misc/Perf; -59 -1: (Ljava/lang/String;[Ljava/io/File;Ljava/lang/ClassLoader;)V -27 -1: (Lsun/misc/JavaAWTAccess;)V -8 -1: DECLARED -18 -1: loadedLibraryNames -6 -1: CENNAM -7 -1: encprop -5 -1: ABASE -27 -1: java/util/WeakHashMap$Entry -13 -1: wrapWithPrims -5 -1: UTF32 -29 -1: Ljava/net/URISyntaxException; -6 -1: groups -65 -1: (Ljava/util/Set<+TT;>;)Ljava/util/Set; -32 -1: lambda$comparingByKey$6d558cbf$1 -15 -1: removeElementAt -49 -1: [Ljava/util/concurrent/ConcurrentHashMap$Segment; -32 -1: Sign character in wrong position -6 -1: IBM819 -39 -1: java/security/cert/CertificateException -4 -1: join -30 -1: Ljava/lang/invoke/ForceInline; -14 -1: expandCapacity -19 -1: Ljava/lang/Integer; -11 -1: NUMBER_THAI -10 -1: getExtURLs -9 -1: retainAll -21 -1: (S)Ljava/lang/String; -8 -1: truncate -51 -1: java/util/ArraysParallelSortHelpers$FJObject$Sorter -28 -1: newIndexOutOfBoundsException -26 -1: JavaUtilJarAccessImpl.java -22 -1: (II)Ljava/util/BitSet; -10 -1: getLongAt0 -65 -1: (Ljava/lang/Class;)TA; -26 -1: (Ljava/lang/ThreadLocal;)I -5 -1: (J)[B -27 -1: Ljava/lang/CharacterData00; -18 -1: sun/misc/Cleaner$1 -59 -1: (Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I -114 -1: (JLjava/util/function/ToDoubleFunction;>;DLjava/util/function/DoubleBinaryOperator;)D -28 -1: java/lang/ClassCastException -26 -1: (Ljava/lang/ThreadLocal;)V -27 -1: ()[Ljava/lang/reflect/Type; -13 -1: not invoker: -56 -1: (Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection; -6 -1: before -37 -1: ([DII)Ljava/util/stream/DoubleStream; -9 -1: logicalOr -9 -1: IS_METHOD -12 -1: SPACE_USABLE -12 -1: lastModified -10 -1: setSigners -8 -1: Invokers -7 -1: nCopies -12 -1: utf-32le-bom -7 -1: (IIII)J -17 -1: jdkSpecialVersion -26 -1: ()Ljava/lang/StringBuffer; -17 -1: SearchEntriesTask -14 -1: java/net/Parts -20 -1: Ljava/lang/Runnable; -35 -1: java/util/WeakHashMap$ValueIterator -19 -1: FinalReference.java -7 -1: (IIII)V -23 -1: Ljava/lang/ThreadGroup; -10 -1: nullsFirst -8 -1: setCache -55 -1: (Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;)Z -24 -1: java/util/SimpleTimeZone -6 -1: IBM850 -6 -1: IBM852 -25 -1: sun/net/www/MeteredStream -4 -1: exts -6 -1: IBM855 -16 -1: allocateElements -6 -1: IBM857 -19 -1: setDefaultUseCaches -6 -1: IBM858 -5 -1: slice -9 -1: marklimit -77 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; -32 -1: java/util/Collections$CheckedSet -12 -1: getModifiers -8 -1: protocol -10 -1: getInteger -33 -1: ([J)Ljava/util/stream/LongStream; -6 -1: IBM862 -8 -1: Map.java -35 -1: java/lang/Class$EnclosingMethodInfo -25 -1: (J)Ljava/math/BigInteger; -31 -1: (Ljava/net/URL;Ljava/io/File;)V -6 -1: IBM866 -6 -1: unload -28 -1: sun/invoke/util/VerifyAccess -105 -1: ()Ljava/util/Map;Ljava/lang/annotation/Annotation;>; -25 -1: Resetting to invalid mark -20 -1: java/util/Vector$Itr -5 -1: SHIFT -11 -1: NonfairSync -18 -1: getSecurityManager -34 -1: ()[Ljava/lang/ClassValue$Entry<*>; -28 -1: (J)Ljava/lang/StringBuilder; -28 -1: (Ljava/security/PublicKey;)V -12 -1: getResources -6 -1: IBM874 -27 -1: which Java does not define -36 -1: (Ljava/lang/invoke/MethodTypeForm;)V -48 -1: array length is not legal for long[] or double[] -18 -1: IS_FIELD_OR_METHOD -7 -1: Aliases -17 -1: checkedExceptions -13 -1: getDayOfMonth -51 -1: (Ljava/util/Spliterator;Z)Ljava/util/stream/Stream; -20 -1: java/io/EOFException -26 -1: Enclosing method not found -17 -1: flushLeftoverChar -122 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B)Ljava/lang/reflect/Constructor<*>; -18 -1: buildAnnotatedType -21 -1: setContextClassLoader -22 -1: java/io/UnixFileSystem -20 -1: nonSyncContentEquals -43 -1: java/util/Collections$SynchronizedSortedMap -15 -1: Properties.java -35 -1: com.oracle.usagetracker.config.file -13 -1: java/util/Map -18 -1: setEagerValidation -13 -1: getSetMessage -6 -1: unlock -14 -1: refKindIsField -22 -1: bad field type alias: -17 -1: casAnnotationData -6 -1: AUGUST -106 -1: (Ljava/util/concurrent/CountedCompleter;[Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/util/Comparator;)V -11 -1: monitorExit -17 -1: linkMethodTracing -69 -1: (Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/BaseLocale$1;)V -21 -1: java/lang/ClassLoader -39 -1: PKCS11 KeyStore debugging -10 -1: checkRtype -25 -1: getLocalGregorianCalendar -23 -1: GenericDeclaration.java -12 -1: isViewableAs -22 -1: static_oop_field_count -72 -1: (Ljava/util/function/ToDoubleFunction<-TT;>;)Ljava/util/Comparator; -11 -1: languageKey -6 -1: Class -34 -1: java/util/HashMap$ValueSpliterator -37 -1: (IJ)Ljava/lang/AbstractStringBuilder; -17 -1: privilegedContext -36 -1: java/util/LinkedHashMap$LinkedValues -11 -1: getHostName -10 -1: beginEntry -7 -1: isAlpha -61 -1: (Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/LambdaForm; -10 -1: expandArgs -14 -1: Finalizer.java -14 -1: timeDefinition -28 -1: ()Ljava/util/jar/Attributes; -14 -1: ansi_x3.4-1968 -11 -1: setPriority -23 -1: (C)Ljava/lang/Class<*>; -26 -1: (Ljava/lang/Object;TV;)TV; -70 -1: (Ljava/util/function/BiFunction;Ljava/lang/Object;Ljava/lang/Object;)V -48 -1: ()Lsun/reflect/generics/factory/GenericsFactory; -25 -1: java/lang/invoke/CallSite -8 -1: tzdb.dat -17 -1: containsAllLimits -17 -1: fileNameMapLoaded -6 -1: values -17 -1: setLastAccessTime -12 -1: expandFromVM -50 -1: java/lang/invoke/MethodHandle$PolymorphicSignature -3 -1: .EC -14 -1: access denied -22 -1: java/util/AbstractList -47 -1: (IILjava/lang/String;)Ljava/lang/StringBuilder; -52 -1: ()Lsun/reflect/generics/repository/MethodRepository; -22 -1: (Ljava/lang/String;)[B -57 -1: (Ljava/lang/Object;)Ljava/lang/invoke/DirectMethodHandle; -18 -1: compareAndSwapLong -4 -1: != -6 -1: StdArg -29 -1: (Ljava/security/Permission;)V -22 -1: ([D)Ljava/lang/String; -28 -1: Lsun/reflect/MethodAccessor; -14 -1: ansi_x3.4-1986 -20 -1: getPeakFinalRefCount -29 -1: (Ljava/security/Permission;)Z -5 -1: debug -38 -1: (Ljava/lang/reflect/Constructor<*>;)[B -27 -1: java/util/GregorianCalendar -16 -1: Null replacement -26 -1: ()Ljava/lang/reflect/Type; -28 -1: DIRECTIONALITY_LEFT_TO_RIGHT -102 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/BaseLocale; -15 -1: isConvertibleTo -24 -1: ARRAY_DOUBLE_INDEX_SCALE -16 -1: getComponentType -29 -1: sun/util/locale/LocaleMatcher -11 -1: LOCALECACHE -6 -1: UNWRAP -16 -1: AbstractSet.java -3 -1: CAT -36 -1: java/lang/annotation/RetentionPolicy -14 -1: getParameters0 -8 -1: .Handler -33 -1: Ljava/lang/IllegalStateException; -10 -1: RAW_RETURN -20 -1: java/lang/ClassValue -16 -1: getDisplayString -152 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node; -67 -1: ()Ljava/util/Map; -214 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -33 -1: java/lang/invoke/SerializedLambda -42 -1: ([Ljava/lang/Object;II)[Ljava/lang/Object; -22 -1: java/util/zip/ZipUtils -9 -1: setDaemon -26 -1: java/net/HttpURLConnection -6 -1: mkdirs -20 -1: (Ljava/io/Reader;I)V -28 -1: (IC)Ljava/lang/StringBuffer; -45 -1: ([Ljava/lang/Class<*>;I)[Ljava/lang/Class<*>; -29 -1: java/lang/invoke/MethodHandle -28 -1: sun/misc/CompoundEnumeration -6 -1: setVal -23 -1: INTERNED_ARGUMENT_LIMIT -4 -1: NULL -49 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class;)Z -43 -1: java/util/Collections$UnmodifiableSortedMap -39 -1: (Ljava/lang/Object;Ljava/lang/Object;)I -6 -1: ([JJ)I -19 -1: java/io/PrintWriter -25 -1: ()Ljava/lang/ThreadGroup; -5 -1: (IJ)J -16 -1: onMalformedInput -15 -1: decrementAndGet -11 -1: -2147483648 -6 -1: reduce -12 -1: asCharBuffer -39 -1: (Ljava/lang/Object;Ljava/lang/Object;)V -44 -1: (Ljava/util/SortedSet;)Ljava/util/SortedSet; -9 -1: backtrace -3 3: Bar -47 -1: ()Lsun/misc/JavaSecurityProtectionDomainAccess; -39 -1: (Ljava/lang/Object;Ljava/lang/Object;)Z -5 -1: (IJ)V -6 -1: ([JJ)V -22 -1: ([Ljava/lang/Thread;)I -5 -1: (IJ)Z -7 -1: ([BII)I -79 -1: (Ljava/util/Comparator<-TT;>;)Ljava/util/Comparator; -12 -1: getUnchecked -10 -1: getBaseURL -36 -1: (Ljava/lang/Object;)Ljava/util/List; -53 -1: (Ljava/util/function/Function;)Ljava/util/Comparator; -10 -1: getComment -7 -1: ([BII)V -30 -1: privateGetDeclaredConstructors -58 -1: (Ljava/lang/String;ZILjava/util/Locale;)Ljava/lang/String; -18 -1: unknown era name: -13 -1: invokeSpecial -9 -1: checkLink -16 -1: cspc8codepage437 -6 -1: stream -18 -1: sun/nio/cs/UTF_8$1 -18 -1: contextClassLoader -50 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)V -30 -1: sun/util/calendar/BaseCalendar -11 -1: enumeration -18 -1: key can't be empty -137 -1: (JLjava/util/function/Function;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; -10 -1: getBoolean -5 -1: eetop -49 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/String; -43 -1: sun/reflect/generics/scope/ConstructorScope -13 -1: CANADA_FRENCH -39 -1: Ljava/nio/channels/ReadableByteChannel; -15 -1: java/lang/Float -29 -1: DIRECTIONALITY_OTHER_NEUTRALS -52 -1: (ZLjava/nio/charset/Charset;Ljava/io/OutputStream;)V -8 -1: appendTo -19 -1: PARAGRAPH_SEPARATOR -16 -1: (Unknown Source) -4 -1: tree -38 -1: (I[C)Ljava/lang/AbstractStringBuilder; -14 -1: VerifierStream -48 -1: (Ljava/util/Collection;Ljava/lang/Object;)V -15 -1: releaseInflater -20 -1: getHeaderNamesInList -17 -1: getSystemPackages -8 -1: teardown -6 -1: (BZI)I -10 -1: checkWrite -19 -1: JavaLangAccess.java -31 -1: Ljava/lang/ClassValue$Identity; -50 -1: (Ljava/util/concurrent/CountedCompleter;[S[SIIII)V -24 -1: getDeclaredConstructors0 -3 -1: /.. -3 -1: /./ -16 -1: hashCodeForCache -18 -1: Property settings: -26 -1: Illegal initial capacity: -10 -1: text/plain -61 -1: (Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator; -24 -1: createMemoryManagerMBean -10 -1: ,lastRule= -9 -1: GMT-00:00 -5 -1: mtime -40 -1: (Ljava/lang/String;I)[Ljava/lang/String; -11 -1: (TT;TV;)TV; -154 -1: (Ljava/lang/Class<*>;Ljava/lang/String;[Ljava/lang/Class<*>;Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B[B)Ljava/lang/reflect/Method; -41 -1: (Ljava/util/jar/JarFile;)Ljava/util/List; -43 -1: (JILjava/lang/Object;)Ljava/nio/ByteBuffer; -19 -1: MethodTypeForm.java -21 -1: java/util/jar/JarFile -30 -1: java/lang/Integer$IntegerCache -22 -1: getDisplayVariantArray -6 -1: setAll -13 -1: ClassValueMap -52 -1: (Ljava/security/PublicKey;Ljava/security/Provider;)V -51 -1: java/util/concurrent/ConcurrentHashMap$BaseIterator -59 -1: (Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V -100 -1: (Ljava/util/concurrent/ConcurrentMap;Ljava/util/function/BiFunction;)Ljava/util/function/BiConsumer; -8 -1: default -13 -1: compareAndSet -10 -1: iso8859-13 -9 -1: putShortB -14 -1: skipDelimiters -28 -1: URI has a fragment component -10 -1: iso8859-15 -42 -1: (Ljava/net/Proxy;)Ljava/net/URLConnection; -23 -1: needsPackageAccessCheck -9 -1: putShortL -3 -1: //[ -69 -1: (Ljava/security/AccessControlContext;Ljava/security/DomainCombiner;)V -18 -1: too many arguments -35 -1: ([III)Ljava/util/Spliterator$OfInt; -10 -1: CopiesList -10 -1: iso-8859-1 -9 -1: ([BII[C)I -10 -1: iso-8859-2 -11 -1: returnCount -10 -1: iso-8859-4 -10 -1: iso-8859-5 -8 -1: utf_16be -10 -1: iso-8859-7 -9 -1: isLimited -9 -1: parseByte -10 -1: iso-8859-9 -13 -1: , s.length() -10 -1: matchCerts -14 -1: RECURSIVE_CHAR -11 -1: reduceToInt -11 -1: displayName -9 -1: calendars -64 -1: (Ljava/lang/String;ZLjava/util/jar/JarEntry;)Lsun/misc/Resource; -11 -1: isProtected -78 -1: (Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/SortedMap; -4 -1: trim -20 -1: java/nio/FloatBuffer -17 -1: PreHashedMap.java -74 -1: Ljava/util/concurrent/ConcurrentMap; -22 -1: ([S)Ljava/lang/String; -19 -1: PrintStreamOrWriter -38 -1: java/util/Collections$EmptyEnumeration -22 -1: java/util/LinkedList$1 -13 -1: sunpkcs11.jar -25 -1: java/nio/DirectByteBuffer -96 -1: (ZLjava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; -7 -1: isArray -43 -1: (Ljava/lang/String;)Ljava/util/Enumeration; -52 -1: java/lang/invoke/MethodHandleImpl$AsVarargsCollector -59 -1: (Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class<*>; -26 -1: setJavaNetHttpCookieAccess -15 -1: wrongTargetType -57 -1: java/util/concurrent/ConcurrentHashMap$ForEachMappingTask -33 -1: [Ljava/lang/reflect/TypeVariable; -5 -1: load0 -39 -1: (Ljava/lang/String;)Ljava/lang/Boolean; -21 -1: isHeldByCurrentThread -14 -1: outOfBoundsMsg -30 -1: Ljava/lang/ref/Reference$Lock; -11 -1: ISO-8859-13 -84 -1: (Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; -11 -1: ISO-8859-15 -40 -1: (Ljava/net/URL;)Ljava/net/URLConnection; -84 -1: ;>(Ljava/util/Collection<+TT;>;)TT; -38 -1: sun/reflect/generics/scope/MethodScope -5 -1: mutex -11 -1: loaderTypes -8 -1: defaults -22 -1: getActualTypeArguments -41 -1: DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR -4 -1: keys -71 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -94 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle; -113 -1: Ljava/util/AbstractSet;Ljava/util/Set;Ljava/lang/Cloneable;Ljava/io/Serializable; -12 -1: checkConnect -39 -1: (Ljava/lang/String;Ljava/util/Locale;)V -26 -1: ([CII[C)Ljava/lang/String; -12 -1: isDoubleWord -37 -1: configparser JAAS ConfigFile parsing -27 -1: sun/misc/Perf$GetPerfAction -44 -1: (Ljava/util/Collections$UnmodifiableList;I)V -4 -1: acos -26 -1: java/nio/DirectLongBufferS -7 -1: (ITE;)V -14 -1: putIntVolatile -24 -1: setContentHandlerFactory -26 -1: java/nio/DirectLongBufferU -10 -1: fieldCount -11 -1: invokeBasic -50 -1: (Ljava/util/zip/ZipEntry;)Ljava/util/jar/JarEntry; -24 -1: java/util/Locale$Builder -9 -1: setParent -11 -1: asLifoQueue -33 -1: lambda$comparingDouble$8dcf42ea$1 -24 -1: (Ljava/lang/Throwable;)I -35 -1: (Lsun/misc/JavaUtilZipFileAccess;)V -49 -1: (ILjava/lang/Object;)Ljava/util/HashMap$TreeNode; -10 -1: CLASS_PATH -6 -1: tclass -11 -1: getExponent -23 -1: getAnnotatedReturnType0 -18 -1: checkPackageAccess -35 -1: Can not instantiate java.lang.Class -24 -1: (Ljava/lang/Throwable;)V -195 -1: (Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/BoundMethodHandle$SpeciesData;Ljava/lang/invoke/BoundMethodHandle$SpeciesData;)Ljava/lang/invoke/LambdaForm; -17 -1: Empty replacement -3 -1: .SF -14 -1: ByteOrder.java -39 -1: ()Lsun/util/calendar/BaseCalendar$Date; -35 -1: ()[Ljava/security/ProtectionDomain; -12 -1: setElementAt -30 -1: (Ljava/security/CodeSource;Z)Z -45 -1: (Ljava/lang/Class<*>;)Ljava/lang/ClassLoader; -52 -1: (Ljava/nio/charset/Charset;)Ljava/util/zip/ZipCoder; -13 -1: foldArguments -23 -1: java/time/LocalDateTime -30 -1: [Lsun/launcher/LauncherHelper; -16 -1: 0123456789abcdef -60 -1: (Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream; -33 -1: (ILjava/lang/String;IIIIIIIIIII)V -20 -1: DMH.newInvokeSpecial -28 -1: java/nio/charset/CoderResult -33 -1: sun/nio/cs/StandardCharsets$Cache -11 -1: saveConvert -14 -1: ExtClassLoader -12 -1: parentOrNull -20 -1: insertParameterTypes -32 -1: (II)Ljava/util/stream/IntStream; -13 -1: setStackTrace -20 -1: is not an enum type -3 -1: CNT -4 -1: host -85 -1: ([Ljava/lang/Object;Ljava/util/function/IntFunction;)Ljava/util/function/IntConsumer; -11 -1: batchRemove -8 -1: newField -16 5: sun/nio/cs/UTF_8 -104 -1: (Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;)Ljava/lang/invoke/LambdaForm$Name; -8 -1: saturday -35 -1: java/util/ArraysParallelSortHelpers -15 -1: java/util/Queue -40 -1: (Ljava/lang/Class<*>;)Ljava/lang/String; -7 -1: toChars -5 -1: first -17 -1: ArrayDecoder.java -30 -1: ()Lsun/reflect/MethodAccessor; -26 -1: thread group can't be null -13 -1: IllegalName: -32 -1: java/util/Collections$SetFromMap -14 -1: line.separator -17 -1: getDeclaredMethod -10 -1: getMinutes -35 -1: (Lsun/util/locale/BaseLocale$Key;)I -40 -1: ([Ljava/lang/String;)Ljava/lang/Process; -31 -1: Ljava/util/LinkedHashMap$Entry; -13 -1: , str.length -8 -1: getProbe -6 -1: ([DI)I -5 -1: (CI)I -23 -1: saveAndRemoveProperties -6 -1: rehash -3 -1: lcb -31 -1: Ljava/util/Arrays$NaturalOrder; -55 -1: (IILjava/lang/String;)Ljava/lang/AbstractStringBuilder; -10 -1: loadFactor -15 -1: putLongVolatile -34 -1: sun/misc/URLClassPath$FileLoader$1 -12 -1: Europe/Paris -8 -1: DECEMBER -86 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; -22 -1: getImplMethodSignature -38 -1: Malformed enclosing method information -8 -1: maskNull -3 -1: lct -21 -1: CONSTRUCTOR_MODIFIERS -36 -1: ()Lsun/misc/JavaNetHttpCookieAccess; -12 -1: HashIterator -84 -1: (Ljava/lang/Class;Ljava/lang/Class$AnnotationData;Ljava/lang/Class$AnnotationData;)Z -33 -1: java/lang/Character$UnicodeScript -5 -1: toHex -27 -1: java/security/AllPermission -17 -1: appendReplacement -20 -1: SimpleImmutableEntry -18 -1: getRequestProperty -12 -1: compareCerts -44 -1: java/util/ArrayPrefixHelpers$IntCumulateTask -19 -1: makeSpreadArguments -222 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesTask;Ljava/util/function/Function;Ljava/util/function/BiFunction;)V -8 -1: addFirst -6 -1: nextUp -35 -1: (Ljava/net/ContentHandlerFactory;)V -40 -1: (Ljava/lang/String;)Ljava/lang/Class<*>; -23 -1: java/util/LocaleISOData -14 -1: PREPARED_FORMS -6 -1: FJByte -20 -1: getGenericSuperclass -6 -1: offset -16 -1: LocaleUtils.java -12 -1: isUnresolved -18 -1: aliases_ISO_8859_1 -18 -1: aliases_ISO_8859_2 -15 -1: isSurrogatePair -18 -1: aliases_ISO_8859_4 -18 -1: aliases_ISO_8859_5 -6 -1: EXTLEN -18 -1: aliases_ISO_8859_7 -15 -1: Comparator.java -18 -1: aliases_ISO_8859_9 -15 -1: ISO_8859-2:1987 -22 -1: Ljava/util/List<+TE;>; -16 -1: Unknown Category -3 -1: CST -51 -1: Ljava/util/AbstractList; -6 -1: FRIDAY -40 -1: (Ljava/lang/String;ZZ)Ljava/lang/String; -13 -1: isInterrupted -8 -1: utf_16le -89 -1: (BLjava/lang/Class<*>;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; -22 -1: checkInvocationCounter -12 -1: EPOCH_OFFSET -35 -1: (JJILjava/nio/DirectByteBuffer$1;)V -7 -1: canRead -9 -1: getLoader -18 -1: publicConstructors -23 -1: factory already defined -33 -1: java/lang/ref/ReferenceQueue$Null -37 -1: (Ljava/util/List;Ljava/util/Random;)V -25 -1: setPackageAssertionStatus -20 -1: MapReduceEntriesTask -11 -1: OPEN_DELETE -35 -1: (Ljava/util/Set;Ljava/lang/Class;)V -9 -1: rootGroup -10 -1: updateForm -22 -1: JavaUtilJarAccess.java -3 -1: CTT -57 -1: (Lsun/reflect/MethodInfo;)Ljava/lang/reflect/Constructor; -82 -1: (Ljava/util/NavigableSet;)Ljava/util/NavigableSet; -13 -1: getReturnType -34 -1: java/util/HashMap$EntrySpliterator -14 -1: TIME_UNDEFINED -32 -1: com/sun/crypto/provider/AESCrypt -7 -1: H_DIGIT -20 -1: clearAssertionStatus -44 -1: java/lang/invoke/MethodHandleImpl$BindCaller -8 -1: scloader -6 -1: IBM923 -5 -1: read0 -5 -1: read1 -4 -1: true -9 -1: BA_HIDDEN -16 -1: jvmUpdateVersion -36 -1: java/lang/StringCoding$StringDecoder -37 -1: (J)Ljava/nio/file/attribute/FileTime; -3 -1: lib -17 -1: getParameterTypes -15 -1: FinalizerThread -31 -1: ()Lsun/util/calendar/Gregorian; -50 -1: (Ljava/lang/CharSequence;)Ljava/lang/StringBuffer; -13 -1: PROP_SETTINGS -33 -1: java/util/function/BinaryOperator -70 -1: (ILjava/util/List;>;)Ljava/lang/invoke/MethodType; -25 -1: getDefaultRequestProperty -27 -1: (Ljava/util/jar/JarEntry;)V -27 -1: SPLITERATOR_CHARACTERISTICS -18 -1: FieldAccessor.java -10 -1: setComment -62 -1: (Ljava/lang/String;)Ljava/lang/management/MemoryManagerMXBean; -11 -1: array_klass -39 -1: ()Ljava/lang/Class$EnclosingMethodInfo; -67 -1: ([Ljava/lang/ClassValue$Entry<*>;ILjava/lang/ClassValue$Entry<*>;)I -9 -1: (II[CII)I -50 -1: (Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V -20 -1: SPECIFICATION_VENDOR -72 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/net/URL;)Ljava/util/jar/JarFile; -87 -1: (Ljava/lang/ThreadLocal;>;TT;)V -9 -1: isVarArgs -10 -1: setBoolean -12 -1: (TK;TV;TV;)Z -16 -1: findSharedClass0 -5 -1: csize -49 -1: Ljava/security/cert/CertificateEncodingException; -40 -1: java/util/concurrent/locks/ReentrantLock -86 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/lang/String;)Lsun/nio/cs/StreamEncoder; -5 -1: ready -38 -1: Ljava/security/AccessControlException; -28 -1: UnmodifiableRandomAccessList -69 -1: ([TT;Ljava/util/function/BinaryOperator;)V -27 -1: Ljava/lang/invoke/Invokers; -39 -1: java/util/LinkedList$DescendingIterator -11 -1: writeFields -17 -1: classLoaderDepth0 -18 -1: permutedTypesMatch -52 -1: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/List; -12 -1: linkToStatic -10 -1: CheckedMap -6 -1: CENOFF -8 -1: lastRule -15 -1: java/lang/Short -39 -1: ()Ljava/lang/Class$ReflectionData; -8 -1: nextDown -14 -1: image/x-pixmap -39 -1: (Ljava/lang/Class;[Ljava/lang/Object;)V -25 -1: defineClassSourceLocation -23 -1: sun/misc/PostVMInitHook -15 -1: could not load -16 -1: allowArraySyntax -90 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; -10 -1: putBoolean -11 -1: has params -14 -1: setMaxPriority -10 -1: mayContain -46 -1: java/lang/reflect/MalformedParametersException -10 -1: baseLocale -14 -1: isSubwordOrInt -10 -1: nextDouble -32 -1: java/lang/Character$UnicodeBlock -85 -1: (JLjava/util/function/ToDoubleBiFunction;DLjava/util/function/DoubleBinaryOperator;)D -20 -1: numberOfLeadingZeros -59 -1: (I[Ljava/lang/Class<*>;)[Ljava/lang/invoke/LambdaForm$Name; -7 -1: setSize -29 -1: java/io/FileNotFoundException -9 -1: getString -24 -1: ([CII)Ljava/lang/String; -38 -1: (Ljava/lang/String;Ljava/lang/Class;)V -5 -1: shift -18 -1: getConstructorSlot -41 -1: java/lang/ThreadLocal$SuppliedThreadLocal -16 -1: UNASSIGNED_STACK -20 -1: Malformed class name -12 -1: ofEpochMilli -34 -1: sun/launcher/LauncherHelper$StdArg -33 -1: java/nio/ByteBufferAsShortBufferB -7 -1: convert -21 -1: ()[Ljava/util/Locale; -15 -1: ISO_8859-5:1988 -35 -1: av[0] not instace of MethodHandle: -33 -1: java/nio/ByteBufferAsShortBufferL -5 -1: hypot -16 -1: InputStream.java -13 -1: reinvokerForm -39 -1: JVMTI_THREAD_STATE_WAITING_INDEFINITELY -16 -1: sun/misc/Version -66 -1: (Ljava/lang/Class;)[TT; -11 -1: codePointAt -30 -1: ([Ljava/lang/reflect/Method;)V -9 -1: duplicate -9 -1: interface -5 -1: X.509 -24 -1: SynchronizedNavigableSet -8 -1: us-ascii -17 -1: getUnresolvedType -21 -1: PRIVATE_USE_EXTENSION -4 -1: form -93 -1: (Ljava/util/ArrayPrefixHelpers$LongCumulateTask;Ljava/util/function/LongBinaryOperator;[JII)V -27 -1: sealing violation: package -34 -1: RuntimeVisibleParameterAnnotations -17 -1: LF_INVSTATIC_INIT -14 -1: Gregorian.java -32 -1: java/util/function/UnaryOperator -3 -1: log -3 -1: low -22 -1: sun/misc/JavaNetAccess -9 -1: getLength -21 -1: getRawTypeAnnotations -36 -1: (Ljava/lang/String;)Ljava/lang/Long; -9 -1: getNumber -66 -1: (ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node; -20 -1: (Ljava/lang/Class;)C -89 -1: Ljava/lang/Object;Ljava/util/Map$Entry; -6 -1: ENDSIG -20 -1: (Ljava/lang/Class;)I -20 -1: (Ljava/lang/Class;)J -24 -1: [[Ljava/io/Serializable; -22 -1: serialPersistentFields -7 -1: console -142 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -27 -1: (Ljava/nio/ByteBuffer;ICZ)V -20 -1: (Ljava/lang/Class;)V -40 -1: java/lang/ArrayIndexOutOfBoundsException -6 -1: this$0 -51 -1: (Ljava/lang/invoke/MemberName;[Ljava/lang/Object;)V -18 -1: packageAccessValid -33 -1: ([Ljava/lang/StackTraceElement;)V -8 -1: constant -113 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;IILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class<*>; -8 -1: isMethod -20 -1: (Ljava/lang/Class;)Z -6 -1: ENDSIZ -8 -1: newEntry -57 -1: (Ljava/lang/Object;)Ljava/lang/IndexOutOfBoundsException; -25 -1: (Ljava/util/Comparator;)V -8 -1: isBridge -6 -1: ([BI)I -6 -1: ([BI)J -16 -1: getReferenceKind -26 -1: [Ljava/security/Principal; -71 -1: (Ljava/lang/Class;[Ljava/lang/reflect/Field;)[Ljava/lang/reflect/Field; -32 -1: ()Ljava/lang/ClassValue$Version; -16 -1: SearchValuesTask -17 -1: setCompressedSize -16 -1: DEFAULT_CAPACITY -108 -1: ;>()Ljava/util/Comparator;>; -27 -1: java/util/ComparableTimSort -41 -1: null StackTraceElement in serial stream. -6 -1: ([BI)V -44 -1: (Ljava/util/jar/JarFile;)Lsun/misc/JarIndex; -71 -1: (Ljava/util/jar/JarFile;Ljava/util/Enumeration;)Ljava/util/Enumeration; -52 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class<*>;)Z -36 -1: [Ljava/lang/reflect/TypeVariable<*>; -17 -1: OutputStream.java -8 -1: combiner -15 -1: decodeArrayLoop -19 -1: (Ljava/io/Writer;)V -41 -1: (Ljava/util/List<*>;Ljava/util/List<*>;)I -35 -1: ()[Ljava/security/cert/Certificate; -33 -1: ([I)Ljava/util/Spliterator$OfInt; -9 -1: NF_asType -17 -1: java/io/Closeable -11 -1: updateBytes -12 -1: charsets.jar -18 -1: getDeclaredFields0 -47 -1: (Ljava/lang/Object;I)Ljava/lang/reflect/Member; -60 -1: (Ljava/lang/String;ILjava/lang/String;)Ljava/nio/ByteBuffer; -15 -1: getTotalSeconds -57 -1: (Ljava/util/Collection<+Ljava/util/Map$Entry;>;)Z -4 -1: JULY -10 -1: Exceptions -41 -1: ()Ljava/util/List; -14 -1: ParseUtil.java -13 -1: getJarFileURL -29 -1: setJavaIOFileDescriptorAccess -24 -1: ARRAY_OBJECT_BASE_OFFSET -21 -1: onUnmappableCharacter -53 -1: (Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map; -24 -1: MethodHandleNatives.java -40 -1: java/nio/charset/MalformedInputException -37 -1: [Ljava/lang/reflect/AnnotatedElement; -15 -1: CLASSPATH_CHARS -18 -1: [Ljava/lang/Class; -7 -1: FJFloat -47 -1: (Ljava/util/List;I)V -19 -1: Ljava/lang/Runtime; -23 -1: java/lang/CharacterData -42 -1: (Ljava/lang/Void;Ljava/lang/ClassLoader;)V -76 -1: (Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)V -56 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;B)V -19 -1: java/util/zip/CRC32 -33 -1: ([TT;I)[TT; -22 -1: ([F)Ljava/lang/String; -5 -1: UTF_8 -20 -1: aliases_UTF_32BE_BOM -11 -1: Buffer.java -78 -1: (Ljava/util/Comparator;)Ljava/util/Comparator; -44 -1: (Ljava/lang/String;)Ljava/util/zip/ZipEntry; -9 -1: malformed -4 -1: JUNE -51 -1: (Ljava/util/jar/JarFile;Ljava/util/jar/JarFile$1;)V -6 -1: locale -34 -1: (Ljava/util/function/BiFunction;)V -10 -1: setMinutes -40 -1: (Ljava/lang/reflect/AccessibleObject;Z)V -12 -1: maybeCompile -46 -1: (Ljava/lang/Class;Ljava/lang/reflect/Method;)V -7 -1: getEras -55 -1: ([TT;Ljava/util/Iterator<*>;)[TT; -17 -1: toUnsignedString0 -32 -1: (Ljava/lang/invoke/MethodType;)V -32 -1: (Ljava/lang/invoke/MethodType;)Z -10 -1: Class.java -27 -1: ()Ljava/util/Iterator; -29 -1: WINDOWS_EPOCH_IN_MICROSECONDS -41 -1: (Ljava/io/InputStream;)Ljava/lang/String; -4 -1: prev -24 -1: ()Ljava/util/Properties; -11 -1: awaitBooted -19 -1: generateConstructor -22 -1: sun/misc/SharedSecrets -19 -1: getDateTimeInstance -43 -1: (IIILsun/util/calendar/BaseCalendar$Date;)J -5 -1: setID -11 -1: Locale.java -12 -1: getRootGroup -15 -1: setLastModified -7 -1: trouble -28 -1: (Z)Ljava/lang/StringBuilder; -5 -1: setIO -17 -1: loadClassInternal -23 -1: java/lang/ref/Finalizer -8 -1: EmptySet -16 -1: aliases_UTF_16BE -50 -1: (Ljava/util/NavigableMap;)Ljava/util/NavigableMap; -15 -1: unmodifiableMap -48 -1: (Ljava/lang/Class<*>;)Lsun/reflect/ConstantPool; -15 -1: arrayContentsEq -7 -1: EXT_TAG -31 -1: (Ljava/util/HashMap$TreeNode;)Z -5 -1: cp737 -22 -1: java/util/zip/Checksum -5 -1: names -22 -1: ConcurrentHashMap.java -7 -1: ([J[J)Z -7 -1: WAITING -31 -1: sun.launcher.resources.launcher -14 -1: getThreadGroup -8 -1: PutField -12 -1: hugeCapacity -9 -1: isPackage -72 -1: (Ljava/lang/ThreadLocal<*>;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; -23 7: sun/nio/ch/DirectBuffer -13 -1: Checksum.java -25 -1: (Ljava/nio/ByteBuffer;I)C -51 -1: (Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object; -25 -1: (Ljava/nio/ByteBuffer;I)D -7 -1: treeify -25 -1: (Ljava/nio/ByteBuffer;I)F -5 -1: setIn -25 -1: (Ljava/nio/ByteBuffer;I)I -20 -1: TRACE_METHOD_LINKAGE -25 -1: (Ljava/nio/ByteBuffer;I)J -7 -1: putIntB -22 -1: createGarbageCollector -50 -1: (Ljava/lang/Class;)[TT; -25 -1: (Ljava/nio/ByteBuffer;I)S -7 -1: putIntL -19 -1: (B)Ljava/lang/Byte; -14 -1: Hashtable.java -29 -1: java/lang/ArrayStoreException -11 -1: all_allowed -16 -1: getLastRawOffset -7 -1: inReady -36 -1: java/lang/ThreadLocal$ThreadLocalMap -40 -1: (ILjava/lang/String;Ljava/lang/String;)V -23 -1: Ljava/lang/ThreadLocal; -16 -1: classValueOrNull -62 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/MethodHandle; -23 -1: preparedFieldLambdaForm -22 -1: (Z)Ljava/lang/Boolean; -14 -1: ThreadLocalMap -27 -1: java/lang/StackTraceElement -13 -1: getEntryCSize -19 -1: java.security.debug -53 -1: (Ljava/util/Collection<*>;Ljava/util/Collection<*>;)Z -6 -1: LOCLEN -40 -1: Ljava/lang/Class; -6 -1: (JJB)V -66 -1: Ljava/util/Hashtable; -31 -1: [[Ljava/lang/StackTraceElement; -9 -1: putStatic -16 -1: Asia/Ho_Chi_Minh -15 -1: getDisplayNames -13 -1: convertToAbbr -23 -1: Method not implemented. -15 -1: isCCLOverridden -14 -1: doubleCapacity -137 -1: (Ljava/lang/Class<*>;ZLjava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Class<*>;)Ljava/util/List; -219 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysTask;Ljava/util/function/Function;Ljava/util/function/BiFunction;)V -7 -1: native -29 -1: (Ljava/lang/reflect/Field;Z)V -18 -1: Ljava/util/Locale; -31 -1: Ljava/util/concurrent/TimeUnit; -16 -1: threadsSuspended -7 -1: ([III)V -20 -1: setMaxDelimCodePoint -18 -1: contentClassPrefix -13 -1: mappingOffset -10 -1: toIndex = -47 -1: (Ljava/lang/CharSequence;)Ljava/io/PrintStream; -12 -1: booleanValue -13 -1: putMapEntries -17 -1: defaultBundleName -50 -1: (Ljava/util/concurrent/CountedCompleter;[B[BIIII)V -10 -1: executable -20 -1: java/time/ZoneOffset -28 -1: java/lang/ref/FinalReference -11 -1: newTreeNode -7 -1: lookup2 -10 -1: TableStack -59 -1: Ljava/util/concurrent/ConcurrentHashMap$ValuesView; -11 -1: getAccessor -9 -1: available -18 -1: java/io/FileReader -34 -1: java/security/ProtectionDomain$3$1 -16 -1: integer overflow -11 -1: internTable -28 -1: Ljava/util/HashMap$TreeNode; -19 -1: | invocationCounter -12 -1: findResource -9 -1: isLoaded0 -5 -1: cp775 -24 -1: DIRECTIONALITY_UNDEFINED -9 -1: isInvalid -7 -1: lookupN -35 -1: (Lsun/reflect/MethodAccessorImpl;)V -6 -1: ENDSUB -4 -1: to -59 -1: ([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object; -10 -1: meta-index -6 -1: INDENT -9 -1: WEDNESDAY -40 -1: ()Ljava/lang/annotation/RetentionPolicy; -14 -1: getUsableSpace -7 -1: TUESDAY -51 -1: (Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle; -12 -1: getSubjectDN -21 -1: Ljava/io/InputStream; -25 -1: (IC)Ljava/nio/CharBuffer; -52 -1: (Ljava/nio/CharBuffer;)Ljava/util/function/Supplier; -17 -1: ()[Ljava/net/URL; -6 -1: search -10 -1: Main-Class -8 -1: ([CIIC)I -16 -1: Certificate.java -14 -1: spreadInvokers -22 -1: sun/nio/cs/ISO_8859_15 -6 -1: accept -18 -1: ReflectAccess.java -13 -1: java/nio/Bits -14 -1: linkToCallSite -46 -1: Ljava/nio/charset/UnsupportedCharsetException; -8 -1: ([CIIC)V -9 -1: (TT;TV;)V -26 -1: java/lang/OutOfMemoryError -34 -1: policy loading and granting -76 -1: (Ljava/nio/CharBuffer;ILjava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult; -13 -1: x-windows-949 -21 -1: Ljava/io/PrintStream; -9 -1: initNames -12 -1: testAnyFlags -65 -1: (Ljava/lang/reflect/Method;)Ljava/lang/invoke/DirectMethodHandle; -34 -1: (Ljava/util/List;)Ljava/util/List; -10 -1: CacheEntry -10 -1: hasAllPerm -26 -1: java/nio/charset/Charset$1 -26 -1: java/nio/charset/Charset$2 -19 -1: ()Ljava/util/Stack; -26 -1: java/nio/charset/Charset$3 -62 -1: (Ljava/lang/String;)Lsun/util/calendar/LocalGregorianCalendar; -23 -1: ARRAY_FLOAT_INDEX_SCALE -23 -1: (Ljava/lang/Object;IS)V -13 -1: x-windows-950 -31 -1: Ljava/util/Hashtable$Entry<**>; -87 -1: Ljava/util/WeakHashMap;>; -9 -1: permClass -37 -1: (Ljava/security/ProtectionDomain$3;)V -99 -1: Lsun/reflect/generics/repository/AbstractRepository; -37 -1: ()Ljava/util/function/BinaryOperator; -64 -1: java/util/Collections$UnmodifiableNavigableMap$EmptyNavigableMap -91 -1: (Ljava/util/ArrayPrefixHelpers$IntCumulateTask;Ljava/util/function/IntBinaryOperator;[III)V -6 -1: getCrc -25 -1: ByteArrayInputStream.java -9 -1: SYNTHETIC -52 -1: Ljava/lang/ref/PhantomReference; -246 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToDoubleTask;Ljava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)V -38 -1: java/lang/Throwable$WrappedPrintStream -21 -1: Illegal load factor: -43 -1: Ljava/util/Deque; -3 -1: map -6 -1: expand -6 -1: access -3 -1: max -33 -1: impliesCreateAccessControlContext -3 -1: may -53 -1: java/util/concurrent/ConcurrentHashMap$ReduceKeysTask -91 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; -60 -1: attempt to add a Permission to a readonly Permissions object -21 -1: canonicalizeExtension -11 -1: copyValueOf -25 -1: (IJ)Ljava/nio/LongBuffer; -112 -1: (JLjava/util/function/Function<-TV;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; -11 -1: DeqIterator -11 -1: SpeciesData -8 -1: getCause -16 -1: aliases_UTF_16LE -51 -1: (TT;TV;Ljava/util/function/BinaryOperator;)TV; -25 -1: (JF)Ljava/nio/ByteBuffer; -16 -1: sun/misc/IOUtils -32 -1: Ljava/util/Locale$FilteringMode; -6 -1: .class -13 -1: getPermission -13 -1: startsWithLOC -8 -1: Identity -23 -1: ([BII)Ljava/lang/Class; -15 -1: putByteVolatile -36 -1: (Ljava/util/Deque;)Ljava/util/Queue; -22 -1: (Ljava/lang/Object;S)V -47 -1: java/util/concurrent/ConcurrentHashMap$BulkTask -4 -1: n = -9 -1: (ITE;)TE; -5 -1: zeroD -18 -1: formatUnsignedLong -29 -1: default display locale = -23 -1: java/io/File$PathStatus -5 -1: zeroF -20 -1: Ljava/util/Set; -20 -1: (Ljava/util/List;I)V -5 -1: zeroI -5 -1: zeroJ -7 -1: context -39 -1: Ljava/nio/channels/WritableByteChannel; -5 -1: zeroL -34 -1: Lsun/util/calendar/CalendarSystem; -24 -1: JVMTI_THREAD_STATE_ALIVE -18 -1: (Ljava/util/Set;)V -18 -1: (Ljava/util/Set;)Z -42 -1: (TT;Ljava/lang/ref/ReferenceQueue<-TT;>;)V -7 -1: entries -30 -1: (Ljava/util/WeakHashMap;IIII)V -15 -1: csisolatingreek -38 -1: ([Ljava/lang/Class;)Ljava/lang/Object; -12 -1: isMalformed3 -12 -1: isMalformed4 -5 -1: FJInt -23 -1: java/util/LinkedHashMap -20 -1: malformedInputAction -12 -1: Charset.java -5 -1: LLL_L -42 -1: (Ljava/util/Collection;)Ljava/lang/Object; -22 -1: makeMethodHandleInvoke -3 -1: mdt -7 -1: unicode -12 -1: newInstance0 -10 -1: checkCerts -34 -1: java/util/WeakHashMap$HashIterator -23 -1: (Ljava/lang/Object;JI)I -9 -1: hexDigits -13 -1: javaToDosTime -24 -1: (I)Ljava/nio/LongBuffer; -6 -1: A_DATA -12 -1: deepToString -23 -1: (Ljava/lang/Object;JI)V -91 -1: (JLjava/util/function/ToLongBiFunction<-TK;-TV;>;JLjava/util/function/LongBinaryOperator;)J -23 -1: bad spread array length -11 -1: readTimeout -14 -1: toAbsolutePath -8 -1: isFinite -19 -1: currentLoadedClass0 -3 -1: \xef\xbf\xbd -23 -1: (Ljava/nio/file/Path;)I -8 -1: handlers -21 -1: (Ljava/util/List;II)V -89 -1: (Lsun/misc/URLClassPath$Loader;Ljava/lang/String;Ljava/net/URL;Ljava/net/URLConnection;)V -8 -1: OVERFLOW -8 -1: newTable -8 -1: THURSDAY -6 -1: notify -12 -1: initialValue -35 -1: (I)Ljava/util/LinkedList$Node; -18 -1: AsVarargsCollector -26 -1: (Lsun/misc/JavaIOAccess;)V -18 -1: ()Ljava/lang/Void; -23 -1: (Ljava/nio/file/Path;)Z -16 -1: MINUTE_IN_MILLIS -67 -1: (Ljava/lang/Class;[Ljava/lang/Class;Z)Ljava/lang/invoke/MethodType; -18 -1: Ljava/util/Vector; -70 -1: (Ljava/lang/reflect/Constructor;[Ljava/lang/Object;)Ljava/lang/Object; -40 -1: (Ljava/lang/Object;ILjava/lang/Object;)V -25 -1: UnresolvedPermission.java -14 -1: ReduceKeysTask -21 -1: ()[Ljava/lang/Object; -129 -1: Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; -16 -1: ClassLoader.java -46 -1: Ljava/util/Comparators$NaturalOrderComparator; -17 -1: compareAndSwapInt -22 -1: packageDefinitionValid -41 -1: ([Ljava/lang/Object;[Ljava/lang/Object;)Z -162 -1: (Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List; -16 -1: sun.zip.zipFiles -17 -1: java_runtime_name -31 -1: (Ljava/lang/ClassValue$Entry;)V -31 -1: (Ljava/lang/ClassValue$Entry;)Z -30 -1: (TT;)TT; -39 -1: JavaSecurityProtectionDomainAccess.java -24 -1: (I)Ljava/lang/Throwable; -7 -1: FJShort -9 -1: putFloatB -19 -1: checkedNavigableSet -25 -1: java/lang/invoke/Invokers -18 -1: setIfModifiedSince -14 -1: parameterTypes -41 -1: (Ljava/lang/Object;Ljava/lang/Runnable;)V -9 -1: putFloatL -11 -1: getTypeCode -5 -1: (ZZ)I -24 -1: java/lang/ProcessBuilder -9 -1: UNDERFLOW -21 -1: VolatileCallSite.java -24 -1: (C)Ljava/nio/CharBuffer; -55 -1: java/util/concurrent/ConcurrentHashMap$ForEachValueTask -26 -1: (Ljava/lang/String;[CII)[B -18 -1: reduceKeysToDouble -5 -1: (ZZ)Z -23 -1: setCallSiteTargetNormal -3 -1: min -4 -1: ceil -62 -1: (Ljava/lang/String;)Ljava/util/LinkedList; -29 -1: (Ljava/util/AbstractList;II)V -32 -1: Ljava/lang/Class$AnnotationData; -21 -1: createFileExclusively -64 -1: (Ljava/lang/ref/SoftReference;I)Ljava/lang/Class$ReflectionData; -26 -1: java/lang/Short$ShortCache -54 -1: (Ljava/net/URL;Ljava/io/File;)Ljava/net/URLConnection; -29 -1: Lsun/nio/cs/Surrogate$Parser; -58 -1: (Ljava/lang/Class;)Lsun/reflect/annotation/AnnotationType; -8 -1: findForm -53 -1: Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet; -39 -1: (Lsun/misc/Perf;Ljava/nio/ByteBuffer;)V -16 -1: mergePermissions -11 -1: totalMemory -53 -1: java/lang/invoke/DirectMethodHandle$EnsureInitialized -139 -1: Ljava/util/AbstractMap;Ljava/util/concurrent/ConcurrentMap;Ljava/io/Serializable; -29 -1: java/util/HashMap$KeyIterator -20 -1: STACK_TRACE_SENTINEL -5 -1: order -18 -1: java/lang/Runnable -8 -1: GetField -13 -1: Empty command -7 -1: CONTROL -9 -1: blockedOn -12 -1: testAllFlags -11 -1: getInflater -16 -1: threadTerminated -44 -1: (Ljava/lang/ThreadGroup;Ljava/lang/String;)V -20 -1: java.runtime.version -8 -1: peekLast -23 -1: java/util/ArrayList$Itr -21 -1: (Ljava/util/Locale;)V -13 -1: isOptimizable -8 -1: FairSync -7 -1: CHINESE -15 -1: initHelpMessage -30 -1: ()Ljava/util/HashMap$TreeNode; -29 -1: Ljava/lang/SecurityException; -7 -1: charset -35 -1: sun/security/util/SecurityConstants -19 -1: sun.nio.cs.bugLevel -8 2: Foo.java -49 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;)V -12 -1: EntrySetView -37 -1: (Lsun/misc/JavaNetHttpCookieAccess;)V -35 -1: Ljava/util/Hashtable$Entry; -20 -1: NF_constructorMethod -8 -1: getMonth -38 -1: (Ljava/util/Iterator;Ljava/util/Map;)V -14 -1: getIntVolatile -6 -1: [name= -8 -1: oop_size -20 -1: Can't load library: -30 -1: ()Ljava/util/Spliterator; -33 -1: Lsun/reflect/ConstructorAccessor; -61 -1: Ljava/lang/Number;Ljava/lang/Comparable; -15 -1: printVmSettings -33 -1: stack include stack trace -45 -1: ([Ljava/lang/Object;I)Ljava/util/Spliterator; -37 -1: sun/reflect/generics/scope/ClassScope -36 -1: java/io/UnsupportedEncodingException -24 -1: (J)Ljava/nio/LongBuffer; -11 -1: addressSize -15 -1: ByteBuffer.java -62 -1: (Ljava/lang/String;)Lsun/reflect/generics/tree/ClassSignature; -9 -1: (TT;TT;)I -25 -1: java/io/DefaultFileSystem -15 -1: BaseLocale.java -14 -1: BitSetIterator -17 -1: AbstractList.java -57 -1: Ljava/lang/ref/WeakReference;>; -178 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -9 -1: arguments -26 -1: java/util/Locale$LocaleKey -9 -1: setLength -29 -1: sun/nio/cs/ISO_8859_1$Decoder -9 -1: zipfs.jar -24 -1: Ljava/util/zip/ZipCoder; -14 -1: , new state = -93 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;IIIJLjava/util/concurrent/ConcurrentHashMap;)V -39 -1: java/security/PrivilegedExceptionAction -9 -1: dnsns.jar -20 -1: iteratorBinarySearch -14 -1: initializePath -22 -1: DefaultFileSystem.java -17 -1: Ljava/util/Deque; -8 -1: DEFLATED -11 -1: Can't load -9 -1: ArrayList -21 -1: negativeZeroFloatBits -41 -1: (Ljava/lang/String;ILjava/util/Locale;)[C -14 -1: ANSI_X3.4-1968 -39 -1: sun/reflect/annotation/AnnotationType$1 -3 -1: mod -62 -1: Ljava/nio/Buffer;Ljava/lang/Comparable; -29 -1: interpretWithArgumentsTracing -6 -1: getDay -47 -1: sun/reflect/generics/repository/ClassRepository -19 -1: refKindDoesDispatch -20 -1: getAnnotationsByType -14 -1: needsExpansion -18 -1: lastIndexOfSubList -26 -1: JavaUtilZipFileAccess.java -59 -1: (Ljava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder; -12 -1: ptypesOffset -8 -1: hashcode -18 -1: ([Ljava/net/URL;)V -8 -1: iso-ir-6 -7 -1: jzentry -52 -1: only dump output if specified codebase -31 -1: lambda$comparingLong$6043328a$1 -5 -1: MARCH -14 -1: ANSI_X3.4-1986 -14 -1: isMalformed3_2 -7 -1: IS_TYPE -68 -1: Ljava/lang/Object;Ljava/lang/Comparable; -30 -1: protocol doesn't support input -17 -1: getExtClassLoader -14 -1: setProxiedHost -73 -1: ()Ljava/util/Map;>; -16 -1: traceInterpreter -17 -1: (Ljava/net/URL;)I -5 -1: expm1 -18 -1: createInheritedMap -66 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedEntryTask -17 -1: getTimeOfDayValue -15 -1: zeroLengthArray -20 -1: invalid permission: -6 -1: REPORT -15 -1: isNumericString -78 -1: (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter; -6 -1: (TV;)Z -25 -1: Lsun/misc/JavaLangAccess; -29 -1: (I)Ljava/lang/reflect/Method; -17 -1: (Ljava/net/URL;)V -34 -1: ()Ljava/lang/Class$ReflectionData; -50 -1: java.lang.invoke.MethodHandle.TRACE_METHOD_LINKAGE -10 -1: copyWith: -17 -1: (Ljava/net/URL;)Z -32 -1: ()Ljava/util/stream/Stream; -22 -1: quickCheckMemberAccess -29 -1: ()Lsun/net/www/MessageHeader; -19 -1: getAssignedCombiner -8 -1: ([JIIJ)I -17 -1: formatUnsignedInt -68 -1: Ljava/util/AbstractMap; -34 -1: java/nio/ByteBufferAsDoubleBufferB -32 -1: ([I)Ljava/util/stream/IntStream; -9 -1: init_lock -18 -1: must be resolved: -42 -1: ()Ljava/nio/channels/spi/SelectorProvider; -8 -1: ([JIIJ)V -33 -1: IncompatibleClassChangeError.java -34 -1: java/nio/ByteBufferAsDoubleBufferL -31 -1: ()Ljava/util/function/Function; -43 -1: Ljava/lang/Enum; -17 -1: availableCharsets -49 -1: java/util/ArraysParallelSortHelpers$FJChar$Sorter -22 -1: permission= -22 -1: getAnnotatedSuperclass -20 -1: isObjectPublicMethod -15 -1: Attempt to get -10 -1: createLong -14 -1: HASH_INCREMENT -32 -1: sun/management/ManagementFactory -13 -1: separatorChar -15 -1: bad field type -8 -1: november -27 -1: (F)Ljava/lang/StringBuffer; -3 -1: EAT -3 -1: mst -54 -1: (Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method; -18 -1: Ljava/lang/Object; -7 -1: ;:&=+$, -12 -1: Handler.java -7 -1: isDirty -127 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT; -14 -1: asTypeUncached -5 -1: split -200 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;Ljava/lang/reflect/Type;Lsun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget;)Ljava/lang/reflect/AnnotatedType; -47 -1: java.lang.invoke.MethodHandle.TRACE_INTERPRETER -22 -1: sun/invoke/empty/Empty -66 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/Map; -18 -1: jvm_update_version -32 -1: (Ljava/util/Map;)Ljava/util/Map; -14 -1: cacheLoadLimit -8 -1: javaHome -52 -1: (Ljava/lang/reflect/Field;)Ljava/lang/reflect/Field; -20 -1: [[Ljava/lang/Object; -19 -1: isJavaLetterOrDigit -11 -1: loadLibrary -32 -1: java/io/StreamCorruptedException -14 -1: setAccessible0 -27 -1: sun/nio/cs/UTF_16LE$Encoder -60 -1: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream; -8 -1: segments -10 -1: UTF_8.java -3 -1: ECT -5 -1: cp813 -5 -1: cp819 -61 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I -5 -1: Cache -4 -1: sinh -32 -1: java/util/function/ToIntFunction -10 -1: setFactory -24 -1: Illegal mappings count: -16 -1: fileToEncodedURL -38 -1: Ljava/lang/annotation/RetentionPolicy; -27 -1: Ljava/net/SocketPermission; -46 -1: (Ljava/lang/CharSequence;I)[Ljava/lang/String; -11 -1: cardinality -13 -1: getMonthValue -64 -1: (Ljava/lang/invoke/MethodType;II)Ljava/lang/invoke/MethodHandle; -6 -1: ENDTOT -12 -1: getBytesUTF8 -9 -1: cacheLoad -13 -1: packageAccess -14 -1: sharedToString -5 -1: merge -29 -1: parameter type cannot be void -27 -1: makePreparedFieldLambdaForm -40 -1: Couldn't find 3-letter country code for -166 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/lang/ClassLoader;)V -19 -1: (Ljava/util/Map;Z)V -13 -1: setExecutable -17 -1: objectFieldOffset -57 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -128 -1: (Ljava/lang/Class<*>;ZLjava/lang/String;Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Ljava/util/List; -61 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToIntTask -6 -1: asType -25 -1: java/io/ObjectStreamField -15 -1: jvmMajorVersion -124 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; -23 -1: (Ljava/lang/Class<*>;)C -6 -1: andNot -15 -1: getResponseCode -59 -1: (Ljava/lang/StringBuffer;)Ljava/lang/AbstractStringBuilder; -23 -1: (Ljava/lang/Class<*>;)I -7 -1: seeAllp -44 -1: (Ljava/lang/ClassLoader;[Ljava/lang/Class;)V -13 -1: loadFromCache -35 -1: sun/nio/cs/HistoricallyNamedCharset -38 -1: (Ljava/lang/Class;[Ljava/lang/Class;)V -19 -1: INVOKER_METHOD_TYPE -16 -1: putShortVolatile -12 -1: Asia/Karachi -8 -1: cyrillic -12 -1: getISO2Table -23 -1: (Ljava/lang/Class<*>;)V -3 -1: 1.4 -15 -1: LongBuffer.java -6 -1: (IFZ)V -23 -1: (Ljava/lang/Class<*>;)Z -10 -1: initOutput -9 -1: CELLSBUSY -39 -1: java/security/PrivilegedActionException -31 -1: sun/util/calendar/CalendarUtils -202 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;[Ljava/lang/reflect/Type;Lsun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget;)[Ljava/lang/reflect/AnnotatedType; -20 -1: Ljava/lang/Class<*>; -5 -1: cp850 -25 -1: (JI)Ljava/nio/ByteBuffer; -5 -1: cp852 -24 -1: Invalid parameter name " -39 -1: ([CII)Ljava/lang/AbstractStringBuilder; -5 -1: cp855 -11 -1: Deallocator -5 -1: cp857 -5 -1: cp858 -7 -1: ([SI)[S -37 -1: ([C)Ljava/lang/AbstractStringBuilder; -27 -1: java/lang/SecurityException -82 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)V -38 -1: (Ljava/lang/String;)Ljava/lang/String; -7 -1: connect -7 -1: isEmpty -11 -1: replaceNode -19 -1: SuppliedThreadLocal -12 -1: asFixedArity -12 -1: fromIndex = -19 -1: createMemoryManager -9 -1: List.java -8 -1: FEBRUARY -21 -1: UnicodeLittleUnmarked -6 -1: a null -30 -1: ()Ljava/util/Spliterator; -5 -1: cp862 -17 -1: ZoneInfoFile.java -5 -1: cp866 -8 -1: BulkTask -53 -1: java/util/concurrent/locks/AbstractQueuedSynchronizer -20 -1: FileInputStream.java -12 -1: java.vm.info -10 -1: newDecoder -5 -1: (JB)V -8 -1: filePath -17 -1: spreadArrayChecks -44 -1: ([Ljava/lang/Object;Ljava/util/Comparator;)V -33 -1: java/util/Collections$AsLIFOQueue -32 -1: Ljava/util/LinkedList$Node; -5 -1: cp874 -78 -1: (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream; -39 -1: (JLjava/util/function/Consumer<-TK;>;)V -15 -1: appendCodePoint -20 -1: primitiveReturnCount -54 -1: only dump output if specified permission -20 -1: getGenericInterfaces -41 -1: ([Ljava/lang/reflect/AccessibleObject;Z)V -17 -1: nUnstartedThreads -33 -1: (Ljava/lang/invoke/MemberName;Z)V -24 -1: ARRAY_OBJECT_INDEX_SCALE -40 -1: (Ljava/lang/String;ILjava/util/Locale;)I -17 -1: java/io/Flushable -22 -1: newConstructorAccessor -26 -1: sun/misc/JavaUtilJarAccess -6 -1: booted -10 -1: setDoInput -36 -1: (Ljava/lang/Class;)[Ljava/lang/Enum; -19 -1: java/lang/Character -52 -1: ([Ljava/net/URL;Ljava/net/URLStreamHandlerFactory;)V -24 -1: (Ljava/nio/LongBuffer;)I -16 -1: start > length() -28 -1: (I)Ljava/lang/CharacterData; -5 -1: val$c -61 -1: (Ljava/lang/Throwable;Ljava/lang/String;[Ljava/lang/Object;)V -13 -1: resolveOrNull -9 -1: L_ESCAPED -27 -1: MapReduceValuesToDoubleTask -15 -1: getPreparedForm -33 -1: (I)[Ljava/util/WeakHashMap$Entry; -54 -1: ()Ljava/util/stream/Stream<+Ljava/util/zip/ZipEntry;>; -16 -1: bad method type -5 -1: val$s -17 -1: Null charset name -36 -1: java/lang/invoke/LambdaForm$Compiled -24 -1: (Ljava/util/SortedMap;)V -19 -1: java/time/LocalTime -29 -1: not invocable, no method type -21 -1: recalculateWordsInUse -6 -1: val$id -39 -1: sun/security/util/ManifestEntryVerifier -60 -1: ([Ljava/lang/Class<*>;I)Ljava/lang/reflect/Constructor; -45 -1: java/util/ArrayPrefixHelpers$LongCumulateTask -5 -1: OfInt -11 -1: environment -60 -1: ([Ljava/lang/Class<*>;[B)[[Ljava/lang/annotation/Annotation; -7 -1: (JJJZ)V -10 -1: BufferPool -6 -1: isUTF8 -12 -1: threadLocals -35 -1: (Ljava/lang/String;)[Ljava/net/URL; -21 -1: Ljava/nio/LongBuffer; -15 -1: copyConstructor -25 -1: setCallSiteTargetVolatile -15 -1: getNumericValue -26 -1: Ljava/security/CodeSource; -18 -1: Null output stream -14 -1: cloneWithIndex -23 -1: LOCAL_LISTEN_PERMISSION -6 -1: (TT;)I -46 -1: (Ljava/security/PublicKey;Ljava/lang/String;)V -6 -1: setCrc -26 -1: java/io/FilterOutputStream -10 -1: access$000 -10 -1: access$001 -10 -1: access$002 -6 -1: (TT;)V -78 -1: ([TU;IILjava/lang/Class<+[TT;>;)[TT; -41 -1: java/util/concurrent/atomic/AtomicInteger -8 -1: renameTo -40 -1: (Ljava/lang/Class<*>;)Ljava/lang/Object; -17 -1: getRawAnnotations -29 -1: java/lang/VirtualMachineError -37 -1: java/lang/management/MemoryPoolMXBean -25 -1: (II)Ljava/util/List; -6 -1: utf_16 -23 -1: (Ljava/lang/String;[B)V -19 -1: MIN_ARRAY_SORT_GRAN -25 -1: array length is not legal -45 -1: java/util/concurrent/locks/ReentrantLock$Sync -36 -1: Ljava/security/AccessControlContext; -48 -1: sun/reflect/generics/repository/MethodRepository -24 -1: MethodHandleStatics.java -24 -1: addThreadDumpForMonitors -64 -1: (Ljava/util/Set;)Ljava/util/Set; -58 -1: (Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/Object;)Z -37 -1: (III)Lsun/util/calendar/CalendarDate; -9 -1: createURI -15 -1: unreserveMemory -52 -1: (Lsun/reflect/MethodInfo;)Ljava/lang/reflect/Method; -66 -1: (Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; -51 -1: (Ljava/lang/reflect/Constructor;)Ljava/lang/String; -23 -1: inheritableThreadLocals -63 -1: ()Ljava/util/Map; -16 -1: setContentLength -16 -1: LOWERCASE_LETTER -4 -1: size -25 -1: java.launcher.opt.hotspot -19 -1: buildAnnotatedTypes -26 -1: JAVAFX_LAUNCHER_CLASS_NAME -11 -1: getAliasMap -19 -1: CheckedNavigableSet -15 -1: getAbsolutePath -11 -1: doubleValue -6 -1: utf_32 -22 -1: IMPLEMENTATION_VERSION -3 -1: ne1 -11 -1: contentType -8 -1: canWrite -11 -1: Object.java -14 -1: America/Denver -8 -1: fileName -13 -1: allPermDomain -27 -1: ()Ljava/util/Iterator; -31 -1: (Lsun/reflect/MethodAccessor;)V -11 -1: asTypeCache -13 -1: lineSeparator -9 -1: JarLoader -15 -1: replacementNode -18 -1: getContentEncoding -12 -1: invoke_LLL_L -22 -1: ()Ljava/util/TimeZone; -17 -1: Reference Handler -33 -1: java/lang/invoke/MethodHandleImpl -47 -1: ()Ljava/util/concurrent/ConcurrentHashMap$Node; -12 -1: invoke_LLL_V -8 -1: form << -23 -1: (Ljava/lang/Object;JJ)J -15 -1: isHighSurrogate -31 -1: (Ljava/util/Collection<+TV;>;)Z -36 -1: ([Ljava/util/HashMap$Node;)V -23 -1: (Ljava/lang/Object;JJ)V -12 -1: utf_32be_bom -40 -1: sun/util/calendar/LocalGregorianCalendar -27 -1: [Ljava/security/CodeSigner; -15 -1: afterNodeAccess -13 -1: nextThreadNum -18 -1: INTERNED_ARGUMENTS -11 -1: getMillisOf -18 -1: offsetByCodePoints -11 -1: writeObject -48 -1: (Ljava/util/Locale$Category;Ljava/util/Locale;)V -3 -1: nfe -41 -1: (Ljava/util/Properties;Ljava/io/Reader;)V -50 -1: (Ljava/util/concurrent/CountedCompleter;[C[CIIII)V -15 -1: implFlushBuffer -33 -1: (I)[Ljava/lang/invoke/MemberName; -12 -1: Unicode.java -17 -1: DMH.invokeVirtual -5 -1: setup -51 -1: (Ljava/util/Collection;[Ljava/lang/reflect/Field;)V -3 -1: EST -7 -1: TREEBIN -7 -1: getFile -10 -1: isLeapYear -18 -1: LinkedHashIterator -14 -1: DISPLAY_SCRIPT -25 -1: privateGetDeclaredMethods -68 -1: (Ljava/util/function/Function;Ljava/lang/Object;Ljava/lang/Object;)I -22 -1: ()Ljava/util/Iterator; -21 -1: sun/management/Sensor -15 -1: getAvailableIDs -51 -1: Lsun/util/PreHashedMap; -8 -1: elot_928 -6 -1: LATIN0 -45 -1: ([Ljava/lang/Object;II[Ljava/lang/Object;II)V -10 -1: [Unlocked] -15 -1: internArguments -6 -1: LATIN9 -33 -1: (II)Ljava/lang/invoke/MethodType; -12 -1: Version.java -17 -1: setConnectTimeout -75 -1: (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; -13 -1: highSurrogate -12 -1: Africa/Cairo -21 -1: synchronizedSortedMap -21 -1: in java.library.path -45 -1: sun/reflect/generics/tree/FormalTypeParameter -24 -1: UncaughtExceptionHandler -14 -1: previousOrSame -24 -1: java/security/Permission -9 -1: x-ISCII91 -5 -1: L_HEX -35 -1: java/lang/invoke/DirectMethodHandle -35 -1: java/util/ArrayDeque$DeqSpliterator -14 -1: java/util/List -11 -1: toLowerCase -24 -1: java/nio/charset/Charset -10 -1: MIN_NORMAL -110 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -13 -1: regionMatches -17 -1: newMethodAccessor -26 -1: (Ljava/net/InetAddress;B)V -68 -1: (Ljava/util/zip/ZipFile;Ljava/lang/String;J)Ljava/util/zip/ZipEntry; -22 -1: ()Ljava/io/FileSystem; -19 -1: primitiveSimpleName -5 -1: MOVED -9 -1: STATE_RED -13 -1: linkToSpecial -19 -1: AnnotationType.java -20 -1: (II)Ljava/util/List; -252 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToDoubleTask;Ljava/util/function/ToDoubleBiFunction;DLjava/util/function/DoubleBinaryOperator;)V -12 -1: callSiteForm -22 -1: isSiblingBindingBefore -62 -1: ([TT;IITT;Ljava/util/Comparator<-TT;>;)I -15 -1: buildEmptyNames -11 -1: Thread.java -30 -1: Ljava/lang/ref/Reference; -35 -1: sun/reflect/MethodAccessorGenerator -152 -1: (Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector; -5 -1: total -242 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToLongTask;Ljava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)V -27 -1: javax/security/auth/Subject -43 -1: JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER -17 -1: getSignerCertPath -15 -1: registerNatives -21 -1: sun/reflect/FieldInfo -54 -1: (Ljava/nio/charset/Charset;Lsun/nio/cs/ISO_8859_1$1;)V -17 -1: unwrapWithNoPrims -17 -1: instanceof Long: -20 -1: hasRealParameterData -23 -1: ()Ljava/time/LocalTime; -14 -1: getAnnotations -8 -1: optimize -7 -1: setChar -11 -1: OFFSET_MASK -4 -1: TYPE -177 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/BiFunction;Ljava/util/concurrent/atomic/AtomicReference;)V -18 -1: removeShutdownHook -27 -1: ()Ljava/security/Principal; -29 -1: JAVAFX_APPLICATION_CLASS_NAME -6 -1: digits -37 -1: [Ljava/lang/reflect/Constructor; -45 -1: ()Ljava/lang/Thread$UncaughtExceptionHandler; -7 -1: tryLock -19 -1: java/net/Proxy$Type -21 -1: setJavaSecurityAccess -13 -1: tieBreakOrder -3 -1: no -16 -1: Australia/Sydney -13 -1: DAY_IN_MILLIS -19 -1: ()Ljava/nio/Buffer; -12 -1: Integer.java -14 -1: isBmpCodePoint -6 -1: daemon -23 -1: Lsun/misc/JavaIOAccess; -106 -1: (JLjava/util/function/BiFunction<-TK;-TV;+TU;>;Ljava/util/function/Consumer<-TU;>;)V -10 -1: getFloatAt -15 -1: content/unknown -52 -1: ()Ljava/util/Enumeration<+Ljava/util/zip/ZipEntry;>; -123 -1: (Ljava/lang/Class<*>;Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z -4 -1: nsme -12 -1: prefixLength -9 -1: flagsMods -95 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MemberName; -62 -1: (Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/LambdaForm; -16 -1: Illegal mode: 0x -24 -1: java/io/FileOutputStream -41 -1: [Pp][Ee][Rr][Mm][Ii][Ss][Ss][Ii][Oo][Nn]= -24 -1: java/security/CodeSource -16 -1: DUMP_CLASS_FILES -25 -1: ([C)Ljava/nio/CharBuffer; -12 -1: bindArgument -50 -1: Ljava/lang/ref/FinalReference; -21 -1: unmodifiableSortedMap -10 -1: jarHandler -73 -1: (Ljava/lang/Class;[Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method; -67 -1: ()Ljava/util/Map; -15 -1: threadSeqNumber -18 -1: AutoCloseable.java -9 -1: holdsLock -25 -1: (Ljava/lang/Object;JJJJ)V -7 -1: (IJII)I -15 -1: copyToLongArray -58 -1: Ljava/util/HashMap; -84 -1: (Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; -32 -1: getExecutableTypeAnnotationBytes -17 -1: streamHandlerLock -35 -1: java/lang/IndexOutOfBoundsException -15 -1: moveRootToFront -28 -1: ()Ljava/nio/file/FileSystem; -14 -1: content-length -61 -1: (Ljava/lang/invoke/CallSite;Ljava/lang/invoke/MethodHandle;)V -7 -1: csASCII -18 -1: staticIsConsistent -21 -1: sharedToGenericString -8 -1: linkLast -21 -1: isUnicodeExtensionKey -7 -1: readInt -7 -1: compile -32 -1: ()Ljava/lang/reflect/Executable; -4 -1: Big5 -20 -1: Ljava/util/Set; -18 -1: ExpiringCache.java -44 -1: (Ljava/lang/String;[BII)Ljava/lang/Class<*>; -18 -1: LinkedHashMap.java -32 -1: Ljava/lang/UnsatisfiedLinkError; -13 -1: parameterType -28 -1: (ID)Ljava/lang/StringBuffer; -15 -1: synchronizedSet -9 -1: implClose -6 -1: member -14 -1: MH_INVOKE_MODS -21 -1: forOutputStreamWriter -37 -1: Lsun/misc/JavaIOFileDescriptorAccess; -28 -1: java/lang/ProcessEnvironment -17 -1: setNormalizedYear -14 -1: isMalformed4_2 -14 -1: isMalformed4_3 -38 -1: (Ljava/lang/Object;)Ljava/lang/String; -16 -1: getJavaAWTAccess -12 -1: isPrivileged -30 -1: java/util/Collections$EmptyMap -17 -1: LinkedKeyIterator -7 -1: vmcount -27 -1: java/lang/ref/WeakReference -5 -1: march -13 -1: addOldMapping -58 -1: (Ljava/lang/Object;Ljava/lang/Runnable;)Lsun/misc/Cleaner; -56 -1: (ILjava/lang/String;)[Ljava/lang/invoke/LambdaForm$Name; -65 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToLongTask -55 -1: (Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object; -17 -1: getEnclosingClass -35 -1: (I)Lsun/util/calendar/BaseCalendar; -13 -1: binarySearch0 -25 -1: ([J)Ljava/nio/LongBuffer; -19 -1: java/util/Map$Entry -22 -1: java/util/HashMap$Node -26 -1: sun/reflect/MethodAccessor -8 -1: LASTYEAR -7 -1: disable -36 -1: sun/launcher/LauncherHelper$FXHelper -6 -1: toPath -10 -1: shortValue -6 -1: remove -59 -1: ([Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process; -55 -1: java/util/concurrent/ConcurrentHashMap$ValueSpliterator -64 -1: (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/Collection; -15 -1: asPrimitiveType -16 -1: PrintStream.java -10 -1: image/jpeg -22 -1: specificToStringHeader -7 -1: class " -38 -1: java/util/Collections$CheckedSortedMap -19 -1: SUPPRESSED_SENTINEL -16 -1: getEnumConstants -54 -1: (ILjava/lang/CharSequence;II)Ljava/lang/StringBuilder; -36 -1: Ljava/lang/Class; -13 -1: toThreadState -38 -1: (Ljava/lang/Class;)Ljava/lang/Package; -24 -1: (C)Ljava/lang/Character; -19 -1: UNTREEIFY_THRESHOLD -4 -1: NCPU -23 -1: ()Ljava/lang/Exception; -42 -1: (ITK;TV;Ljava/util/HashMap$Node;)V -15 -1: nothingToVerify -15 -1: setInitialValue -15 -1: getTimeInMillis -12 -1: getDoubleAt0 -18 -1: parameterTypeCache -86 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey; -49 -1: java/util/concurrent/ConcurrentHashMap$ValuesView -13 -1: -7 -1: exitVM. -34 -1: Ljava/lang/ClassNotFoundException; -68 -1: (Ljava/util/Map;Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; -28 -1: getCalendarDateFromFixedDate -28 -1: UnsafeFieldAccessorImpl.java -27 -1: java/lang/RuntimePermission -74 -1: Ljava/lang/Object;Ljava/lang/Comparable; -62 -1: ()Ljava/util/Iterator; -13 -1: LanguageRange -239 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToIntTask;Ljava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)V -37 -1: DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE -62 -1: (Ljava/lang/invoke/MethodType;II)Ljava/lang/invoke/MethodType; -16 -1: DMH.invokeStatic -11 -1: (TK;TV;)TV; -7 -1: ([FI)[F -14 -1: newPerfCounter -35 -1: ([JI)Ljava/util/Spliterator$OfLong; -30 -1: java/util/AbstractList$ListItr -5 -1: cp912 -5 -1: cp914 -45 -1: (Ljava/io/BufferedWriter;Ljava/lang/String;)V -6 -1: LOCNAM -8 -1: launcher -5 -1: cp915 -14 -1: standardString -26 -1: ()Ljava/lang/Thread$State; -10 -1: L_ALPHANUM -8 -1: (C[CII)I -9 -1: SEPTEMBER -20 -1: java/text/DateFormat -38 -1: Ljava/lang/CloneNotSupportedException; -5 -1: cp920 -23 -1: getConstructorSignature -16 -1: ReferenceHandler -19 -1: America/Puerto_Rico -5 -1: cp923 -10 -1: typeString -30 -1: Self-suppression not permitted -25 -1: (Ljava/io/OutputStream;)V -9 -1: implReset -12 -1: fullAddCount -34 -1: java/lang/invoke/LambdaForm$Hidden -25 -1: ()Lsun/misc/JavaIOAccess; -9 -1: Math.java -9 -1: getAndSet -7 -1: failure -14 -1: LINE_SEPARATOR -6 -1: parent -30 -1: java/lang/BootstrapMethodError -8 -1: indexMap -9 -1: ALL_KINDS -23 -1: desiredAssertionStatus0 -39 -1: (ILjava/lang/Object;)Ljava/lang/Object; -22 -1: RuntimePermission.java -21 -1: getContextClassLoader -14 -1: VARARGS_INVOKE -8 -1: zoneinfo -130 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;ILjava/lang/invoke/DirectMethodHandle$1;)V -18 -1: java/lang/Readable -11 -1: containsAll -11 -1: newPosition -57 -1: sun/reflect/InstantiationExceptionConstructorAccessorImpl -13 -1: REVERSE_ORDER -29 -1: Required array size too large -6 -1: sunday -44 -1: ()Ljava/util/Set; -10 -1: toIntExact -33 -1: ([BIILjava/nio/charset/Charset;)V -14 -1: indexOfSubList -15 -1: tryAcquireNanos -31 -1: java/lang/InvalidClassException -22 -1: SecureClassLoader.java -12 -1: proxiedHosts -7 -1: ([CII)I -11 -1: toHexString -30 -1: sun/util/calendar/ZoneInfoFile -31 -1: Ljava/util/jar/Attributes$Name; -10 -1: L_USERINFO -25 -1: (IB)Ljava/nio/ByteBuffer; -11 -1: parseDouble -7 -1: ([CII)V -13 -1: Asia/Shanghai -5 -1: [...] -57 -1: ([Ljava/lang/Class;[B)[[Ljava/lang/annotation/Annotation; -19 -1: java/nio/LongBuffer -15 -1: getCertificates -9 -1: comparing -83 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;IILjava/lang/String;[B)V -43 -1: Ljava/util/concurrent/atomic/AtomicInteger; -23 -1: toFieldDescriptorString -20 -1: Lsun/misc/MetaIndex; -37 -1: java/util/Collections$UnmodifiableSet -5 -1: (JC)V -37 -1: nanosecond timeout value out of range -26 -1: AbstractStringBuilder.java -43 -1: java/lang/invoke/DirectMethodHandle$Special -49 -1: ([Ljava/nio/file/LinkOption;)Ljava/nio/file/Path; -15 -1: currentPosition -14 -1: java/net/Proxy -13 -1: asConstructor -8 -1: userInfo -14 -1: parseClassPath -15 -1: legacyMergeSort -34 -1: java/security/UnresolvedPermission -97 -1: Lsun/util/locale/LocaleObjectCache; -9 -1: freeEntry -19 -1: delimiterCodePoints -34 -1: Should be non-empty if initialized -23 -1: (I)Ljava/lang/Class<*>; -11 -1: Reader.java -26 -1: checkClassLoaderPermission -27 -1: java/nio/DirectShortBufferS -95 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; -27 -1: java/nio/DirectShortBufferU -20 -1: ()[Ljava/lang/Class; -56 -1: ()[Ljava/util/concurrent/ConcurrentHashMap$Node; -19 -1: sun/nio/cs/UTF_16BE -24 -1: java/util/AbstractList$1 -10 -1: ([CIIIII)V -60 -1: Ljava/lang/Object;Ljava/lang/Comparable; -37 -1: (Ljava/lang/invoke/LambdaForm$Name;)S -9 -1: putDouble -52 -1: ([Ljava/security/CodeSource;)Ljava/util/Enumeration; -37 -1: (Ljava/lang/invoke/LambdaForm$Name;)Z -22 -1: ()[Ljava/lang/Package; -41 -1: java/lang/CharSequence$1CodePointIterator -13 -1: auditSubclass -24 -1: Ljava/util/jar/JarEntry; -20 -1: findMethodHandleType -15 -1: MAX_BUFFER_SIZE -19 -1: FilePermission.java -18 -1: WrappedPrintStream -36 -1: (D)Ljava/lang/AbstractStringBuilder; -11 -1: unfinalized -10 -1: getFileURL -37 -1: (Ljava/io/FileFilter;)[Ljava/io/File; -54 -1: (Ljava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult; -7 -1: ([ZI)[Z -64 -1: (Ljava/security/CodeSource;)Ljava/security/PermissionCollection; -6 -1: PUBLIC -83 -1: (Ljava/util/jar/JarFile;Ljava/net/URL;Ljava/lang/String;)Ljava/security/CodeSource; -17 -1: lockInterruptibly -67 -1: ([Ljava/util/Hashtable$Entry;Ljava/lang/Object;Ljava/lang/Object;)V -42 -1: java/util/ArraysParallelSortHelpers$FJChar -21 -1: defaultCharBufferSize -14 -1: unalignedKnown -23 -1: ()Ljava/net/Proxy$Type; -4 -1: TZDB -14 -1: CharacterCache -13 -1: lengthOfMonth -13 -1: hasExtensions -23 -1: Prefix string too short -15 -1: Executable.java -10 -1: forEachKey -6 -1: getEra -13 -1: appendEncoded -21 -1: java/util/AbstractMap -10 -1: access$100 -10 -1: access$102 -30 -1: javafx.application.Application -46 -1: (Ljava/lang/Thread$UncaughtExceptionHandler;)V -43 -1: Ljava/lang/invoke/LambdaForm$NamedFunction; -101 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)Ljava/lang/reflect/Field; -9 -1: WILD_CHAR -21 -1: SynchronizedSortedSet -28 -1: (Ljava/util/Collection<*>;)Z -29 -1: (I[C)Ljava/lang/StringBuffer; -65 -1: (Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method; -7 -1: putByte -6 -1: H_MARK -49 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/Object; -98 -1: ([Ljava/lang/ClassValue$Entry<*>;ILjava/lang/ClassValue$Entry<*>;Z)Ljava/lang/ClassValue$Entry<*>; -23 -1: array is not of length -52 -1: (Ljava/util/List;TT;TT;)Z -41 -1: Ljava/util/Collections$EmptyListIterator; -8 -1: -11 -1: updateCheck -29 -1: getBootClassPathEntryForClass -27 -1: sun/nio/cs/US_ASCII$Encoder -10 -1: bindCaller -18 -1: Ljava/util/BitSet; -10 -1: checkRange -77 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;Ljava/lang/Void;)V -7 -1: Classes -6 -1: store0 -23 -1: java/lang/Thread$Caches -25 -1: Ljava/lang/CharacterData; -7 -1: (JI[C)V -49 -1: (Ljava/util/LinkedList;Ljava/util/LinkedList$1;)V -16 -1: getGcInfoBuilder -12 -1: counterCells -14 -1: memoryLimitSet -7 -1: , nojit -9 -1: sharpsMap -7 -1: october -13 -1: isProxiedHost -9 -1: rawOffset -18 -1: toJavaFormatString -19 -1: sun.boot.class.path -60 -1: (ILjava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder; -11 -1: spliterator -13 -1: contentLength -18 -1: unixTimeToFileTime -31 -1: Lsun/reflect/LangReflectAccess; -16 -1: while Java has -79 -1: (JLjava/util/function/ToIntBiFunction;ILjava/util/function/IntBinaryOperator;)I -12 -1: timeEndOfDay -17 -1: getCustomTimeZone -25 -1: Ljava/lang/ref/Reference; -20 -1: ()Ljava/util/Locale; -64 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;Z)V -13 -1: MAX_JVM_ARITY -72 -1: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/invoke/MethodType; -11 -1: AsLIFOQueue -84 -1: (Ljava/util/List;Ljava/lang/Object;)Ljava/util/List; -12 -1: mappingCount -29 -1: (Ljava/io/FileOutputStream;)V -50 -1: (Ljava/util/List<-TT;>;TT;)V -23 -1: Category cannot be NULL -10 -1: normalized -5 -1: CLASS -28 -1: (IZ)Ljava/lang/StringBuffer; -18 -1: java/lang/System$1 -18 -1: java/lang/System$2 -9 -1: getResult -44 -1: ()Ljava/util/Collection; -8 -1: isNative -59 -1: Ljava/lang/Number;Ljava/lang/Comparable; -24 -1: [Ljava/lang/ThreadGroup; -24 -1: (B)Ljava/nio/ByteBuffer; -4 -1: READ -44 -1: (Ljava/io/FilePermission;)Ljava/lang/String; -93 -1: Ljava/util/Collections$SynchronizedCollection;Ljava/util/Set; -12 -1: compileClass -12 -1: isProxyClass -20 -1: isSystemDomainLoader -74 -1: (Ljava/util/List;Ljava/util/Comparator<-TT;>;)V -7 -1: getMask -72 -1: (Ljava/lang/ClassLoader;Ljava/lang/SecurityManager;Ljava/lang/String;I)V -20 -1: removeLastOccurrence -64 -1: (Ljava/lang/reflect/Field;)Ljava/lang/invoke/DirectMethodHandle; -57 -1: ()Ljava/util/Map;>; -11 -1: parkBlocker -40 -1: (Lsun/misc/JarIndex;Ljava/lang/String;)V -33 -1: [Ljava/security/ProtectionDomain; -14 -1: setContentType -14 -1: getEnumeration -18 -1: ProtectionDomain -76 -1: (Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar$Date; -16 -1: setRequestMethod -52 -1: (Ljava/util/List;Ljava/lang/Object;)Ljava/util/List; -32 -1: Lsun/util/calendar/BaseCalendar; -52 -1: (Ljava/net/URL;Ljava/lang/String;)Ljava/lang/String; -5 -1: .:@[] -7 -1: addLast -21 -1: AnnotatedElement.java -10 -1: defaultVal -16 -1: getCanonicalPath -17 -1: protection_domain -9 -1: strictfp -19 -1: sun/nio/cs/UTF_16LE -9 -1: readBytes -18 -1: removeStaleEntries -46 -1: java/util/Collections$UnmodifiableNavigableSet -5 -1: cpath -14 -1: COPY_THRESHOLD -8 -1: permsMap -8 -1: japanese -33 -1: java/nio/charset/StandardCharsets -47 -1: Lsun/reflect/DelegatingConstructorAccessorImpl; -19 -1: NF_checkGenericType -40 -1: java/util/Collections$UnmodifiableList$1 -4 -1: TERM -48 -1: The following can be used with stack and domain: -27 -1: ([BII)Ljava/nio/ByteBuffer; -40 -1: Ljava/util/Vector;>; -5 -1: digit -7 -1: isFinal -39 -1: (Ljava/lang/String;Ljava/lang/String;)I -26 -1: memberDeclaringClassOrNull -10 -1: ([CI[BII)I -38 -1: (Ljava/lang/Class;I)Ljava/lang/Object; -15 -1: isValidProtocol -17 -1: (this Collection) -11 -1: getTreeNode -16 -1: ThreadLocal.java -23 -1: java/nio/HeapLongBuffer -39 -1: (Ljava/lang/String;Ljava/lang/String;)V -12 -1: getNextEntry -39 -1: (Ljava/lang/String;Ljava/lang/String;)Z -28 -1: (C)Lsun/invoke/util/Wrapper; -9 -1: readFloat -21 -1: overrideFieldAccessor -16 -1: fillInStackTrace -16 -1: getDeclaredField -5 -1: deflt -8 -1: nextChar -10 -1: primCounts -22 -1: getAnnotatedInterfaces -26 -1: ()Ljava/util/zip/Inflater; -73 -1: (JLjava/util/function/BiFunction<-TK;-TV;+TU;>;)TU; -16 -1: traceMethodCalls -10 -1: sun.nio.cs -7 -1: marshal -9 -1: ftypeKind -77 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class;)Ljava/lang/invoke/MemberName; -11 -1: sun/misc/VM -14 -1: GuardWithCatch -40 -1: (Ljava/lang/Object;)Ljava/util/Iterator; -13 -1: subtractExact -42 -1: (Ljava/lang/Object;ILjava/lang/Object;II)V -10 -1: isInfinite -18 -1: sun.util.calendar. -14 -1: java/lang/Math -16 -1: java/lang/String -10 -1: encodePath -14 -1: compactAndTrim -11 -1: getVariants -4 -1: from -47 -1: (Ljava/lang/ThreadLocal<*>;Ljava/lang/Object;)V -35 -1: serializeAgentPropertiesToByteArray -16 -1: computeIfPresent -9 -1: EMPTY_MAP -28 -1: java/lang/InstantiationError -68 -1: (Ljava/util/Comparator;Ljava/util/Comparator;)Ljava/util/Comparator; -14 -1: getDisplayName -14 -1: limitedContext -23 -1: usagetracker.properties -52 -1: java/util/concurrent/locks/ReentrantLock$NonfairSync -7 -1: public -17 -1: srcBegin > srcEnd -48 -1: (ILjava/util/List;)Ljava/lang/invoke/MethodType; -21 -1: java/lang/ThreadDeath -9 -1: gregorian -111 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/HashMap$TreeNode; -52 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;III)V -12 -1: generateFile -20 -1: appendParameterTypes -22 -1: sun/misc/FileURLMapper -13 -1: defaultDomain -25 -1: (I)Ljava/time/ZoneOffset; -21 -1: getBooleanAttributes0 -39 -1: (Ljava/lang/String;)Lsun/misc/Resource; -43 -1: Ljava/lang/Thread$UncaughtExceptionHandler; -23 -1: getTypeAnnotationBytes0 -8 -1: ELOT_928 -32 -1: sun/nio/cs/FastCharsetProvider$1 -34 -1: Ljava/nio/BufferOverflowException; -14 -1: AppClassLoader -10 -1: protected -12 -1: isAnnotation -16 -1: PerfCounter.java -51 -1: Ljava/util/Map; -160 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -11 -1: setLeapYear -16 -1: parseContextSpec -16 -1: setFieldAccessor -8 -1: writeInt -16 -1: java/lang/Number -33 -1: java/util/AbstractMap$SimpleEntry -9 -1: nextTable -8 -1: getQuery -14 -1: putOrderedLong -93 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V -52 -1: (Ljava/lang/String;)Lsun/reflect/generics/tree/Tree; -85 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V -9 -1: singleton -9 -1: destroyed -15 -1: iso_8859-2:1987 -12 -1: comparingInt -29 -1: [Ljava/lang/OutOfMemoryError; -39 -1: (Ljava/lang/String;Ljava/lang/Object;)V -27 -1: ([Ljava/util/Enumeration;)V -36 -1: Ljava/nio/charset/CodingErrorAction; -16 -1: getCanonicalName -41 -1: (Ljava/nio/LongBuffer;)Ljava/util/BitSet; -15 -1: DISPLAY_COUNTRY -32 -1: getFunctionalInterfaceMethodName -66 -1: (Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V -24 -1: getUnresolvedPermissions -66 -1: ([Ljava/lang/ClassValue$Entry<*>;I)Ljava/lang/ClassValue$Entry<*>; -41 -1: ()Lsun/reflect/annotation/AnnotationType; -7 -1: afIndex -7 -1: csascii -20 -1: ()Ljava/util/Vector; -16 -1: EntrySpliterator -53 -1: (Ljava/lang/Throwable;I)Ljava/lang/StackTraceElement; -81 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle; -20 -1: classAssertionStatus -7 -1: EXECUTE -21 -1: ()Ljava/lang/Runtime; -6 -1: cesu-8 -7 -1: offset -23 -1: Ljava/lang/SafeVarargs; -34 -1: (Ljava/util/LinkedHashMap$Entry;)V -8 -1: entryFor -8 -1: getCache -46 -1: (Ljava/lang/Object;I)Ljava/lang/reflect/Field; -4 -1: skip -8 -1: (II[CI)V -4 -1: vart -12 -1: InnerClasses -68 -1: (Ljava/util/Map;Ljava/lang/Class;[Ljava/lang/String;)Ljava/util/Map; -19 -1: currentClassLoader0 -34 -1: getDefaultUncaughtExceptionHandler -11 -1: String.java -117 -1: (Ljava/lang/ThreadLocal<*>;ILjava/lang/ThreadLocal$ThreadLocalMap$Entry;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; -7 -1: january -31 -1: (ILjava/lang/String;IIIIIIIII)V -24 -1: Lsun/misc/JavaAWTAccess; -5 -1: .path -15 -1: [Ljava/io/File; -11 -1: Writer.java -8 -1: , Size: -159 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/Function;Ljava/util/function/Consumer;)V -32 -1: java/lang/invoke/LambdaForm$Name -51 -1: (Ljava/util/ArrayList;Ljava/util/AbstractList;III)V -7 -1: getZone -14 -1: JIS_X0212-1990 -21 -1: (Ljava/util/Set<*>;)Z -149 -1: (Lsun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter;Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object; -21 -1: Illegal Load factor: -35 -1: ()Ljava/lang/invoke/MethodTypeForm; -22 -1: ([Z)Ljava/lang/String; -7 -1: setName -48 -1: (TT;Ljava/lang/String;)TT; -9 -1: INTERFACE -22 -1: ARRAY_CHAR_INDEX_SCALE -19 -1: java/nio/ByteBuffer -23 -1: Ljava/io/ExpiringCache; -7 -1: streams -44 -1: java/lang/invoke/DirectMethodHandle$Accessor -36 -1: ([Ljava/security/ProtectionDomain;)V -16 -1: afterNodeRemoval -9 -1: prevIndex -49 -1: java/util/concurrent/ConcurrentHashMap$KeySetView -22 -1: getEnumConstantsShared -17 -1: java/lang/Integer -12 -1: getRawOffset -36 -1: ()Ljava/nio/file/attribute/FileTime; -7 -1: offsets -10 -1: ] throw => -3 -1: [[B -10 -1: hostsEqual -18 -1: compareComparables -35 -1: sun/reflect/ConstructorAccessorImpl -8 -1: december -36 -1: Invalid binary time-zone data: TZDB: -24 -1: synchronizedNavigableMap -72 -1: sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter -19 -1: parseCustomTimeZone -88 -1: (Ljava/lang/Class<*>;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; -9 -1: findClass -6 -1: OBJECT -3 -1: GBK -110 -1: (JLjava/util/function/ToLongFunction;>;JLjava/util/function/LongBinaryOperator;)J -6 -1: UTF_16 -17 -1: -13 -1: lookupCharset -28 -1: ConstructorAccessorImpl.java -62 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask -30 -1: Ljava/lang/ClassCastException; -56 -1: ()Ljava/util/Spliterator;>; -11 -1: invokerType -23 -1: java/lang/StringBuilder -12 -1: deleteCharAt -11 -1: CR_OVERFLOW -14 -1: toExternalForm -3 -1: out -34 -1: Ljava/net/URLStreamHandlerFactory; -15 -1: encodeArrayLoop -30 -1: ()Ljava/util/Enumeration; -27 -1: java/io/SyncFailedException -10 -1: checkedSet -16 -1: checkedSortedSet -22 -1: java/util/zip/ZipEntry -43 -1: java/util/LinkedHashMap$LinkedValueIterator -22 -1: UnmodifiableCollection -32 -1: java/nio/ByteBufferAsCharBufferB -11 -1: blockerLock -27 -1: checkExtensionsDependencies -11 -1: fromIndex: -32 -1: java/nio/ByteBufferAsCharBufferL -6 -1: UTF_32 -30 -1: java/util/Hashtable$Enumerator -92 -1: (Ljava/util/Map<+TK;+TV;>;)Ljava/util/Map; -4 -1: tail -5 -1: (BB)C -16 -1: isValidSignature -9 -1: addMillis -9 -1: peekFirst -86 -1: (Ljava/util/Set;Ljava/lang/Class;)Ljava/util/Set; -5 -1: (BB)I -15 -1: jvmMicroVersion -28 -1: [Ljava/util/Hashtable$Entry; -15 -1: iso_8859-5:1988 -14 -1: HOUR_IN_MILLIS -67 -1: (Ljava/util/PrimitiveIterator$OfInt;I)Ljava/util/Spliterator$OfInt; -5 -1: (BB)S -21 -1: UnmodifiableSortedMap -79 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap;)V -56 -1: Ljava/util/Stack; -5 -1: (BB)Z -10 -1: treeifyBin -8 -1: isOpaque -27 -1: java.launcher.ergo.message1 -27 -1: java.launcher.ergo.message2 -101 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Cloneable;Ljava/lang/Comparable; -31 -1: (Ljava/io/ObjectOutputStream;)V -3 -1: GET -13 -1: matchLocation -13 -1: WrappedMember -63 -1: NoSuchMethodException:\n could not find proper constructor for -14 -1: gssloginconfig -70 -1: (Ljava/util/LinkedList$Node;TE;Ljava/util/LinkedList$Node;)V -57 -1: (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; -11 -1: toByteArray -49 -1: java/util/ArraysParallelSortHelpers$FJByte$Sorter -13 -1: no protocol: -940 -1: aaaarababkaeaveafafrakakaamamhanargararaasasmavavaayaymazazebabakbebelbgbulbhbihbibisbmbambnbenbobodbrbrebsboscacatcechechchacocoscrcrecscescuchucvchvcycymdadandedeudvdivdzdzoeeeweelellenengeoepoesspaetesteueusfafasfffulfifinfjfijfofaofrfrafyfrygaglegdglaglglggngrngugujgvglvhahauhehebhihinhohmohrhrvhthathuhunhyhyehzheriainaidindieileigiboiiiiiikipkinindioidoisislititaiuikuiwhebjajpnjiyidjvjavkakatkgkonkikikkjkuakkkazklkalkmkhmknkankokorkrkaukskaskukurkvkomkwcorkykirlalatlbltzlgluglilimlnlinlolaoltlitlulublvlavmgmlgmhmahmimrimkmkdmlmalmnmonmomolmrmarmsmsamtmltmymyananaunbnobndndenenepngndonlnldnnnnononornrnblnvnavnynyaocociojojiomormororiososspapanpipliplpolpspusptporququermrohrnrunroronrurusrwkinsasanscsrdsdsndsesmesgsagsisinskslkslslvsmsmosnsnasosomsqsqisrsrpsssswstsotsusunsvsweswswatatamteteltgtgkththatitirtktuktltgltntsntotontrturtstsotttattwtwitytahuguigukukrururduzuzbvevenvivievovolwawlnwowolxhxhoyiyidyoyorzazhazhzhozuzul -42 -1: java/util/LinkedHashMap$LinkedHashIterator -39 -1: java/util/ArrayDeque$DescendingIterator -15 -1: MODIFIER_LETTER -21 -1: (Lsun/misc/Cleaner;)Z -12 -1: PACKAGE_NAME -14 -1: getMappedValue -10 -1: interrupt0 -8 -1: LF_LIMIT -17 -1: getDeclaringClass -42 -1: (ZILjava/lang/String;)Ljava/lang/Class<*>; -57 -1: (Ljava/lang/management/ThreadInfo;[Ljava/lang/Object;[I)V -15 -1: java/nio/Bits$1 -61 -1: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class; -28 -1: java/lang/ref/ReferenceQueue -33 -1: [Ljava/security/cert/Certificate; -44 -1: (Ljava/util/Hashtable;I)Ljava/util/Iterator; -24 -1: java/security/CodeSigner -19 -1: Non-positive length -24 -1: [Ljava/util/Enumeration; -38 -1: ()Ljava/security/PermissionCollection; -16 -1: checkGenericType -56 -1: java/util/concurrent/ConcurrentHashMap$ReduceEntriesTask -7 -1: getYear -5 -1: atime -19 -1: Ljava/util/HashMap; -125 -1: (JLjava/util/function/Function;+TU;>;Ljava/util/function/Consumer<-TU;>;)V -22 -1: STOP_THREAD_PERMISSION -46 -1: (Ljava/util/Enumeration;)Ljava/util/ArrayList; -16 -1: getPathSeparator -10 -1: getMembers -8 -1: getIntAt -26 -1: java/io/File$TempDirectory -48 -1: java/lang/invoke/MethodHandleImpl$GuardWithCatch -25 -1: CaseInsensitiveComparator -8 -1: pollLast -21 -1: GET_POLICY_PERMISSION -23 -1: uninitialized call site -75 -1: (Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator; -9 -1: directory -51 -1: (JLjava/util/function/BiFunction<-TV;-TV;+TV;>;)TV; -41 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;)V -42 -1: (Ljava/lang/Throwable;Ljava/lang/String;)V -26 -1: (FLjava/lang/Appendable;)V -5 -1: stop0 -9 -1: substring -64 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V -5 -1: (JD)V -9 -1: getShortB -10 -1: nextOrSame -24 -1: [ interpretWithArguments -6 -1: GB2312 -32 -1: java/nio/BufferOverflowException -23 -1: sun/nio/cs/ArrayEncoder -4 -1: tanh -9 -1: getShortL -55 -1: (JLjava/util/function/BiFunction;)Ljava/util/Map$Entry; -10 -1: getMessage -12 -1: findTreeNode -38 -1: DIRECTIONALITY_COMMON_NUMBER_SEPARATOR -23 -1: [Ljava/lang/Comparable; -17 -1: getCallSiteTarget -55 -1: (Ljava/nio/ByteBuffer;II)Ljava/nio/charset/CoderResult; -19 -1: java/util/ArrayList -17 -1: java/io/DataInput -13 -1: getPrincipals -52 -1: (TE;)Ljava/util/Iterator; -44 -1: sun/reflect/generics/tree/ClassTypeSignature -6 -1: loaded -20 -1: ()Ljava/lang/Object; -36 -1: Ljava/util/concurrent/ConcurrentMap; -13 -1: classValueMap -33 -1: java/lang/SystemClassLoaderAction -6 -1: loader -31 -1: java/lang/annotation/Annotation -5 -1: colon -11 -1: Vector.java -24 -1: CharacterDataLatin1.java -12 -1: setUseCaches -22 -1: getTypeAnnotationBytes -9 -1: readShort -24 -1: longPrimitiveReturnCount -5 -1: get16 -34 -1: setDefaultUncaughtExceptionHandler -17 -1: cachedInputStream -29 -1: java/util/LinkedHashMap$Entry -17 -1: java/lang/Boolean -50 -1: ()[Lsun/reflect/generics/tree/FormalTypeParameter; -14 -1: AnnotationData -21 -1: Ljava/net/Proxy$Type; -13 -1: invokeVirtual -14 -1: Parameter.java -21 -1: getDayOfWeekDateAfter -92 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -56 -1: (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -46 -1: sun/util/locale/provider/LocaleProviderAdapter -29 -1: Ljava/lang/StackTraceElement; -47 -1: (TK;Ljava/util/function/Function<-TK;+TV;>;)TV; -32 -1: enableContextClassLoaderOverride -68 -1: (Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder; -51 -1: Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -9 -1: addAndGet -5 -1: store -7 -1: ([JII)V -15 -1: signatureReturn -18 -1: NF_reinvokerTarget -22 -1: ()Ljava/nio/file/Path; -25 -1: (C)Ljava/lang/Appendable; -7 -1: expires -18 -1: initializeInvokers -19 -1: application/java-vm -13 -1: stopOrSuspend -13 -1: rawOffsetDiff -6 -1: (JJZ)V -9 -1: findValue -5 -1: get32 -10 -1: asSubclass -6 -1: forJRE -3 -1: GMT -7 -1: delete0 -69 -1: ([Ljava/security/cert/Certificate;[Ljava/security/cert/Certificate;)Z -75 -1: (Ljava/util/LinkedList$Node;Ljava/lang/Object;Ljava/util/LinkedList$Node;)V -6 -1: setEra -24 -1: ()Ljava/util/Comparator; -10 -1: access$200 -10 -1: access$202 -20 -1: retrieveDisplayNames -3 -1: pae -24 -1: java/lang/Byte$ByteCache -7 -1: VM.java -9 -1: TRANSIENT -6 -1: setErr -16 -1: jdkUpdateVersion -10 -1: isResolved -35 -1: sun/misc/JavaIOFileDescriptorAccess -4 -1: char -13 -1: Readable.java -19 -1: UnixFileSystem.java -43 -1: (Ljava/lang/ThreadLocal;)Ljava/lang/Object; -40 -1: (Ljava/lang/String;[Ljava/lang/String;)V -7 -1: profile -11 -1: , version: -25 -1: PermissionCollection.java -13 -1: setNormalized -10 -1: access$210 -24 -1: (Ljava/lang/String;IJZ)J -19 -1: isAnnotationPresent -85 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; -19 -1: DMH.invokeInterface -157 -1: Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/Collection;Ljava/io/Serializable; -94 -1: Ljava/util/Collections$UnmodifiableCollection;Ljava/util/List; -41 -1: java/lang/StringIndexOutOfBoundsException -29 -1: java/net/UnknownHostException -11 -1: (BBBBBBBB)J -4 -1: iioe -12 -1: (TK;TV;Z)TV; -5 -1: ERROR -31 -1: (Ljava/io/File;Ljava/io/File;)I -32 -1: [Ljava/lang/invoke/MethodHandle; -27 -1: lambda$comparing$77a9974f$1 -13 -1: toLowerCaseEx -61 -1: (Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;)V -66 -1: (ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/HashMap$TreeNode; -43 -1: java/util/concurrent/ConcurrentHashMap$Node -23 -1: latestUserDefinedLoader -24 -1: buildAnnotatedSuperclass -19 -1: compareToIgnoreCase -31 -1: (Ljava/io/File;Ljava/io/File;)Z -40 -1: (I[C)[Ljava/lang/invoke/LambdaForm$Name; -16 -1: ROTATE_THRESHOLD -18 -1: getClassAtIfLoaded -37 -1: java/lang/IllegalThreadStateException -5 -1: get64 -12 -1: writeReplace -14 -1: DAYS_PER_CYCLE -4 -1: _get -6 -1: nChars -26 -1: ()Ljava/net/SocketAddress; -27 -1: setUncaughtExceptionHandler -6 -1: jzfile -42 -1: All subclasses should override this method -3 2: Foo -56 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -136 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT; -3 -1: pdt -44 -1: sun/util/locale/LocaleObjectCache$CacheEntry -20 -1: java/util/Comparator -9 -1: suspended -11 -1: removeEntry -10 -1: SPACE_FREE -12 -1: processQueue -9 -1: java.home -5 -1: valid -23 -1: printEnclosedStackTrace -4 -1: push -5 -1: guard -23 -1: javaNetHttpCookieAccess -36 -1: (Ljava/security/cert/Certificate;)[B -9 -1: isWrapped -12 -1: CharIterator -26 -1: sun.io.useCanonPrefixCache -42 -1: (Lsun/misc/Cleaner;Ljava/lang/Throwable;)V -7 -1: prepare -8 -1: parseInt -13 -1: Invokers.java -63 -1: (Ljava/net/URLClassLoader;)Ljava/security/AccessControlContext; -18 -1: defaultWriteObject -5 -1: class -15 -1: EnclosingMethod -23 -1: ([BI)Ljava/lang/String; -16 -1: rangeCheckForAdd -11 -1: getTimeImpl -15 -1: arrayIndexScale -5 -1: scalb -5 -1: scale -45 -1: (Ljava/lang/String;J)Ljava/util/zip/ZipEntry; -8 -1: ([FIIF)I -16 -1: runAllFinalizers -27 -1: ()Lsun/net/ProgressMonitor; -15 -1: MemberName.java -27 -1: [Ljava/lang/reflect/Member; -6 -1: length -14 -1: genericInvoker -8 -1: ([FIIF)V -34 -1: Ljava/nio/file/attribute/FileTime; -6 -1: number -70 -1: (Ljava/lang/StringBuilder;Ljava/lang/String;)Ljava/lang/StringBuilder; -12 -1: printLocales -38 -1: java/lang/invoke/MethodHandleStatics$1 -8 -1: private -20 -1: invalid actions mask -10 -1: not found -13 -1: parseClassSig -22 -1: getAllAvailableLocales -175 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/Function;Ljava/util/concurrent/atomic/AtomicReference;)V -8 -1: ([BII)[B -35 -1: (Ljava/util/HashMap$Node;)V -132 -1: (Ljava/lang/Thread;ILjava/lang/Object;Ljava/lang/Thread;JJJJ[Ljava/lang/StackTraceElement;[Ljava/lang/Object;[I[Ljava/lang/Object;)V -8 -1: ([BII)[C -20 -1: DECIMAL_DIGIT_NUMBER -40 -1: (Ljava/lang/String;[Ljava/lang/Object;)Z -7 -1: ([CCI)I -64 -1: (TV;)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -8 -1: aliasMap -8 -1: checkfpx -44 -1: java/util/Comparators$NaturalOrderComparator -48 -1: (Ljava/lang/ClassLoader;)Ljava/lang/ClassLoader; -12 -1: Name is null -10 -1: invoke_L_L -8 -1: URL.java -51 -1: (JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime; -25 -1: Lsun/invoke/util/Wrapper; -19 -1: LauncherHelper.java -10 -1: invoke_L_V -5 -1: index -30 -1: sun/security/x509/X509CertImpl -8 -1: addClass -46 -1: (I)Ljava/lang/invoke/LambdaForm$NamedFunction; -20 -1: refKindIsConstructor -10 -1: getFieldAt -5 -1: log10 -13 -1: GetPerfAction -15 -1: isLetterOrDigit -27 -1: hasCheckedSpecialAttributes -25 -1: MapReduceEntriesToIntTask -17 -1: probeHomeLocation -9 -1: image/png -19 -1: checkSpreadArgument -12 -1: LinkedKeySet -13 -1: removeMapping -39 -1: sun/security/util/SecurityConstants$AWT -9 -1: MAX_RADIX -28 -1: (F)Ljava/lang/StringBuilder; -11 -1: ([C[B[I[I)Z -36 -1: (Ljava/lang/Class;)Ljava/lang/Class; -32 -1: java/lang/invoke/MagicLambdaImpl -6 -1: monday -16 -1: closeClassLoader -41 -1: (Ljava/util/concurrent/locks/Condition;)I -8 -1: reversed -27 -1: sun/util/calendar/Gregorian -49 -1: (Lsun/nio/cs/FastCharsetProvider;)Ljava/util/Map; -42 -1: (Ljava/lang/String;Ljava/lang/Throwable;)V -18 -1: java/util/Calendar -8 -1: vmtarget -17 -1: TREEIFY_THRESHOLD -41 -1: (Ljava/util/concurrent/locks/Condition;)Z -9 -1: deadChild -8 -1: EntrySet -5 -1: log1p -58 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/util/HashMap;)V -9 -1: pageCount -14 -1: slotToArgTable -24 -1: toMethodDescriptorString -25 -1: ([B)Ljava/nio/ByteBuffer; -21 -1: twoToTheDoubleScaleUp -32 -1: sun/misc/URLClassPath$FileLoader -40 -1: (Ljava/util/List;Z)V -6 -1: cache1 -6 -1: cache2 -27 -1: Ljava/net/URLStreamHandler; -20 -1: Detect premature EOF -94 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)Lsun/nio/cs/StreamEncoder; -12 -1: NF_checkBase -20 -1: (Ljava/nio/Buffer;)V -45 -1: Ljava/util/Vector; -4 -1: Sync -12 -1: H_UNRESERVED -32 -1: (Ljava/util/Map;)Ljava/util/Set; -32 -1: (Ljava/util/Map$Entry;)Z -25 -1: java/util/Locale$Category -8 -1: receiver -9 -1: MAX_VALUE -4 -1: .RSA -25 -1: Ljava/net/URLClassLoader; -15 -1: Terminator.java -26 -1: (Ljava/lang/String;TV;)TV; -4 -1: null -76 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V -9 -1: checkCast -39 -1: ()Ljava/lang/AssertionStatusDirectives; -15 -1: declaredMethods -5 -1: clazz -21 -1: Retention policy: -20 -1: spreadArgElementType -9 -1: WORD_MASK -27 -1: ([IILjava/io/InputStream;)I -11 -1: getMethodAt -31 -1: (Ljava/net/URL;Ljava/net/URL;)Z -13 -1: getLocaleName -14 -1: isEnumConstant -41 -1: (Ljava/lang/String;)Ljava/nio/CharBuffer; -16 -1: newInvokeSpecial -26 -1: (Ljava/nio/ByteBuffer;IS)V -22 -1: sun/misc/JavaNioAccess -184 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/security/AccessControlContext; -96 -1: (Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; -5 -1: ([S)I -30 -1: java/security/AccessController -37 -1: sun/misc/Launcher$SharedArchiveLoader -4 -1: pack -5 -1: ([S)V -51 -1: failure before throwing exception, dump stack -10 -1: dayOfMonth -6 -1: CENSIG -28 -1: java/util/function/Predicate -26 -1: Malformed \\uxxxx encoding. -9 -1: initIndex -11 -1: invoke_LL_L -23 -1: ConcurrentWeakInternSet -14 -1: java/lang/Void -42 -1: java/lang/String$CaseInsensitiveComparator -38 -1: Ljava/lang/invoke/LambdaForm$Compiled; -34 -1: java/util/Collections$SingletonSet -142 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/invoke/CallSite; -35 -1: too many bootstrap method arguments -17 -1: maxDelimCodePoint -13 -1: previousIndex -3 -1: pop -6 -1: CENSIZ -7 -1: ([Z[Z)Z -11 -1: invoke_LL_V -3 -1: pos -33 -1: java/nio/file/WatchEvent$Modifier -3 -1: pow -12 -1: nextClearBit -15 -1: Dictionary.java -27 -1: sun/reflect/CallerSensitive -13 -1: signatureType -10 -1: dstSavings -13 -1: UnicodeLittle -16 -1: America/New_York -82 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale; -25 -1: referenceKindIsConsistent -62 -1: Ljava/nio/Buffer;Ljava/lang/Comparable; -4 -1: INTS -11 -1: LOAD_FACTOR -40 -1: sun/reflect/DelegatingMethodAccessorImpl -16 -1: accumulateAndGet -21 -1: (B)Ljava/lang/String; -6 -1: UNSAFE -13 -1: resolveOrFail -21 -1: MapReduceMappingsTask -5 -1: arity -77 -1: (Ljava/io/FileDescriptor;ZZLjava/lang/Object;)Ljava/nio/channels/FileChannel; -5 -1: value -61 -1: Ljava/util/concurrent/ConcurrentHashMap$EntrySetView; -6 -1: forJar -52 -1: Ljava/lang/ref/Reference; -21 -1: CREATE_ACC_PERMISSION -28 -1: sun/misc/NativeSignalHandler -11 -1: defineClass -5 -1: match -93 -1: (Ljava/util/zip/ZipFile;Ljava/util/zip/ZipFile$ZipFileInputStream;Ljava/util/zip/Inflater;I)V -11 -1: Double.java -30 -1: America/Argentina/Buenos_Aires -8 -1: previous -37 -1: (Ljava/io/Writer;Ljava/lang/String;)V -9 -1: Synthetic -18 -1: isVMAnonymousClass -62 -1: ([Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I -22 -1: (JI)Ljava/lang/String; -49 -1: (Ljava/lang/CharSequence;II)Ljava/io/PrintStream; -52 -1: ([Ljava/lang/Thread;)[[Ljava/lang/StackTraceElement; -12 -1: setDayOfWeek -11 -1: getManifest -30 -1: java/util/Locale$FilteringMode -54 -1: (Ljava/lang/String;)Lsun/util/calendar/CalendarSystem; -12 -1: nextHashCode -19 -1: ()Ljava/io/Console; -42 -1: AccessControlContext invoking the Combiner -19 -1: shouldBeInitialized -17 -1: invocationCounter -21 -1: IMPLEMENTATION_VENDOR -7 -1: chararr -60 -1: (Ljava/lang/String;)Ljava/util/Iterator; -11 -1: asCollector -52 -1: (ILjava/lang/CharSequence;)Ljava/lang/StringBuilder; -9 -1: exception -22 -1: newInstanceCallerCache -20 -1: nativeLibraryContext -24 -1: MODIFY_THREAD_PERMISSION -4 -1: WRAP -19 -1: Method name is null -32 -1: sun/invoke/util/ValueConversions -7 -1: APP_TAG -24 -1: (Ljava/util/Hashtable;)I -23 -1: METHOD_FORMAL_PARAMETER -18 -1: inflationThreshold -24 -1: java/io/DeleteOnExitHook -3 -1: pst -13 -1: BITS_PER_WORD -25 -1: getConstructorAnnotations -17 -1: CheckedCollection -24 -1: (Ljava/util/Hashtable;)V -7 -1: inClass -5 -1: getFD -8 -1: readLong -19 -1: aliases_ISO_8859_13 -19 -1: invokeWithArguments -19 -1: aliases_ISO_8859_15 -42 -1: ()Ljava/util/concurrent/ConcurrentHashMap; -8 -1: expandTo -23 -1: java/text/MessageFormat -8 -1: classID0 -11 -1: replaceWith -21 -1: Invalid port number : -65 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V -19 -1: isGregorianLeapYear -16 -1: asSpreaderChecks -11 -1: withInitial -10 -1: X-UTF-32BE -57 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V -12 -1: wrong type: -57 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z -17 -1: sun/misc/Resource -14 -1: getReadTimeout -8 -1: safeTrim -38 -1: DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING -14 -1: isElementIndex -23 -1: FilterOutputStream.java -6 -1: (IJI)V -3 -1: put -57 -1: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; -43 -1: Expecting an absolute path of the library: -8 -1: checkRef -53 -1: (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; -74 -1: (Ljava/lang/Class<*>;[Ljava/lang/reflect/Field;)[Ljava/lang/reflect/Field; -11 -1: user.script -10 -1: H_ALPHANUM -17 -1: getCalendarSystem -48 -1: Ljava/util/concurrent/ConcurrentHashMap; -17 -1: EnsureInitialized -82 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;Ljava/lang/Object;)V -243 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToIntTask;Ljava/util/function/ToIntBiFunction;ILjava/util/function/IntBinaryOperator;)V -26 -1: getAnnotatedExceptionTypes -10 -1: validIndex -6 -1: ([CC)I -8 -1: overflow -5 -1: getID -93 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)Lsun/nio/cs/StreamDecoder; -22 -1: java/util/StringJoiner -9 -1: putFields -18 -1: USE_SHARED_ARCHIVE -8 -1: thursday -8 -1: nanoTime -59 -1: (Lsun/reflect/annotation/AnnotationType;Ljava/lang/Class;)V -69 -1: (Ljava/nio/charset/CoderResult$Cache;I)Ljava/nio/charset/CoderResult; -36 -1: (J)Ljava/lang/AbstractStringBuilder; -16 -1: java/util/Arrays -6 -1: ([CC)V -25 -1: registerAsParallelCapable -4 -1: slot -24 -1: java/net/URLConnection$1 -6 -1: koi8-r -19 -1: should be of type -46 -1: java/util/concurrent/ConcurrentHashMap$TreeBin -6 -1: koi8-u -34 -1: data type scale not a power of two -53 -1: Ljava/util/Map; -21 -1: AccessibleObject.java -53 -1: ()Ljava/util/NavigableSet; -88 -1: (Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List; -17 -1: getAnnotationType -36 -1: Ljava/util/HashMap$TreeNode; -14 -1: declaringClass -10 -1: read,write -5 -1: getId -10 -1: BIG_ENDIAN -20 -1: PolymorphicSignature -16 -1: comparingByValue -67 -1: (ILjava/lang/invoke/MethodType;)[Ljava/lang/invoke/LambdaForm$Name; -19 -1: java/util/Hashtable -20 -1: getUnicodeLocaleKeys -27 -1: ()Ljava/util/LinkedHashMap; -51 -1: (Ljava/lang/CharSequence;)Ljava/lang/StringBuilder; -30 -1: java/util/HashMap$HashIterator -22 -1: (IZ)Ljava/lang/String; -5 -1: yield -34 -1: java/lang/Throwable$SentinelHolder -62 -1: (Ljava/lang/invoke/MethodType;ZI)Ljava/lang/invoke/LambdaForm; -5 -1: (FD)F -17 -1: java/util/SubList -24 -1: (Ljava/io/PrintStream;)V -7 -1: LF.zero -25 -1: java/util/StringTokenizer -15 -1: ISO8859_15_FDIS -11 -1: powerOfTwoD -11 -1: powerOfTwoF -22 -1: WeakHashMapSpliterator -15 -1: refKindIsGetter -12 -1: setRawOffset -11 -1: setProperty -23 -1: (Ljava/lang/Object;IB)V -45 -1: (ILjava/lang/Object;)Ljava/util/HashMap$Node; -13 -1: applyAsDouble -83 -1: (Lsun/misc/URLClassPath$FileLoader;Ljava/lang/String;Ljava/net/URL;Ljava/io/File;)V -19 -1: MethodAccessor.java -9 -1: WALL_TIME -7 -1: INVOKES -13 -1: java.ext.dirs -9 -1: getStatic -56 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String; -42 -1: (Ljava/util/function/UnaryOperator;)V -27 -1: java/lang/Class$MethodArray -10 -1: H_USERINFO -19 -1: PostVMInitHook.java -7 -1: running -32 -1: Warning: passing argument as-is -13 -1: EntryIterator -22 -1: NF_checkSpreadArgument -46 -1: ([DLjava/util/function/IntToDoubleFunction;I)V -7 -1: . -13 -1: mappingLength -20 -1: implOnMalformedInput -53 -1: (Ljava/lang/String;ILjava/lang/reflect/Executable;I)V -26 -1: cannot make variable arity -18 -1: SharedSecrets.java -27 -1: (Ljava/io/InputStream;IZ)[B -9 -1: Asia/Gaza -55 -1: Ljava/util/Map;>; -5 -1: NTLM -19 -1: defaultCenturyStart -18 -1: addElapsedTimeFrom -38 -1: (Lsun/misc/Cleaner;)Lsun/misc/Cleaner; -44 -1: (Ljava/io/OutputStream;ZLjava/lang/String;)V -22 -1: (Ljava/lang/Object;B)V -6 1: [LBar; -7 -1: classes -23 -1: java/net/URLClassLoader -17 -1: sun/misc/Launcher -163 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)[Ljava/util/concurrent/ConcurrentHashMap$Node; -12 -1: updateAndGet -90 -1: (Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V -9 -1: increment -27 -1: (Ljava/lang/CharSequence;)V -16 -1: Ljava/io/Reader; -27 -1: java/io/PushbackInputStream -6 -1: (JFZ)V -17 -1: getAppClassLoader -35 -1: sun/reflect/generics/tree/Signature -9 -1: elementAt -27 -1: (Ljava/lang/CharSequence;)Z -10 -1: readDouble -37 -1: ([B)Ljava/nio/charset/CharsetEncoder; -46 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V -4 -1: park -36 -1: java/lang/NegativeArraySizeException -49 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Z -121 -1: ;>(Ljava/util/function/Function<-TT;+TU;>;)Ljava/util/Comparator; -101 -1: (Ljava/lang/annotation/Annotation;Ljava/lang/annotation/Annotation;)Ljava/lang/annotation/Annotation; -12 -1: .$|()[{^?*+\\ -6 -1: manRef -3 -1: 437 -15 -1: newStringUnsafe -15 -1: constantPoolOop -10 -1: getPackage -24 -1: FastCharsetProvider.java -18 -1: getAnnotationBytes -187 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class<*>;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/security/AccessControlContext; -33 -1: Cannot suppress a null exception. -27 -1: sun/nio/cs/StandardCharsets -33 -1: (BB)Ljava/lang/invoke/MemberName; -61 -1: ([Ljava/lang/ClassValue$Entry;ILjava/lang/ClassValue$Entry;)I -10 -1: X-UTF-32LE -5 -1: toMap -89 -1: (Ljava/lang/Class<*>;Ljava/util/List;>;)Ljava/lang/invoke/MethodType; -46 -1: ([Ljava/lang/Object;IILjava/util/Comparator;)V -66 -1: ([Ljava/lang/reflect/Constructor;)[Ljava/lang/reflect/Constructor; -22 -1: ()Ljava/nio/ByteOrder; -20 -1: isMethodHandleInvoke -25 -1: sun/net/www/URLConnection -89 -1: Ljava/util/concurrent/ConcurrentHashMap; -49 -1: (Ljava/nio/charset/Charset;FFLjava/lang/String;)V -17 -1: MIN_LOW_SURROGATE -23 -1: AbstractCollection.java -19 -1: (Ljava/util/Date;)I -19 -1: (Ljava/util/Date;)J -12 -1: cldrdata.jar -4 -1: path -77 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V -6 -1: MS1250 -37 -1: setJavaSecurityProtectionDomainAccess -11 -1: isDelimiter -5 -1: char0 -6 -1: MS1251 -5 -1: char1 -16 -1: getJavaNetAccess -6 -1: MS1252 -6 -1: MS1253 -6 -1: MS1254 -51 -1: (Ljava/lang/Class;)Ljava/security/ProtectionDomain; -6 -1: MS1257 -93 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class<*>; -10 -1: access$300 -5 -1: (JZ)C -19 -1: (Ljava/util/Date;)Z -5 -1: (JZ)D -26 -1: java/lang/Character$Subset -10 -1: access$302 -5 -1: (JZ)F -9 -1: emptyList -5 -1: (JZ)I -5 -1: (JZ)J -23 -1: (Ljava/lang/Runnable;)V -27 -1: java/lang/invoke/MemberName -29 -1: ()Ljava/util/Comparator; -18 -1: retrieveDirectives -7 -1: ([F[F)Z -40 -1: (Lsun/misc/URLClassPath;Ljava/net/URL;)V -5 -1: (JZ)S -40 -1: (Ljava/util/function/IntUnaryOperator;)I -5 -1: (JZ)V -16 -1: parseAnnotations -21 -1: (C)Ljava/lang/String; -73 -1: (TK;TV;)Ljava/util/Map; -15 -1: charset encoder -17 -1: getDomainCombiner -9 -1: EmptyList -15 -1: java.vm.version -19 -1: getResourceAsStream -94 -1: Ljava/lang/ThreadLocal;>; -26 -1: java/util/HashMap$TreeNode -22 -1: (Ljava/util/HashMap;)V -23 -1: sun/misc/URLClassPath$1 -65 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;)Ljava/net/URLClassLoader; -20 -1: Hashtable Enumerator -23 -1: sun/misc/URLClassPath$2 -10 -1: Array.java -8 -1: FT_LIMIT -24 -1: ()[Ljava/lang/Throwable; -23 -1: sun/misc/URLClassPath$3 -14 -1: java/io/Writer -5 -1: chars -76 -1: ()Ljava/util/NavigableMap; -6 -1: final -5 -1: error -34 -1: java/lang/ApplicationShutdownHooks -29 -1: Lsun/launcher/LauncherHelper; -30 -1: ()Ljava/util/Enumeration; -47 -1: (Ljava/util/List;)Ljava/lang/invoke/MethodType; -9 -1: scriptKey -5 -1: BYTES -12 -1: getException -69 -1: (Ljava/lang/Class<*>;Ljava/lang/Object;)Ljava/lang/invoke/MethodType; -14 -1: Illegal Load: -189 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$ReduceValuesTask;Ljava/util/function/BiFunction;)V -66 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToLongTask -29 -1: getJavaIOFileDescriptorAccess -11 -1: toCodePoint -15 -1: setCreationTime -18 -1: NULL_CAUSE_MESSAGE -8 -1: elements -32 -1: ()Ljava/nio/charset/CoderResult; -8 -1: utf-32be -7 -1: addDate -4 -1: Cast -23 -1: sun/misc/JavaLangAccess -8 -1: 0{1,12}$ -27 -1: (Ljava/util/ArrayList;III)V -11 -1: lastIndexOf -14 -1: getCodeSources -53 -1: (Lsun/util/calendar/CalendarDate;Ljava/lang/String;)V -17 -1: cachedConstructor -7 -1: forName -74 -1: (Ljava/util/function/ToLongFunction;Ljava/lang/Object;Ljava/lang/Object;)I -47 -1: (Ljava/lang/Object;)Lsun/reflect/FieldAccessor; -8 -1: getDebug -18 -1: currentClassLoader -49 -1: Illegal leading minus sign on unsigned string %s. -20 -1: toLowerCaseCharArray -38 -1: java/util/concurrent/ConcurrentHashMap -8 -1: isHidden -92 -1: (Ljava/lang/Thread;ILjava/lang/Object;Ljava/lang/Thread;JJJJ[Ljava/lang/StackTraceElement;)V -29 -1: java/lang/ArithmeticException -26 -1: (Ljava/io/OutputStream;Z)V -66 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/RuntimeException; -38 -1: Ljava/util/Map; -16 -1: getFindClassTime -34 -1: ([J)Ljava/util/Spliterator$OfLong; -24 -1: UnmodifiableNavigableSet -32 -1: java/lang/ClassNotFoundException -3 -1: \\n -6 -1: SEALED -14 -1: Flushable.java -3 -1: HST -24 -1: (Ljava/lang/Object;JII)Z -13 -1: toSecondOfDay -16 -1: thenComparingInt -26 -1: java/lang/NoSuchFieldError -18 -1: java/util/Locale$1 -25 -1: [Ljava/util/HashMap$Node; -75 -1: ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -11 -1: x-mswin-936 -32 -1: java/lang/management/MemoryUsage -25 -1: (JS)Ljava/nio/ByteBuffer; -25 -1: java/lang/ref/Finalizer$1 -25 -1: java/lang/ref/Finalizer$2 -21 -1: (Ljava/util/BitSet;)V -25 -1: java/lang/ref/Finalizer$3 -83 -1: (Ljava/util/Collection<+TT;>;Ljava/util/Comparator<-TT;>;)TT; -24 -1: sun/nio/ch/Interruptible -21 -1: (Ljava/util/BitSet;)Z -72 -1: ([Ljava/security/ProtectionDomain;Ljava/security/AccessControlContext;)V -54 -1: Ljava/util/AbstractSet;>; -34 -1: getConstructorParameterAnnotations -4 -1: name -92 -1: ;>Ljava/lang/Object;Ljava/lang/Comparable;Ljava/io/Serializable; -11 -1: FORM_OFFSET -13 -1: getAliasTable -5 -1: (DD)D -23 -1: reflectionFactoryAccess -221 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesTask;Ljava/util/function/Function;Ljava/util/function/BiFunction;)V -59 -1: (Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path; -6 -1: DELETE -10 -1: returnType -5 -1: (DD)I -51 -1: ()Lsun/reflect/generics/repository/FieldRepository; -8 -1: delegate -12 -1: OTHER_LETTER -18 -1: getTransitionIndex -3 -1: HUP -10 -1: (IIII[CI)V -10 -1: ISO_8859-1 -17 -1: ArrayEncoder.java -10 -1: ISO_8859-2 -34 -1: java/lang/reflect/AnnotatedElement -10 -1: ISO_8859-4 -27 -1: sun/nio/cs/UTF_16LE$Decoder -10 -1: ISO_8859-5 -13 -1: prefetchWrite -9 -1: getFloatB -10 -1: ISO_8859-7 -37 -1: (I)Ljava/lang/invoke/LambdaForm$Name; -10 -1: ISO_8859-9 -10 -1: getActions -11 -1: negateExact -10 -1: isAbstract -9 -1: getFloatL -29 -1: java/lang/ClassValue$Identity -14 -1: java/io/Reader -8 -1: getOwner -24 -1: java/lang/AssertionError -17 -1: MethodHandle.java -19 -1: classRedefinedCount -10 -1: cachedYear -15 -1: getAndIncrement -26 -1: java.protocol.handler.pkgs -14 -1: cleanSomeSlots -27 -1: java/util/Spliterator$OfInt -31 -1: getRawExecutableTypeAnnotations -20 -1: ensureInitialization -7 -1: os.arch -57 -1: (Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V -21 -1: UNSAFE_COPY_THRESHOLD -20 -1: toUnsignedBigInteger -82 -1: (Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection; -15 -1: Reflection.java -12 -1: decryptBlock -3 -1: \\r -8 -1: newArray -8 -1: Category -36 -1: java/lang/reflect/GenericDeclaration -22 -1: (Ljava/lang/String;Z)V -8 -1: suspend0 -10 -1: getSigners -22 -1: (Ljava/lang/String;Z)Z -31 -1: Unable to create temporary file -117 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; -17 -1: channelsAvailable -9 -1: Date.java -13 -1: toIndex < 0: -18 -1: mark > position: ( -11 -1: loadConvert -4 -1: july -42 -1: (Ljava/math/BigInteger;)Ljava/lang/String; -6 -1: enable -47 -1: (Ljava/util/zip/ZipEntry;)Ljava/io/InputStream; -6 -1: unpack -13 -1: setDayOfMonth -19 -1: name can't be empty -16 -1: getExtensionKeys -15 -1: getAndDecrement -36 -1: Ljava/lang/ClassValue$ClassValueMap; -38 -1: (Ljava/lang/Class;Ljava/lang/String;)V -11 -1: csISOlatin0 -9 -1: retention -23 -1: system protocol handler -9 -1: nullsLast -15 -1: refKindIsStatic -3 -1: (\n -48 -1: sun/launcher/LauncherHelper$ResourceBundleHolder -29 -1: ()Ljava/util/LinkedList; -11 -1: csISOlatin9 -31 -1: ([CII)Ljava/lang/StringBuilder; -29 -1: (II)Ljava/lang/StringBuilder; -7 -1: pdcache -4 -1: june -12 -1: ;/?:@&=+$,[] -141 -1: ([Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;)[Ljava/lang/invoke/LambdaForm$Name; -32 -1: ()[Ljava/util/WeakHashMap$Entry; -110 -1: (Ljava/lang/Class<*>;ILjava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; -81 -1: (Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z -46 -1: String value %s exceeds range of unsigned int. -6 -1: close0 -6 -1: (JDZ)V -160 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement; -12 -1: LinkedValues -24 -1: java/nio/HeapCharBufferR -23 -1: jvmVersionInfoAvailable -16 -1: classLoaderDepth -33 -1: (Lsun/nio/ch/DirectBuffer;IIIII)V -32 -1: java/nio/file/attribute/FileTime -50 -1: java/util/concurrent/ConcurrentHashMap$CounterCell -73 -1: (Lsun/misc/URLClassPath$JarLoader;Lsun/misc/JarIndex;)Lsun/misc/JarIndex; -60 -1: (Ljava/net/URL;Ljava/lang/String;)Ljava/security/CodeSource; -25 -1: Ljava/lang/ref/Finalizer; -12 -1: utf-32be-bom -40 -1: (Ljava/lang/String;ILjava/lang/Object;)V -9 -1: THROW_UCS -23 -1: java/util/AbstractMap$1 -23 -1: java/util/AbstractMap$2 -10 -1: x-utf-32be -4 -1: (S)B -60 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/LambdaForm; -20 -1: ResourceBundleHolder -4 -1: (S)I -13 -1: getSuppressed -17 -1: jdk_micro_version -4 -1: (S)J -9 -1: isNumeric -10 -1: variantKey -8 -1: utf-32le -47 -1: java/util/concurrent/ConcurrentHashMap$MapEntry -25 -1: ()Ljava/lang/Class<-TT;>; -6 -1: closed -4 -1: (S)S -15 -1: setStandardTime -10 -1: ShortCache -4 -1: (S)V -40 -1: sun/net/www/MessageHeader$HeaderIterator -17 -1: jdk_major_version -8 -1: FXHelper -6 -1: CENTIM -19 -1: java/security/Guard -46 -1: java.lang.invoke.MethodHandle.DUMP_CLASS_FILES -4 -1: ENUM -27 -1: Ljava/lang/SecurityManager; -39 -1: ([Ljava/lang/Class;[Ljava/lang/Class;)Z -11 -1: getFieldAt0 -12 -1: user.variant -28 -1: (Ljava/io/DataInputStream;)V -44 -1: ([JLjava/util/function/LongBinaryOperator;)V -7 -1: getRoot -3 -1: + -16 -1: identityHashCode -25 -1: java/security/Permissions -16 -1: Ljava/net/Proxy; -23 -1: java/io/ExpiringCache$1 -5 -1: more -10 -1: formatList -49 -1: (Ljava/lang/String;)Lsun/launcher/LauncherHelper; -29 -1: Relative path in absolute URI -11 -1: checkMapped -8 -1: Checksum -8 -1: " Radix: -9 -1: getAndAdd -9 -1: implReady -16 -1: SynchronizedList -30 -1: [Ljava/lang/StackTraceElement; -5 -1: right -13 -1: UTF_16BE.java -4 -1: HEAD -11 -1: isInvocable -6 -1: ENDCOM -15 -1: getPropertiesEx -6 -1: Unsafe -7 -1: IBM-819 -37 -1: : 0 <= i2 && i2 < names.length: 0 <= -19 -1: filterAndAddHeaders -22 -1: nativeParkEventPointer -18 -1: checkPositionIndex -13 -1: invalid url: -25 -1: out of range from input -9 -1: loadClass -12 -1: encodingName -9 -1: x-JIS0208 -38 -1: (Ljava/lang/Class;Ljava/lang/Object;)Z -28 -1: (I)Ljava/lang/reflect/Field; -17 -1: getJvmVersionInfo -6 -1: LIJFDV -21 -1: (D)Ljava/lang/String; -7 -1: oomeMsg -30 -1: java/io/InvalidObjectException -25 -1: java/io/FilterInputStream -32 -1: Ljava/net/ContentHandlerFactory; -13 -1: toUnsignedInt -17 -1: reconstitutionPut -37 -1: (Ljava/lang/Object;)Ljava/lang/Class; -14 -1: getContentType -43 -1: java/util/Collections$SynchronizedSortedSet -24 -1: (II)Ljava/nio/file/Path; -25 -1: JAVAFX_APPLICATION_MARKER -29 -1: (IC)Ljava/lang/StringBuilder; -13 -1: java/util/Set -10 -1: clearError -64 -1: (Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle; -25 -1: java/io/FileInputStream$1 -8 -1: getFirst -36 -1: (Lsun/reflect/ConstructorAccessor;)V -84 -1: (Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/NavigableMap; -42 -1: (Ljava/lang/CharSequence;)Ljava/io/Writer; -52 -1: ([Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -6 -1: (IFI)V -62 -1: Ljava/lang/Object;Ljava/util/Queue; -17 -1: getHeaderFieldInt -16 -1: CheckedSortedMap -39 -1: (ZILjava/lang/String;)Ljava/lang/Class; -10 -1: getterName -10 -1: Asia/Tokyo -4 -1: Node -7 -1: rotate1 -13 -1: Stream closed -7 -1: rotate2 -9 -1: checkExec -17 -1: NF_checkExactType -18 -1: ReverseComparator2 -18 -1: arrayElementGetter -97 -1: (Ljava/util/ArrayPrefixHelpers$DoubleCumulateTask;Ljava/util/function/DoubleBinaryOperator;[DII)V -9 -1: iso8859-1 -9 -1: iso8859-2 -9 -1: iso8859-4 -9 -1: iso8859-5 -9 -1: iso8859-7 -16 -1: getPermissions -9 -1: iso8859-9 -9 -1: fromClass -17 -1: with modifiers " -8 -1: isBooted -24 -1: getCommonPoolParallelism -10 -1: initialize -47 -1: (TT;)Ljava/util/Set; -17 -1: checkElementIndex -14 -1: openConnection -47 -1: (Ljava/lang/Thread;Lsun/nio/ch/Interruptible;)V -12 -1: isAuthorized -17 -1: ReduceEntriesTask -7 -1: command -24 -1: ArithmeticException.java -24 -1: ensureOpenOrZipException -67 -1: (Lsun/util/calendar/CalendarDate;I)Lsun/util/calendar/CalendarDate; -39 -1: Ljava/lang/invoke/MethodHandles$Lookup; -31 -1: Enclosing constructor not found -34 -1: ()Lsun/util/calendar/BaseCalendar; -25 -1: (JLjava/lang/Object;JJJ)V -12 -1: > toIndex: -22 -1: LocaleObjectCache.java -19 -1: sun/misc/Launcher$1 -31 -1: java/util/HashMap$EntryIterator -8 -1: contains -60 -1: Ljava/lang/Object; -53 -1: (I[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -19 -1: java/io/PrintStream -42 -1: java/lang/Math$RandomNumberGeneratorHolder -100 -1: (I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -14 -1: getCapturedArg -14 -1: getCodeSigners -20 -1: mark() not supported -56 -1: (Lsun/misc/URLClassPath;I)Lsun/misc/URLClassPath$Loader; -20 -1: java/lang/StrictMath -14 -1: annotationType -3 -1: IET -4 -1: lang -13 -1: JarEntry.java -9 -1: ([CIIII)I -9 -1: canEncode -5 -1: extra -30 -1: java/lang/ref/ReferenceQueue$1 -37 -1: java/nio/channels/ReadableByteChannel -73 -1: (Ljava/util/Map$Entry;)Z -24 -1: java/io/BufferedReader$1 -10 -1: x-utf-32le -16 -1: methodDescriptor -25 -1: (IJ)Ljava/nio/ByteBuffer; -18 -1: getSystemResources -46 -1: (Ljava/lang/String;I)Ljava/util/regex/Pattern; -46 -1: (Ljava/net/URL;)Lsun/misc/URLClassPath$Loader; -20 -1: calendars.properties -25 -1: implOnUnmappableCharacter -12 -1: signers_name -40 -1: (ZILjava/util/Locale;)Ljava/lang/String; -8 -1: (TE;)TE; -50 -1: ()Lsun/util/locale/provider/LocaleProviderAdapter; -11 -1: key is null -7 -1: encrypt -21 -1: millisUntilExpiration -55 -1: Unable to parse property sun.reflect.inflationThreshold -9 -1: checkExit -5 -1: SHORT -43 -1: java/util/Collections$UnmodifiableSortedSet -10 -1: ISO8859_15 -16 -1: verifyParameters -24 -1: buildAnnotatedInterfaces -15 -1: refKindIsSetter -45 -1: (JLjava/util/function/BiConsumer<-TK;-TV;>;)V -23 -1: (Ljava/lang/Object;IC)V -90 -1: (Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; -30 -1: (Ljava/net/URL;)Ljava/net/URI; -60 -1: (BLjava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;)V -43 -1: (Ljava/util/Collection;Ljava/lang/Object;)I -44 -1: (Ljava/net/URLConnection;)Ljava/lang/Object; -17 -1: Stream not marked -11 -1: targetCheck -127 -1: (Ljava/lang/Class<*>;ILjava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; -11 -1: debugString -112 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; -43 -1: (Ljava/util/Collection;Ljava/lang/Object;)V -15 -1: NF_staticOffset -22 -1: CASE_INSENSITIVE_ORDER -6 -1: unpark -29 -1: (Ljava/lang/CharSequence;II)I -59 -1: Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -19 -1: defaultFormatLocale -7 -1: combine -58 -1: (Ljava/util/Locale$LocaleKey;)Lsun/util/locale/BaseLocale; -29 -1: (Ljava/lang/CharSequence;II)V -35 -1: sun/util/calendar/BaseCalendar$Date -57 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; -75 -1: ([Ljava/lang/reflect/Member;[Ljava/lang/String;)[Ljava/lang/reflect/Member; -15 -1: MethodType_init -5 -1: (JF)V -20 -1: AUTOSELECT_FILTERING -12 -1: invokeStatic -18 -1: readFileDescriptor -22 -1: java/lang/Terminator$1 -72 -1: (Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object; -17 -1: EMPTY_STACK_TRACE -13 -1: isSamePackage -32 -1: ()Ljava/security/DomainCombiner; -10 -1: decodeLoop -30 -1: DIRECTIONALITY_EUROPEAN_NUMBER -112 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String; -33 -1: (Ljava/util/function/Predicate;)Z -35 -1: logincontext login context results -17 -1: sun/nio/cs/UTF_16 -13 -1: SingletonList -5 -1: end= -7 -1: getURLs -17 -1: traceInstructions -22 -1: generateCustomizedCode -9 -1: NO_CHANGE -11 -1: Number.java -49 -1: (ITT;)Ljava/util/List; -19 -1: checkSpecifyHandler -8 -1: setValue -30 -1: (Ljava/net/URL;)Ljava/net/URL; -22 -1: (Ljava/lang/Object;C)V -19 -1: Negative capacity: -24 -1: ArrayStoreException.java -52 -1: (Ljava/lang/StringBuffer;II)Ljava/lang/StringBuffer; -14 -1: linkMethodImpl -42 -1: java/util/InvalidPropertiesFormatException -4 -1: last -19 -1: getLocalizedMessage -65 -1: (Ljava/text/MessageFormat;[Ljava/lang/String;)[Ljava/lang/String; -61 -1: Ljava/lang/Object;Ljava/util/Enumeration; -40 -1: (I[CII)Ljava/lang/AbstractStringBuilder; -27 -1: java.launcher.opt.datamodel -29 -1: (Ljava/lang/reflect/Method;)V -19 -1: SPECIFICATION_TITLE -123 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;ILjava/lang/Class;)Lsun/reflect/SerializationConstructorAccessorImpl; -32 -1: (I[CII)Ljava/lang/StringBuilder; -29 -1: (Ljava/lang/reflect/Method;)Z -23 -1: (Z[B)Ljava/lang/String; -27 -1: sun/nio/cs/Surrogate$Parser -32 -1: (Ljavax/security/auth/Subject;)Z -29 -1: ()Ljava/lang/invoke/Invokers; -7 -1: getPool -7 -1: textOut -12 -1: getEntryTime -14 -1: classModifiers -47 -1: (Ljava/util/Locale$Category;)Ljava/util/Locale; -32 -1: getInheritedAccessControlContext -4 -1: rcbt -37 -1: (Ljava/lang/Class<*>;Ljava/io/File;)Z -25 -1: AccessControlContext.java -22 -1: FileURLConnection.java -12 -1: NaturalOrder -34 -1: sun/util/calendar/CalendarSystem$1 -94 -1: ([Ljava/lang/reflect/Method;Ljava/lang/String;[Ljava/lang/Class<*>;)Ljava/lang/reflect/Method; -17 -1: No enum constant -7 -1: ([DII)V -8 -1: register -23 -1: FINAL_QUOTE_PUNCTUATION -27 -1: ACCESS_CLIPBOARD_PERMISSION -15 -1: verifyConstants -20 -1: (Ljava/io/Writer;I)V -45 -1: (Ljava/lang/String;)Ljava/lang/reflect/Field; -24 -1: linkMethodHandleConstant -43 -1: (Ljava/io/OutputStream;Ljava/lang/String;)V -125 -1: (Ljava/util/Comparator<-TV;>;)Ljava/util/Comparator;>; -14 -1: ALL_PERMISSION -12 -1: createObject -10 -1: CRC32.java -14 -1: reservedMemory -22 -1: ensureCapacityInternal -11 -1: FormatData_ -9 -1: maxMemory -27 -1: (I)Ljava/util/ListIterator; -8 -1: UTF-16BE -27 -1: AbstractSequentialList.java -10 -1: access$400 -16 -1: Locale settings: -10 -1: access$402 -12 -1: HashSet.java -24 -1: java/lang/Long$LongCache -30 -1: [Ljava/lang/reflect/Parameter; -11 -1: single_step -45 -1: (Ljava/lang/String;)Lsun/security/util/Debug; -97 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)Ljava/lang/invoke/SimpleMethodHandle; -16 -1: indexOfBangSlash -7 -1: region= -26 -1: ([BII)Ljava/lang/Class<*>; -8 -1: bitCount -3 -1: INT -67 -1: ([TT;Ljava/util/function/IntFunction<+TT;>;)V -35 -1: newGetFloatIllegalArgumentException -11 -1: ([DII[DII)V -22 -1: makePreparedLambdaForm -3 -1: < -35 -1: sun/management/GarbageCollectorImpl -4 -1: (*)* -7 -1: getPort -18 -1: java/io/FileSystem -7 -1: getNode -38 -1: (Ljava/lang/Object;I)Ljava/lang/Class; -36 -1: $SwitchMap$java$util$Locale$Category -18 -1: securityCheckCache -5 -1: cdate -10 -1: childValue -19 -1: getMainClassFromJar -70 -1: ;>(Ljava/lang/Class;Ljava/lang/String;)TT; -20 -1: unsuspendSomeThreads -29 -1: sun.classloader.findClassTime -11 -1: plusSeconds -3 -1: = -4 -1: Lock -7 -1: regions -38 -1: ()Ljava/lang/reflect/Constructor; -25 -1: parseParameterAnnotations -20 -1: getSystemGMTOffsetID -33 -1: [Cc][Oo][Dd][Ee][Bb][Aa][Ss][Ee]= -37 -1: (Ljava/lang/String;I)Ljava/lang/Byte; -10 -1: permission -78 -1: (Ljava/lang/reflect/Constructor;)Lsun/reflect/generics/scope/ConstructorScope; -28 -1: (Lsun/misc/JavaLangAccess;)V -26 -1: GET_CLASSLOADER_PERMISSION -24 -1: (J)Ljava/nio/ByteBuffer; -20 -1: getUnresolvedActions -49 -1: (I[BIILsun/security/util/ManifestEntryVerifier;)V -5 -1: (ZJ)V -14 -1: isClassOnlyJar -35 -1: ()[Ljava/util/HashMap$Node; -23 -1: ()Ljava/util/SortedMap; -29 -1: HistoricallyNamedCharset.java -30 -1: no leading reference parameter -8 -1: csCESU-8 -3 -1: > -13 -1: invoke_LLLL_L -109 -1: (Ljava/util/NavigableMap;)Ljava/util/NavigableMap; -13 -1: invoke_LLLL_V -46 -1: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field; -5 -1: offer -12 -1: isoLanguages -61 -1: (Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V -44 -1: sun/reflect/BootstrapConstructorAccessorImpl -12 -1: BaseIterator -58 -1: (IZ[Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/String; -23 -1: initializeOSEnvironment -62 -1: ([Ljava/security/cert/Certificate;)[Ljava/security/CodeSigner; -3 -1: >> -13 -1: searchEntries -7 -1: setDate -3 -1: red -3 -1: ref -10 -1: EMPTY_LIST -3 -1: rem -78 -1: Ljava/util/AbstractCollection;Ljava/util/List; -9 -1: scanToken -6 -1: greek8 -9 -1: basicType -12 -1: getFromClass -43 -1: averageCharsPerByte exceeds maxCharsPerByte -8 -1: isDaemon -7 -1: nonNull -17 -1: Invalid default: -45 -1: (Lsun/misc/URLClassPath;Ljava/lang/String;Z)V -18 -1: java/lang/String$1 -11 -1: copyMethods -15 -1: sun/misc/Signal -5 -1: float -18 -1: StreamDecoder.java -19 -1: no such constructor -14 -1: bad arity for -14 -1: divideUnsigned -10 -1: CODING_END -3 -1: IST -14 -1: HeaderIterator -9 -1: september -20 -1: makeVarargsCollector -6 -1: L_PATH -45 -1: (Ljava/lang/String;)Ljava/io/File$PathStatus; -24 -1: URI scheme is not "file" -85 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class<*>;)V -27 -1: java/util/function/Supplier -17 -1: checkedCollection -8 -1: MapEntry -81 -1: (Ljava/lang/invoke/MethodHandle;ILjava/util/List;)Ljava/lang/invoke/MethodHandle; -34 -1: java/security/ProtectionDomain$Key -14 -1: List length = -39 -1: ([Ljava/lang/Object;)Ljava/lang/String; -87 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object; -7 -1: unparse -28 -1: jarFileHasClassPathAttribute -40 -1: (Lsun/misc/JavaIOFileDescriptorAccess;)V -30 -1: (Ljava/lang/reflect/Field;ZZ)V -22 -1: GetPropertyAction.java -8 -1: RUNNABLE -10 -1: exprString -13 -1: getAnnotation -19 -1: class can't be null -22 -1: defaultAssertionStatus -8 -1: getName0 -16 -1: quoteReplacement -15 -1: getMemberVMInfo -42 -1: (Ljava/lang/Class<*>;)Ljava/lang/Class<*>; -16 -1: cachedLambdaForm -16 -1: addFinalRefCount -12 -1: getMethodAt0 -8 -1: ([ZII)[Z -44 -1: (Ljava/lang/Object;TV;Ljava/lang/Object;)TV; -4 -1: [TT; -29 -1: Ljava/lang/invoke/LambdaForm; -28 -1: java/util/DualPivotQuicksort -61 -1: ()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -17 -1: registerDirectory -8 -1: jarFiles -69 -1: (Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String; -54 -1: [Ljava/util/concurrent/ConcurrentHashMap$Node; -15 -1: getDefaultValue -39 -1: sun/util/calendar/ZoneInfoFile$Checksum -20 -1: DISABLE_JAR_CHECKING -12 -1: CONTENT_TYPE -46 -1: array type not assignable to trailing argument -60 -1: ([TT;II)Ljava/util/stream/Stream; -47 -1: java.lang.invoke.MethodHandle.COMPILE_THRESHOLD -9 -1: toInstant -152 -1: (Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/NavigableMap; -7 -1: L_ALPHA -29 -1: java/lang/AbstractMethodError -29 -1: java/util/jar/Attributes$Name -15 -1: LOCALE_SETTINGS -19 -1: (J)Ljava/lang/Long; -4 -1: jar: -17 -1: ensureInitialized -13 -1: LAST_MODIFIED -40 -1: ([Ljava/lang/String;)[Ljava/lang/String; -7 -1: shuffle -70 -1: (Lsun/util/locale/LanguageTag;)Lsun/util/locale/InternalLocaleBuilder; -19 -1: isPackageAccessible -17 -1: compileToBytecode -11 -1: getPackages -237 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToIntTask;Ljava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)V -53 -1: java/util/concurrent/ConcurrentHashMap$KeySpliterator -26 -1: setURLStreamHandlerFactory -47 -1: access print all checkPermission results -22 -1: sun/reflect/MethodInfo -75 -1: (Ljava/lang/String;ZLjava/util/Set;)Lsun/misc/Resource; -6 -1: KOI8-R -14 -1: Character.java -5 -1: (SS)I -8 -1: unshared -73 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; -19 -1: replacementTreeNode -10 -1: BA_REGULAR -8 -1: UTF-16LE -44 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)V -22 -1: InputStreamReader.java -17 -1: getInvocationType -23 -1: getDeclaredConstructors -48 -1: [Lsun/reflect/generics/tree/FormalTypeParameter; -67 -1: (Ljava/util/Comparator;Ljava/util/Map$Entry;Ljava/util/Map$Entry;)I -6 -1: koi8_r -14 -1: ofTotalSeconds -16 -1: content-encoding -6 -1: koi8_u -10 -1: getEncoded -6 -1: ()[TT; -43 -1: ([ILjava/util/function/IntUnaryOperator;I)V -18 -1: getSecurityContext -13 -1: LF_GEN_LINKER -78 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class;)Ljava/lang/invoke/MemberName; -49 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;II)V -19 -1: LinkedEntryIterator -23 -1: Warning: JIT compiler " -7 -1: static -100 -1: (Ljava/lang/Class;ZLjava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Ljava/util/List; -79 -1: (Ljava/util/Collection<+TT;>;)Ljava/util/Collection; -10 -1: iso-ir-100 -10 -1: iso-ir-101 -13 -1: toUpperString -31 -1: ()Ljava/util/Spliterator$OfInt; -43 -1: Ljava/lang/StringIndexOutOfBoundsException; -19 -1: Lsun/misc/JarIndex; -7 -1: Version -90 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class; -10 -1: getHandler -45 -1: (ILjava/lang/Object;)Ljava/lang/StringBuffer; -28 -1: getDeclaredAnnotationsByType -46 -1: ([Ljava/lang/Class;Ljava/lang/StringBuilder;)V -53 -1: ()Ljava/util/Enumeration; -15 -1: addAllNonStatic -10 -1: iso-ir-110 -14 -1: Using VM: -17 -1: casReflectionData -26 -1: (Lsun/util/PreHashedMap;)I -24 -1: removeByNameAndSignature -4 -1: OS X -85 -1: (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Z -16 -1: JarEntryIterator -38 -1: Ljava/lang/Class; -37 -1: Ljava/lang/Class; -28 -1: ([Ljava/util/HashMap$Node;)V -34 -1: java/lang/reflect/GenericArrayType -14 -1: annotationData -26 -1: (Lsun/util/PreHashedMap;)V -22 -1: checkPackageDefinition -30 -1: ACCUMULATED_DAYS_IN_MONTH_LEAP -12 -1: lowestOneBit -64 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)V -16 -1: asReadOnlyBuffer -11 -1: getRealName -17 -1: StringCoding.java -10 -1: iso-ir-126 -11 -1: isSurrogate -8 -1: setError -138 -1: (Ljava/util/function/Function<-TT;+TU;>;Ljava/util/Comparator<-TU;>;)Ljava/util/Comparator; -8 -1: (TK;)TK; -4 -1: java -136 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)TT; -36 -1: ()Lsun/util/locale/LocaleExtensions; -12 -1: doubleStream -28 -1: ()Ljava/util/SimpleTimeZone; -7 -1: :@&=+$, -94 -1: Ljava/lang/ThreadLocal;>; -64 -1: (Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; -19 -1: getSystemTimeZoneID -18 -1: ReentrantLock.java -8 -1: emptyMap -16 -1: getSavedProperty -249 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToDoubleTask;Ljava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)V -14 -1: KeySpliterator -13 -1: findResources -14 -1: forWrapperType -8 -1: floorMod -12 -1: isoCountries -10 -1: CheckedSet -21 -1: AbstractCalendar.java -12 -1: IS_INVOCABLE -45 -1: (Ljava/lang/Class;)Lsun/reflect/ConstantPool; -19 -1: checkSecurityAccess -13 -1: Invalid index -28 -1: STACK_TRACE_ELEMENT_SENTINEL -88 -1: (ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode; -130 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -14 -1: aliases_IBM437 -10 -1: iso-ir-144 -10 -1: iso-ir-148 -35 -1: ()Ljava/nio/charset/CharsetDecoder; -95 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; -16 -1: UnmodifiableList -40 -1: ()Ljava/util/concurrent/locks/Condition; -9 -1: Path.java -80 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/util/Map; -36 -1: Ljava/lang/Class; -124 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;)Ljava/lang/Object; -20 -1: privateGetParameters -24 -1: sun/nio/cs/StreamDecoder -12 -1: getFreeSpace -8 -1: US-ASCII -22 -1: negativeZeroDoubleBits -9 -1: putObject -13 -1: linkToVirtual -35 -1: Ljava/lang/Class; -15 -1: detectedCharset -26 -1: java/lang/reflect/Modifier -22 -1: JAVAFX_LAUNCH_MODE_JAR -32 -1: java/net/URLStreamHandlerFactory -7 -1: IBM-923 -80 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/String; -13 -1: TRANSFERINDEX -34 -1: (Lsun/nio/cs/StandardCharsets$1;)V -23 -1: ()Ljava/io/InputStream; -16 -1: ()Ljava/io/File; -41 -1: (Ljava/lang/String;)Ljava/nio/ByteBuffer; -22 -1: sun/reflect/Reflection -23 -1: java/lang/AutoCloseable -25 -1: BootstrapMethodError.java -19 -1: EnclosingMethodInfo -13 -1: transferIndex -18 -1: java/lang/Compiler -4 -1: zero -29 -1: java/util/Arrays$NaturalOrder -9 -1: language= -37 -1: Ljava/util/ArrayList; -73 -1: ()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject; -16 -1: balanceInsertion -82 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V -11 -1: asIntBuffer -27 -1: (Ljava/util/LinkedList;II)V -13 -1: ofEpochSecond -19 -1: sunjce_provider.jar -21 -1: (F)Ljava/lang/String; -32 -1: >> does not contain binding << -21 -1: declaredPublicMethods -5 -1: FIELD -17 -1: getPrimitiveClass -127 -1: (Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;Ljava/lang/Class;Ljava/lang/String;)V -21 -1: replaceParameterTypes -73 -1: Ljava/util/Map;Ljava/security/PermissionCollection;>; -21 -1: (Ljava/lang/Double;)I -5 -1: floor -4 -1: halt -14 -1: newConstructor -48 -1: (Ljava/util/function/BiFunction<-TK;-TV;+TV;>;)V -17 -1: packageAccessLock -15 -1: America/Phoenix -19 -1: Incoming arguments: -11 -1: V_Monotonic -14 -1: decrementExact -15 -1: updatePositions -14 -1: toLocaleString -12 -1: appendEscape -7 -1: DISPLAY -27 -1: sun/nio/cs/US_ASCII$Decoder -13 -1: LITTLE_ENDIAN -6 -1: isNull -13 -1: TempDirectory -6 -1: LM_JAR -39 -1: JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT -10 -1: isCompiled -36 -1: (Ljava/lang/AbstractStringBuilder;)Z -3 -1: run -17 -1: START_PUNCTUATION -33 -1: Ljava/util/Stack; -49 -1: (Ljava/lang/String;)Ljava/lang/invoke/LambdaForm; -28 -1: java/security/DomainCombiner -53 -1: (Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId; -81 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)[Ljava/lang/reflect/AnnotatedType; -43 -1: java/lang/management/GarbageCollectorMXBean -11 -1: toTitleCase -12 -1: getHoldCount -4 -1: ()[B -4 -1: ()[C -4 -1: ()[J -20 -1: (Ljava/io/File;IZZ)Z -18 -1: fileTimeToUnixTime -23 -1: java/nio/HeapCharBuffer -30 -1: Ljava/lang/ref/ReferenceQueue; -6 -1: rt.jar -69 -1: (Ljava/util/function/ToIntFunction<-TT;>;)Ljava/util/Comparator; -21 -1: java/lang/ThreadLocal -25 -1: Ljava/lang/reflect/Field; -44 -1: (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V -93 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/MethodHandle; -22 -1: getDayOfWeekDateBefore -37 -1: [Lsun/reflect/generics/tree/TypeTree; -83 -1: (Ljava/util/Map;)Ljava/util/Set; -10 -1: readFields -42 -1: (Ljava/net/URL;)Ljava/security/CodeSource; -44 -1: (Ljava/lang/String;IIJ)Ljava/nio/ByteBuffer; -27 -1: Ljava/util/Collection; -13 -1: checkResource -7 -1: rename0 -51 -1: (C)Ljava/lang/invoke/BoundMethodHandle$SpeciesData; -47 -1: sun/reflect/generics/repository/FieldRepository -11 -1: readBoolean -134 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)V -13 -1: getZoneOffset -17 -1: getJdkVersionInfo -21 -1: sun/misc/MessageUtils -23 -1: defaultAllowArraySyntax -31 -1: java/util/concurrent/locks/Lock -24 -1: java/lang/reflect/Method -7 -1: toUpper -17 -1: sun/misc/Signal$1 -51 -1: (JLjava/util/function/BiFunction<-TK;-TK;+TK;>;)TK; -28 -1: (Ljava/lang/ref/Reference;)Z -8 -1: nthreads -26 -1: MapReduceEntriesToLongTask -27 -1: (Ljava/util/NavigableSet;)V -10 -1: savedProps -25 -1: Lsun/security/util/Debug; -12 -1: CR_MALFORMED -13 -1: com.sun.proxy -17 -1: CharSequence.java -24 -1: (ILjava/lang/String;II)Z -13 -1: findNextValue -108 -1: ;V:Ljava/lang/Object;>()Ljava/util/Comparator;>; -5 -1: (FF)F -9 -1: typeClass -5 -1: (FF)I -11 -1: segmentMask -7 -1: (JJJJ)V -14 -1: aliases_CESU_8 -85 -1: (Ljava/lang/Class;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; -15 -1: getCalendarDate -21 -1: getDeclaredAnnotation -8 -1: ([BIIB)I -15 -1: stripExtensions -14 -1: getISO3Country -5 -1: short -47 -1: String value %s exceeds range of unsigned long. -34 -1: ()Ljava/security/ProtectionDomain; -8 -1: ([BIIB)V -23 -1: (Ljava/lang/Object;ID)V -47 -1: (Ljava/lang/String;Ljava/nio/charset/Charset;)V -29 -1: RuntimeVisibleTypeAnnotations -24 -1: (Ljava/io/InputStream;)V -39 -1: (Ljava/lang/Class;Ljava/lang/String;Z)V -16 -1: convertPrimitive -8 -1: (TK;)TV; -24 -1: (Ljava/io/InputStream;)Z -6 -1: start -243 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToLongTask;Ljava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)V -9 -1: asSpecial -20 -1: java/text/Normalizer -17 -1: DAYS_0000_TO_1970 -9 -1: toCharset -20 -1: REPLACEALL_THRESHOLD -20 -1: sun/net/util/URLUtil -16 -1: findLoadedClass0 -14 -1: localedata.jar -6 -1: Parser -6 -1: start0 -4 -1: hash -83 -1: (Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; -29 -1: Ljava/lang/invoke/MemberName; -8 -1: BOOT_TAG -22 -1: MH_LINKER_ARG_APPENDED -14 -1: comparingByKey -47 -1: ([Ljava/lang/String;)Ljava/lang/ProcessBuilder; -6 -1: start= -18 -1: StringBuilder.java -7 -1: getLong -12 -1: copyElements -16 -1: highResFrequency -11 -1: toGMTString -10 -1: ISO_8859_1 -10 -1: ISO_8859_2 -6 -1: result -10 -1: ISO_8859_4 -10 -1: ISO_8859_5 -10 -1: ISO_8859_7 -15 -1: unmodifiableSet -10 -1: ISO_8859_9 -25 -1: NoClassDefFoundError.java -42 -1: (Ljava/lang/String;)Ljava/util/LinkedList; -14 -1: parallelPrefix -22 -1: ARRAY_LONG_INDEX_SCALE -6 -1: resume -36 -1: Ljava/lang/invoke/LambdaForm$Hidden; -50 -1: java/util/Collections$UnmodifiableRandomAccessList -130 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/Consumer;)V -6 -1: getInt -13 -1: getCachedYear -21 -1: CONNECTOR_PUNCTUATION -73 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;ILjava/lang/Class;)V -24 -1: [Lsun/util/calendar/Era; -22 -1: (Ljava/lang/Object;D)V -74 -1: (Ljava/security/AccessControlContext;)Ljava/security/AccessControlContext; -109 -1: (Ljava/lang/Class<*>;Ljava/lang/Class$AnnotationData;Ljava/lang/Class$AnnotationData;)Z -6 -1: ([CZ)V -74 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; -19 -1: TRADITIONAL_CHINESE -125 -1: (Ljava/lang/Throwable$PrintStreamOrWriter;[Ljava/lang/StackTraceElement;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V -18 -1: unknown protocol: -57 -1: (Ljava/lang/reflect/Method;Lsun/reflect/MethodAccessor;)V -13 -1: writeComments -9 -1: Negotiate -14 -1: Closeable.java -10 -1: asSpreader -122 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey; -17 -1: jvm_minor_version -9 -1: getDouble -25 -1: Ljava/io/File$PathStatus; -19 -1: averageCharsPerByte -22 -1: getConstructorAccessor -61 -1: (Ljava/lang/String;)Ljava/lang/management/MemoryManagerMBean; -45 -1: (Ljava/lang/String;)Ljava/util/regex/Pattern; -25 -1: (JC)Ljava/nio/ByteBuffer; -20 -1: exclusiveOwnerThread -85 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)V -17 -1: getExtensionValue -14 -1: getLoadAverage -17 -1: GET_PD_PERMISSION -6 -1: METHOD -23 -1: sun/nio/cs/ISO_8859_1$1 -23 -1: (I[Ljava/lang/Object;)I -4 1: zzz1 -13 -1: createWrapper -4 1: zzz2 -4 1: zzz3 -33 -1: greater than Character.MAX_RADIX -37 -1: DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE -6 -1: BRIDGE -20 -1: canonicalizeLanguage -13 -1: setPermission -46 -1: (Ljava/io/OutputStream;)Ljava/io/OutputStream; -3 -1: 646 -14 -1: java/lang/Long -55 -1: java/util/concurrent/ConcurrentHashMap$SearchValuesTask -38 -1: (IC)Ljava/lang/invoke/LambdaForm$Name; -37 -1: (Ljava/lang/Class;)Ljava/lang/String; -17 -1: javaUtilJarAccess -23 -1: registerMethodsToFilter -34 -1: (Ljava/nio/charset/Charset;[CII)[B -11 -1: % VERSION 2 -37 -1: ([DI)Ljava/util/Spliterator$OfDouble; -16 -1: Stack Size: -52 -1: (Ljava/lang/Class;)Ljava/lang/annotation/Annotation; -17 -1: putDoubleVolatile -10 -1: access$500 -10 -1: access$502 -28 -1: malformed input around byte -13 -1: LF_INVSPECIAL -32 -1: Non-positive averageCharsPerByte -14 -1: NF_fieldOffset -10 -1: access$508 -48 -1: (TT;)Ljava/util/List; -17 -1: defaultReadObject -17 -1: java/util/TimSort -13 -1: resolveClass0 -92 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -20 -1: setLangReflectAccess -30 -1: java/lang/reflect/TypeVariable -56 -1: ([TT;)Ljava/util/Spliterator; -8 -1: VOLATILE -10 -1: Big5-HKSCS -23 -1: (Ljava/util/Locale$1;)V -15 -1: ISO_8859-1:1987 -14 -1: no such method -10 -1: null value -8 -1: checkURL -22 -1: ARRAY_BYTE_INDEX_SCALE -27 -1: (Ljava/lang/ClassLoader;Z)V -22 -1: java/lang/reflect/Type -25 -1: java/net/JarURLConnection -36 -1: java/util/WeakHashMap$KeySpliterator -26 -1: ()Lsun/misc/JavaAWTAccess; -50 -1: (I[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; -9 -1: toDegrees -12 -1: lowSurrogate -19 -1: getEnclosingMethod0 -7 -1: bytearr -35 -1: (Ljava/util/List;Ljava/util/List;)I -25 -1: [Ljava/lang/reflect/Type; -34 -1: javaSecurityProtectionDomainAccess -21 -1: java.launcher.X.usage -37 -1: sun/util/locale/InternalLocaleBuilder -33 -1: ()Ljava/lang/invoke/MethodHandle; -3 -1: scl -19 -1: synthesizeAllParams -68 -1: Ljava/util/Map; -6 -1: vclass -35 -1: (Ljava/util/List;Ljava/util/List;)V -59 -1: Ljava/lang/Number;Ljava/lang/Comparable; -13 -1: CallSite.java -10 1: Bar loaded -21 -1: ARRAY_INT_BASE_OFFSET -49 -1: Ljava/util/concurrent/ConcurrentHashMap$TreeNode; -32 -1: [Ljava/lang/reflect/Constructor; -4 -1: type -34 -1: ([TT;II)[TT; -25 -1: BufferedOutputStream.java -23 -1: java/util/zip/ZipFile$1 -24 -1: ()Ljava/lang/ClassValue; -50 -1: (Ljava/util/concurrent/CountedCompleter;[F[FIIII)V -16 -1: getQueuedThreads -26 -1: getJavaNetHttpCookieAccess -8 -1: setExtra -8 -1: implRead -20 -1: linkMethod => throw -76 -1: (Ljava/util/function/ToDoubleFunction;Ljava/lang/Object;Ljava/lang/Object;)I -11 -1: KeyIterator -39 -1: Ljava/util/List; -3 -1: " " -36 -1: Ljava/lang/IllegalArgumentException; -11 -1: checkBounds -30 -1: sun/nio/cs/FastCharsetProvider -11 -1: toLongArray -107 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;IILjava/lang/String;[B)Ljava/lang/reflect/Field; -8 -1: (build -39 -1: (Ljava/nio/Buffer;ILjava/nio/Buffer;I)V -31 -1: [Ljava/lang/reflect/Executable; -3 -1: set -21 -1: PhantomReference.java -41 -1: java/util/Collections$CheckedNavigableMap -53 -1: Can not make a java.lang.Class constructor accessible -12 -1: ([CII[CIII)I -55 -1: Ljava/util/HashMap; -12 -1: MICROSECONDS -11 -1: writeBuffer -52 -1: and domain that didn't have permission -37 -1: java/nio/channels/WritableByteChannel -26 -1: getRawClassTypeAnnotations -15 -1: putCharVolatile -33 -1: java/security/InvalidKeyException -19 -1: Ljava/io/Closeable; -83 -1: Lsun/util/locale/LocaleObjectCache; -10 -1: SetFromMap -24 -1: JavaFX-Application-Class -13 -1: asShortBuffer -10 -1: getReifier -15 -1: isPositionIndex -18 -1: SignalHandler.java -3 -1: JST -28 -1: (Ljava/io/FileDescriptor;I)I -28 -1: getStackAccessControlContext -16 -1: updateByteBuffer -27 -1: ()Ljava/net/ContentHandler; -25 -1: (JD)Ljava/nio/ByteBuffer; -39 -1: ()Lsun/misc/JavaIOFileDescriptorAccess; -107 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; -42 -1: sun/misc/PerfCounter$WindowsClientCounters -8 -1: addExact -28 -1: (Ljava/io/FileDescriptor;I)V -36 -1: ([Ljava/lang/String;)Ljava/util/Map; -21 -1: ()Ljava/lang/Process; -4 -1: UTF8 -5 -1: mkdir -10 -1: transient -3 -1: sgp -15 -1: balanceDeletion -161 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package; -15 -1: SynchronizedMap -40 -1: sun.misc.URLClassPath.disableJarChecking -92 -1: Ljava/util/AbstractSet;Ljava/util/Set;Ljava/io/Serializable; -17 -1: removeEldestEntry -35 -1: (I)Ljava/lang/Class$AnnotationData; -24 -1: Ljava/util/Locale$Cache; -13 -1: STANDARD_TIME -17 -1: sun/nio/cs/MS1252 -99 -1: ()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -23 -1: java/util/LinkedHashSet -9 -1: iso8859_1 -9 -1: iso8859_2 -9 -1: iso8859_4 -66 -1: (Ljava/lang/Class;)[TA; -9 -1: iso8859_5 -9 -1: iso8859_7 -9 -1: iso8859_9 -21 -1: Ljava/util/Formatter; -6 -1: isPath -21 -1: makeReferenceIdentity -24 -1: sun/net/ApplicationProxy -23 -1: ClassCastException.java -11 -1: MethodArray -12 -1: SingletonMap -41 -1: java/util/ArrayPrefixHelpers$CumulateTask -7 -1: seconds -20 -1: ClassRepository.java -14 -1: allocateMemory -24 -1: java.launcher.jar.error1 -24 -1: java.launcher.jar.error2 -24 -1: java.launcher.jar.error3 -45 -1: (Ljava/lang/String;Ljava/util/jar/Manifest;)Z -3 -1: sin -7 -1: (J[II)I -3 -1: Itr -18 -1: findBootstrapClass -10 -1: getElement -15 -1: ISO_8859-4:1988 -34 -1: newGetLongIllegalArgumentException -7 -1: pending -17 -1: isNotContinuation -6 -1: EXTSIG -13 -1: searchMethods -32 -1: Lsun/misc/JavaUtilZipFileAccess; -33 -1: ([Ljava/lang/reflect/Parameter;)V -31 -1: defaultUncaughtExceptionHandler -89 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind<*>;)Ljava/nio/file/WatchKey; -5 -1: ASCII -28 -1: ()Lsun/reflect/ConstantPool; -20 -1: isJavaIdentifierPart -6 -1: EXTSIZ -34 -1: Lsun/misc/JavaNetHttpCookieAccess; -34 -1: ClassLoader object not initialized -7 -1: CHECKED -16 -1: encodeBufferLoop -37 -1: (Ljava/time/Instant;)Ljava/util/Date; -24 -1: (Ljava/util/Map$Entry;)Z -50 -1: java/util/concurrent/ConcurrentHashMap$KeyIterator -31 -1: ()[Ljava/lang/ClassValue$Entry; -31 -1: java/lang/IllegalStateException -43 -1: (Ljava/lang/Appendable;Ljava/util/Locale;)V -6 -1: CENVEM -53 -1: Ljava/util/ArrayList; -17 -1: getHeaderFieldKey -71 -1: (Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String; -6 -1: CENVER -17 -1: cleanStaleEntries -9 -1: linkFirst -57 -1: (Ljava/util/Comparator<-TT;>;)Ljava/util/Comparator; -8 -1: val$file -27 -1: Invalid parameter modifiers -6 -1: append -57 -1: ()Lsun/reflect/generics/repository/ConstructorRepository; -65 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToIntTask -39 -1: (Ljava/lang/String;)Ljava/lang/Integer; -25 -1: lambda$parallelSetAll$191 -25 -1: lambda$parallelSetAll$192 -25 -1: lambda$parallelSetAll$193 -23 -1: INSERTIONSORT_THRESHOLD -17 -1: java/time/Instant -25 -1: lambda$parallelSetAll$194 -14 -1: dynamicInvoker -9 -1: iso646-us -8 -1: position -29 -1: java/nio/channels/FileChannel -27 -1: java/util/stream/Collectors -64 -1: (Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String; -10 -1: INDEX_NAME -15 -1: getCommentBytes -67 -1: (Ljava/io/FileOutputStream;Ljava/lang/String;)Ljava/io/PrintStream; -22 -1: privateGetPublicFields -32 -1: java/util/BitSet$1BitSetIterator -12 -1: PERF_MODE_RO -89 -1: ([Ljava/lang/ClassValue$Entry;ILjava/lang/ClassValue$Entry;Z)Ljava/lang/ClassValue$Entry; -30 -1: java/security/PrivilegedAction -18 -1: host can't be null -26 -1: package name can't be null -12 -1: PERF_MODE_RW -10 -1: isEnqueued -18 -1: argSlotToParameter -37 -1: (II)Ljava/lang/AbstractStringBuilder; -5 -1: tabAt -53 -1: (Ljava/lang/Object;)Ljava/lang/AbstractStringBuilder; -11 -1: PATH_OFFSET -18 -1: unicodebigunmarked -15 -1: ConditionObject -6 -1: KOREAN -13 -1: isNamePresent -24 -1: ()Ljava/lang/Class; -14 -1: isStandardTime -8 -1: ([IIII)I -9 -1: WeakEntry -12 -1: javaIOAccess -17 -1: key can't be null -129 -1: Ljava/lang/Object;Ljava/lang/Comparable;Ljava/lang/Iterable;Ljava/nio/file/Watchable; -8 -1: handler -8 -1: ([IIII)V -10 -1: atBugLevel -18 -1: makeGuardWithCatch -18 -1: currentLoadedClass -11 -1: getCodeBase -67 -1: (Ljava/util/List<+TT;>;)Ljava/util/List; -12 -1: JarFile.java -19 -1: (C)Ljava/io/Writer; -22 -1: createURLStreamHandler -23 -1: sun/nio/cs/ArrayDecoder -13 -1: setAccessible -18 -1: stripOffParameters -101 -1: ([Ljava/security/ProtectionDomain;[Ljava/security/ProtectionDomain;)[Ljava/security/ProtectionDomain; -18 -1: Ljava/util/Random; -16 -1: Pacific/Honolulu -13 -1: useOldMapping -65 -1: (Ljava/lang/invoke/LambdaForm$NamedFunction;[Ljava/lang/Object;)V -14 -1: filterArgument -12 -1: LF_MH_LINKER -25 -1: isDirectMemoryPageAligned -49 -1: (Ljava/util/BitSet;)Ljava/util/function/Supplier; -54 -1: (Ljava/util/concurrent/ConcurrentHashMap;TV;)V -16 -1: java/time/ZoneId -4 -1: zfot -18 -1: isSameClassPackage -6 -1: julian -8 -1: (TT;)TT; -22 -1: java/util/jar/Manifest -7 -1: charOut -16 -1: getOffsetsByWall -19 -1: Illegal replacement -139 -1: Ljava/util/AbstractList;Ljava/util/List;Ljava/util/RandomAccess;Ljava/lang/Cloneable;Ljava/io/Serializable; -96 -1: (Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor; -15 -1: Annotation.java -24 -1: (Ljava/lang/Class<*>;)[B -6 -1: CODING -34 -1: ([Ljava/lang/ClassValue$Entry;II)V -6 -1: IGNORE -62 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; -29 -1: specificToGenericStringHeader -12 -1: helpTransfer -8 -1: fastTime -62 -1: (Ljava/net/URLConnection;[Ljava/lang/Class;)Ljava/lang/Object; -18 -1: Unhandled signal: -8 -1: isStrict -15 -1: ISO_8859-7:1987 -13 -1: getWeekLength -14 -1: jvmBuildNumber -40 -1: (Ljava/lang/String;)Ljava/util/Iterator; -6 -1: short0 -6 -1: short1 -73 -1: (Ljava/security/PrivilegedExceptionAction;)TT; -10 -1: removeNode -8 -1: setFloat -18 -1: cspc862latinhebrew -11 -1: setTimeZone -34 -1: java/lang/reflect/AccessibleObject -25 -1: MapReduceKeysToDoubleTask -25 -1: java/lang/ref/Reference$1 -24 -1: java/nio/HeapByteBufferR -15 -1: jdkMicroVersion -117 -1: (Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B[B)V -8 -1: (TT;)TV; -16 -1: Permissions.java -22 -1: Ljava/util/Comparator; -17 -1: getDaylightSaving -25 -1: ([BIILjava/lang/String;)V -9 -1: stillborn -11 -1: maxPosition -28 -1: java/util/ArrayPrefixHelpers -73 -1: ()Ljava/util/SortedMap; -14 -1: useCanonCaches -5 -1: clean -16 -1: checkPermission2 -34 -1: sun.misc.launcher.useSharedArchive -13 -1: shutdownHooks -5 -1: clear -240 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask;Ljava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)V -67 -1: (JLjava/util/function/Function<-TV;+TU;>;)TU; -6 -1: cp1250 -6 -1: cp1251 -6 -1: cp1252 -13 -1: getZipMessage -6 -1: cp1253 -28 -1: (J)Ljava/lang/ref/Reference; -6 -1: cp1254 -54 -1: (ILjava/lang/String;)Ljava/lang/AbstractStringBuilder; -6 -1: cp1257 -10 -1: deepEquals -17 -1: WRITE_BUFFER_SIZE -13 -1: copyFromArray -40 -1: java/util/Collections$ReverseComparator2 -36 -1: sun/reflect/generics/visitor/Reifier -19 -1: averageBytesPerChar -13 -1: javaAWTAccess -6 -1: cp5346 -61 -1: Ljava/util/Map; -6 -1: cp5347 -6 -1: cp5348 -6 -1: cp5349 -5 -1: field -23 -1: ()Ljava/nio/LongBuffer; -103 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/WrongMethodTypeException; -37 -1: (I)Ljava/lang/Character$UnicodeBlock; -11 -1: offsetAfter -79 -1: Ljava/util/HashMap; -27 -1: invocationHandlerReturnType -17 -1: POSITIVE_INFINITY -11 -1: maybeRebind -3 -1: str -18 -1: setSecurityManager -9 -1: signature -18 -1: corrupted jar file -89 -1: Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; -87 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -6 -1: CENATT -6 -1: cp5350 -12 -1: AF_GETSTATIC -38 -1: (TE;Ljava/util/LinkedList$Node;)V -8 -1: isLoaded -6 -1: CENATX -6 -1: cp5353 -18 -1: Africa/Addis_Ababa -35 -1: sun/usagetracker/UsageTrackerClient -11 -1: toUpperCase -22 -1: java/util/zip/Inflater -10 -1: iso_8859-1 -10 -1: iso_8859-2 -3 -1: sum -7 -1: x-Johab -10 -1: iso_8859-4 -10 -1: iso_8859-5 -85 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class;)Ljava/security/AccessControlContext; -11 -1: activeCount -49 -1: (Ljava/lang/ClassLoader;Ljava/lang/ClassLoader;)Z -51 -1: (Ljava/util/List;Ljava/lang/Class;)Ljava/util/List; -10 -1: iso_8859-7 -19 -1: appendVmErgoMessage -10 -1: iso_8859-9 -14 -1: getClassLoader -6 -1: (CJJ)Z -15 -1: Lsun/misc/Perf; -7 -1: getTree -27 -1: Ljava/text/Normalizer$Form; -11 -1: ISO-2022-JP -69 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;)Ljava/lang/Object; -50 -1: java/lang/invoke/DirectMethodHandle$StaticAccessor -15 -1: fxLauncherClass -35 -1: (Ljava/net/URL;Ljava/lang/String;)V -16 -1: getAndAccumulate -35 -1: (Ljava/net/URL;Ljava/lang/String;)Z -32 -1: Non-positive averageBytesPerChar -35 -1: Ljava/lang/Class; -15 -1: CLASS_MODIFIERS -12 -1: checkedQueue -13 -1: enumConstants -10 -1: getFactory -95 -1: Ljava/util/concurrent/ConcurrentMap;>; -13 -1: Africa/Harare -57 -1: (JLjava/util/TimeZone;)Lsun/util/calendar/Gregorian$Date; -11 -1: ISO-2022-KR -19 -1: $assertionsDisabled -13 -1: PROXY_PACKAGE -17 -1: copyFromLongArray -81 -1: Ljava/util/LinkedHashMap$Entry; -11 -1: checkDelete -38 -1: sun/management/ManagementFactoryHelper -7 -1: UTC1900 -20 -1: getBootstrapResource -23 -1: ()Ljava/lang/Throwable; -16 -1: CALLER_SENSITIVE -26 -1: checkSystemClipboardAccess -32 -1: Can't set default locale to NULL -16 -1: fxLauncherMethod -4 -1: >= -8 -1: provider -9 -1: Finalizer -78 -1: (Ljava/io/FileDescriptor;ZZZLjava/lang/Object;)Ljava/nio/channels/FileChannel; -13 -1: emptyIterator -15 -1: getZipFileCount -21 -1: isJavaIdentifierStart -9 -1: connected -11 -1: (ITK;TV;I)V -16 -1: America/Honolulu -22 -1: SynchronizedCollection -28 -1: java/util/zip/ZipConstants64 -29 -1: inheritedAccessControlContext -29 -1: ()[Ljava/security/CodeSigner; -85 -1: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/sun/management/GcInfo;)V -25 -1: (Ljava/nio/CharBuffer;Z)V -15 -1: java/io/Console -101 -1: (Ljava/lang/Class<*>;Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z -9 -1: | resolve -81 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class<*>;)Ljava/lang/invoke/MemberName; -33 -1: (Ljava/nio/charset/Charset;FF[B)V -49 -1: (Ljava/lang/Class;Z)Ljava/lang/invoke/MethodType; -66 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File; -29 -1: ([Ljava/util/HashMap$Node;I)V -13 -1: filterMethods -4 -1: jcal -61 -1: (Ljava/util/List;>;)[Ljava/lang/Class<*>; -6 -1: which= -46 -1: (Ljava/math/BigInteger;)Ljava/math/BigInteger; -4 -1: date -18 -1: internalMemberName -6 -1: (JJI)Z -30 -1: [Ljava/lang/invoke/LambdaForm; -60 -1: Ljava/lang/Object; -15 -1: ReservationNode -42 -1: java/lang/ThreadLocal$ThreadLocalMap$Entry -6 -1: setIn0 -4 -1: sort -8 -1: ibm00858 -110 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;IILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; -28 -1: Ljava/lang/ClassValue$Entry; -22 -1: ensureExplicitCapacity -6 -1: rotate -14 -1: closeRequested -30 -1: ([CII)Ljava/lang/StringBuffer; -10 -1: LM_UNKNOWN -15 -1: Comparable.java -13 -1: getByteBuffer -9 -1: getScheme -15 -1: done with meta! -17 -1: checkForTypeAlias -7 -1: getKeys -7 -1: SIG_DFL -30 -1: Ljava/nio/charset/CoderResult; -16 -1: returnTypesMatch -19 -1: getClassAccessFlags -18 -1: JavaNioAccess.java -9 -1: setDouble -23 -1: Ljava/util/zip/ZipFile; -83 -1: (JLjava/util/function/ToIntFunction<-TK;>;ILjava/util/function/IntBinaryOperator;)I -11 -1: ACCESS_READ -15 -1: nativeByteOrder -5 -1: hours -7 -1: toArray -7 -1: Encoder -12 -1: resolveClass -29 -1: (Ljava/io/FileDescriptor;JJ)V -14 -1: redefinedCount -8 -1: getTotal -11 -1: iso_8859-13 -11 -1: iso_8859-15 -9 -1: expected -18 -1: getDeclaredMethods -11 -1: elementData -6 -1: intern -10 -1: countryKey -6 -1: setInt -39 -1: Could not create extension class loader -24 -1: SELF_SUPPRESSION_MESSAGE -14 -1: argToSlotTable -42 -1: Ljava/util/HashMap; -5 -1: \t\n\r\x0c -4 -1: read -12 -1: Objects.java -7 -1: aliases -29 -1: sun/reflect/LangReflectAccess -6 -1: prefix -15 -1: superInterfaces -10 -1: getDoInput -30 -1: java/nio/CharBufferSpliterator -6 -1: KOI8_R -12 -1: Asia/Kolkata -6 -1: KOI8_U -6 -1: LOCSIG -15 -1: UA-Java-Version -92 -1: Ljava/util/HashMap;Ljava/util/Map; -14 -1: CertificateRep -17 -1: getSystemResource -85 -1: (JLjava/util/function/ToLongFunction<-TV;>;JLjava/util/function/LongBinaryOperator;)J -27 -1: java/lang/reflect/Parameter -5 -1: quote -8 -1: not MH: -46 -1: java/util/Collections$UnmodifiableCollection$1 -6 -1: putVal -6 -1: LOCSIZ -6 -1: Atomic -3 -1: 737 -38 -1: java/lang/UnsupportedClassVersionError -27 -1: ()Ljava/lang/StringBuilder; -41 -1: sun/net/www/protocol/jar/JarURLConnection -60 -1: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter; -59 -1: (TT;TT;Ljava/util/Comparator<-TT;>;)I -54 -1: java/util/concurrent/locks/AbstractOwnableSynchronizer -7 -1: getHost -36 -1: (F)Ljava/lang/AbstractStringBuilder; -69 -1: (Ljava/lang/Class;)Ljava/lang/Class<+TU;>; -4 -1: Form -103 -1: (Ljava/util/SortedMap;)Ljava/util/SortedMap; -6 -1: spread -8 -1: addHours -13 -1: contentEquals -47 -1: (Ljava/lang/String;Ljava/security/Permission;)V -12 -1: newCondition -23 -1: (Ljava/lang/Object;IZ)V -26 -1: (Ljava/util/LinkedList;I)V -13 -1: ConstantValue -18 -1: URLConnection.java -12 -1: Boolean.java -75 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;Ljava/net/URLStreamHandlerFactory;)V -21 -1: EMPTY_THROWABLE_ARRAY -153 -1: (Ljava/util/Map;[Ljava/lang/String;>;Ljava/lang/Class<*>;[Ljava/lang/String;)Ljava/util/Map;[Ljava/lang/String;>; -18 -1: getUnresolvedCerts -13 -1: Negative time -28 -1: java/util/WeakHashMap$KeySet -8 -1: slashify -16 -1: isOtherLowercase -17 -1: putObjectVolatile -5 -1: ERASE -12 -1: filterFields -40 -1: Ljava/lang/ReflectiveOperationException; -12 -1: VM settings: -57 -1: (ILjava/lang/Object;)Ljava/util/HashMap$TreeNode; -10 -1: access$600 -11 -1: ] return => -13 -1: user.timezone -23 -1: USER_AGENT_JAVA_VERSION -27 -1: (Ljava/util/HashMap$Node;)V -19 -1: filterNTLMResponses -28 -1: (Lsun/misc/VMNotification;)V -37 -1: ()[[Ljava/lang/annotation/Annotation; -45 -1: ()Lcom/sun/management/DiagnosticCommandMBean; -3 -1: tan -31 -1: getDirectlyAndIndirectlyPresent -7 -1: prepend -35 -1: (I)Lsun/util/calendar/CalendarDate; -8 -1: val$dirs -4 -1: test -28 -1: Non-positive maxCharsPerByte -83 -1: Ljava/lang/Object;Ljava/util/Map; -12 -1: JAVA_VERSION -24 -1: ([Ljava/lang/Thread;IZ)I -70 -1: (Ljava/lang/invoke/LambdaForm$Name;)Ljava/lang/invoke/LambdaForm$Name; -57 -1: ([TT;Ljava/util/Comparator<-TT;>;)V -42 -1: (Ljava/lang/Class<*>;[I)Ljava/lang/Object; -27 -1: java/lang/SecurityManager$1 -32 -1: java/security/SignatureException -27 -1: java/lang/SecurityManager$2 -4 -1: .jar -20 -1: parameterAnnotations -31 -1: DIRECTIONALITY_BOUNDARY_NEUTRAL -21 -1: hasClassPathAttribute -17 -1: checkParentAccess -35 -1: java/security/PermissionsEnumerator -6 -1: FORMAT -92 -1: (JLjava/util/function/Function;+TU;>;)TU; -3 -1: 775 -11 -1: PROBE_LIMIT -111 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; -11 -1: AF_PUTFIELD -22 -1: (Ljava/lang/Object;Z)V -20 -1: getGenericReturnType -9 -1: val$extcl -13 -1: inClassLoader -37 -1: sun.urlClassLoader.readClassBytesTime -35 -1: (JLjava/util/function/BiConsumer;)V -28 -1: getContentHandlerPkgPrefixes -10 -1: getChannel -78 -1: (Ljava/util/List<+TT;>;TT;Ljava/util/Comparator<-TT;>;)I -16 -1: parseMemberValue -4 -1: regn -47 -1: ([Ljava/lang/Object;III)Ljava/util/Spliterator; -11 -1: but found -6 -1: adjust -11 -1: isLowerCase -29 -1: sun/reflect/ReflectionFactory -98 -1: (Ljava/util/SortedSet;Ljava/lang/Class;)Ljava/util/SortedSet; -18 -1: [Ljava/lang/Error; -5 -1: entry -14 -1: refreshVersion -8 -1: (IIIII)V -22 -1: unmodifiableCollection -6 -1: putAll -22 -1: offsetByCodePointsImpl -26 -1: (Ljava/lang/String;[BII)[C -46 -1: (Ljava/net/URLClassLoader;Ljava/lang/String;)V -4 -1: /LF= -9 -1: Bits.java -30 -1: [Ljava/util/WeakHashMap$Entry; -19 -1: getLastModifiedTime -44 -1: [Ljava/lang/Thread$UncaughtExceptionHandler; -11 -1: getZoneInfo -6 -1: lookup -19 -1: MapReduceValuesTask -18 -1: isVarargsCollector -38 -1: java/util/jar/JarFile$JarEntryIterator -11 -1: getJarIndex -9 -1: getByName -42 -1: (Ljava/lang/Object;JLjava/lang/Object;JJ)V -71 -1: (Ljava/lang/invoke/LambdaForm$Name;I)Ljava/lang/invoke/LambdaForm$Name; -30 -1: java/net/ContentHandlerFactory -54 -1: (Ljava/lang/Class<*>;I)Ljava/lang/invoke/MethodHandle; -12 -1: getSignature -9 -1: parseLong -25 -1: DEBUG_METHOD_HANDLE_NAMES -15 -1: runFinalization -13 -1: 0000000000000 -28 -1: ()[Ljava/lang/reflect/Field; -37 -1: ([Ljava/lang/ClassValue$Entry<*>;II)V -13 -1: gcInfoBuilder -64 -1: (JLjava/util/function/BiFunction;Ljava/util/function/Consumer;)V -5 -1: cnfe1 -8 -1: setShort -28 -1: (C)Ljava/lang/StringBuilder; -44 -1: (Ljava/nio/LongBuffer;)Ljava/nio/LongBuffer; -70 -1: (Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class<*>; -33 -1: java/lang/TypeNotPresentException -5 -1: \n -20 -1: acquireInterruptibly -21 -1: (I)Ljava/lang/String; -24 -1: (Ljava/io/PrintWriter;)V -16 -1: convertArguments -32 -1: Ljava/net/MalformedURLException; -15 -1: linkToInterface -39 -1: java/lang/Throwable$PrintStreamOrWriter -10 -1: iso8859_13 -13 -1: hasPrimitives -10 -1: iso8859_15 -145 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Class<*>;)Ljava/lang/invoke/CallSite; -8 -1: equalPDs -28 -1: (Ljava/io/FileDescriptor;J)V -7 -1: newLine -43 -1: (Ljava/lang/Class<*>;I)Ljava/lang/Class<*>; -8 -1: addEntry -30 -1: java/util/WeakHashMap$EntrySet -14 -1: USE_OLDMAPPING -39 -1: (Ljava/io/DataInput;)Ljava/lang/String; -12 -1: LF_EX_LINKER -27 -1: java/lang/invoke/MethodType -23 -1: JavaSecurityAccess.java -23 -1: isLocalOrAnonymousClass -19 -1: Expanded arguments: -18 -1: sun/nio/cs/Unicode -40 -1: ()Ljava/nio/charset/spi/CharsetProvider; -23 -1: ([BLjava/lang/String;)V -7 -1: default -13 -1: highestOneBit -9 -1: isDefault -28 -1: (IF)Ljava/lang/StringBuffer; -31 -1: ()Ljava/util/ListIterator; -4 -1: base -23 -1: newPermissionCollection -7 -1: version -15 -1: Permission.java -41 -1: java/lang/invoke/LambdaForm$NamedFunction -8 -1: isQueued -24 -1: ([Ljava/lang/Class<*>;)I -64 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToIntTask -16 -1: checkInitialized -37 -1: java/lang/ClassLoader$ParallelLoaders -5 -1: ([B)I -23 -1: Lsun/misc/URLClassPath; -9 -1: usr_paths -10 -1: Queue.java -43 -1: (Ljava/io/File;Ljava/nio/charset/Charset;)V -64 -1: (Ljava/lang/invoke/MethodTypeForm;)Ljava/lang/invoke/MemberName; -3 -1: tid -23 -1: JarIndex-Version: 1.0\n\n -33 -1: (I)Ljava/nio/charset/CoderResult; -5 -1: ([B)V -10 -1: isInstance -25 -1: unmappableCharacterAction -11 -1: queueLength -5 -1: ([B)Z -10 -1: freeMemory -47 -1: java/util/ArrayPrefixHelpers$DoubleCumulateTask -52 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)V -41 -1: Ljava/util/Collections$ReverseComparator; -16 -1: copyToShortArray -206 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z -38 -1: sun/launcher/LauncherHelper$SizePrefix -17 -1: ACCESS_PERMISSION -17 -1: ReverseComparator -30 -1: ()Ljava/lang/ClassValue$Entry; -17 -1: AF_PUTSTATIC_INIT -6 -1: (IIB)I -19 -1: java/nio/file/Files -35 -1: (Z)[Ljava/lang/reflect/Constructor; -20 -1: INVALID_FIELD_OFFSET -17 -1: initializeHeaders -10 -1: management -10 -1: targetType -61 -1: (Ljava/util/SortedSet;Ljava/lang/Class;)Ljava/util/SortedSet; -5 -1: ascii -8 -1: validate -78 -1: Ljava/util/concurrent/ConcurrentHashMap; -25 -1: sun/nio/cs/UTF_16$Decoder -36 -1: sun/management/DiagnosticCommandImpl -24 -1: unmodifiableNavigableMap -18 -1: canonicalizeScript -29 -1: Lsun/misc/JavaSecurityAccess; -74 -1: ([JLjava/util/function/IntToLongFunction;)Ljava/util/function/IntConsumer; -38 -1: DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING -11 -1: languageTag -33 -1: java/lang/invoke/VolatileCallSite -18 -1: setRequestProperty -6 -1: 0x%02X -20 -1: (Ljava/lang/Float;)I -35 -1: (Ljava/nio/charset/CoderResult$1;)V -24 -1: (Ljava/lang/Object;JJB)V -21 -1: synchronizedSortedSet -59 -1: (Ljava/util/function/ToLongFunction;)Ljava/util/Comparator; -30 -1: av.length == arity: av.length= -7 -1: $VALUES -27 -1: RandomNumberGeneratorHolder -3 -1: tlr -43 -1: java/util/ArraysParallelSortHelpers$FJFloat -28 -1: ()[Ljava/io/File$PathStatus; -26 -1: invalid extra field length -13 -1: getExtensions -7 -1: PARAMS0 -7 -1: PARAMS1 -30 -1: [Ljava/lang/invoke/MemberName; -7 -1: PARAMS2 -31 -1: java/lang/AbstractStringBuilder -161 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/BiFunction;Ljava/util/function/Consumer;)V -4 -1: repl -19 -1: ()Ljava/lang/Class; -24 -1: BufferedInputStream.java -9 -1: sizeCache -8 -1: READLINK -9 -1: metaIndex -18 -1: getLocalizedObject -6 -1: filter -58 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V -140 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; -24 -1: Ljava/util/HashMap$Node; -35 -1: (Lsun/nio/cs/FastCharsetProvider;)V -8 -1: dispatch -19 -1: sun.stderr.encoding -130 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/List; -51 -1: Ljava/util/concurrent/ConcurrentHashMap$ValuesView; -30 -1: sun.reflect.inflationThreshold -20 -1: MutableCallSite.java -26 -1: invokeWithArgumentsTracing -7 -1: getters -38 -1: ()[Ljava/lang/reflect/TypeVariable<*>; -46 -1: ([DLjava/util/function/DoubleBinaryOperator;)V -5 -1: klass -13 -1: publicMethods -37 -1: ()[Ljava/lang/reflect/Constructor<*>; -126 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; -6 -1: FJLong -20 -1: canBeStaticallyBound -17 -1: getTimezoneOffset -9 -1: ALL_TYPES -3 -1: toV -8 -1: packages -15 -1: codePointBefore -10 -1: getCountry -13 -1: getDSTSavings -100 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetDecoder;)Lsun/nio/cs/StreamDecoder; -50 -1: java/util/ArraysParallelSortHelpers$FJFloat$Sorter -20 -1: hasNonVoidPrimitives -7 -1: syncAll -41 -1: domain dump all domains in context -59 -1: Ljava/util/Hashtable; -16 -1: ForEachEntryTask -18 -1: vminfoIsConsistent -26 -1: (ZLjava/util/Comparator;)V -9 -1: Lock.java -31 -1: Lsun/reflect/ReflectionFactory; -8 -1: (I[BII)I -23 -1: doesExtendFXApplication -87 -1: java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl -11 -1: windows-31j -28 -1: sun/misc/URLClassPath$Loader -17 -1: getEntryAfterMiss -47 -1: ([Ljava/lang/reflect/Field;Ljava/lang/String;)J -44 -1: Ljava/util/List; -10 -1: openStream -31 -1: Ljava/net/UnknownHostException; -19 -1: bad reference kind -29 -1: ()Ljava/nio/MappedByteBuffer; -9 -1: H_UPALPHA -37 -1: (Ljava/util/function/UnaryOperator;)V -25 -1: FAKE_METHOD_HANDLE_INVOKE -4 -1: peek -25 -1: java/util/Hashtable$Entry -18 -1: getMemberRefInfoAt -37 -1: Ljava/util/WeakHashMap$Entry; -14 -1: resolvedHandle -27 -1: ()Ljava/util/Iterator; -61 -1: Ljava/util/Map; -6 -1: static -50 -1: (Ljava/net/URLClassLoader;)Lsun/misc/URLClassPath; -38 -1: (Ljava/lang/Class;)[Ljava/lang/Object; -41 -1: (Ljava/util/SortedSet;Ljava/lang/Class;)V -41 -1: java/lang/invoke/WrongMethodTypeException -5 -1: group -10 -1: readObject -13 -1: getParentFile -14 -1: daylightSaving -15 -1: eagerValidation -36 -1: (Ljava/io/File;)Lsun/misc/MetaIndex; -18 -1: reduceEntriesToInt -15 -1: INITIAL_ENTRIES -18 -1: AtomicInteger.java -7 -1: .length -128 -1: Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; -6 -1: asList -21 -1: unmodifiableSortedSet -22 -1: ([B)Ljava/util/BitSet; -5 -1: check -64 -1: (Ljava/util/jar/JarFile;Lsun/misc/MetaIndex;)Lsun/misc/JarIndex; -35 -1: ()Ljava/nio/charset/CharsetEncoder; -4 -1: oome -25 -1: ()Lsun/misc/URLClassPath; -27 -1: (Ljava/io/FilePermission;)V -29 -1: IllegalArgumentException.java -17 -1: jvmSpecialVersion -21 -1: Ljava/util/ArrayList; -13 -1: packagePrefix -27 -1: (Ljava/io/FilePermission;)Z -11 -1: canonicalID -82 -1: Ljava/lang/Object;Ljava/util/Comparator;Ljava/io/Serializable; -24 -1: java.launcher.opt.footer -13 -1: NativeLibrary -37 -1: (Ljava/lang/String;J)Ljava/lang/Long; -16 -1: longBitsToDouble -6 -1: getKey -22 -1: (JLjava/lang/String;)V -14 -1: ensureCapacity -69 -1: (Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object; -22 -1: java/lang/Thread$State -50 -1: ()Ljava/util/Iterator; -4 -1: 7bit -46 -1: (Ljava/lang/Class<+Ljava/lang/ClassLoader;>;)Z -76 -1: (ILjava/util/List;>;)[Ljava/lang/invoke/LambdaForm$Name; -3 -1: ttb -12 -1: UTF_16LE_BOM -9 -1: remainder -40 -1: ()Lsun/reflect/generics/visitor/Reifier; -22 -1: [Ljava/lang/Throwable; -17 -1: EMPTY_ENUMERATION -13 -1: erasedInvoker -46 -1: Ljava/nio/charset/IllegalCharsetNameException; -10 -1: UnicodeBig -53 -1: ()Ljava/util/Map; -12 -1: MAX_EXPONENT -10 -1: Enumerator -15 -1: charset decoder -11 -1: AF_GETFIELD -12 -1: | getInvoker -74 -1: (Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult; -14 -1: toUnsignedLong -46 -1: java/lang/invoke/MethodHandleNatives$Constants -29 -1: java version "1.8.0-internal" -21 -1: ([Ljava/lang/Class;)I -16 -1: UPPERCASE_LETTER -22 -1: newConstantPerfCounter -6 -1: signum -9 -1: getField0 -38 -1: java/nio/charset/CoderMalfunctionError -21 -1: [Ljava/lang/Runnable; -11 -1: putIfAbsent -30 -1: java/util/Collections$EmptySet -22 -1: (I)[Ljava/lang/String; -34 -1: Ljava/security/SecurityPermission; -49 -1: ([Ljava/lang/Class;)Ljava/lang/invoke/MethodType; -190 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$ReduceEntriesTask;Ljava/util/function/BiFunction;)V -22 -1: Not an annotation type -34 -1: java/io/ObjectInputStream$GetField -50 -1: (Lsun/reflect/FieldInfo;)Ljava/lang/reflect/Field; -32 -1: Ljava/lang/NoSuchFieldException; -70 -1: (Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)Ljava/lang/Object; -9 -1: mergeSort -77 -1: (ITK;TV;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; -21 -1: sun/nio/cs/ISO_8859_1 -8 -1: DST_MASK -21 -1: Ljava/lang/Throwable; -108 -1: (Ljava/lang/ref/SoftReference;>;I)Ljava/lang/Class$ReflectionData; -32 -1: java/util/Arrays$LegacyMergeSort -59 -1: ()[Ljava/lang/reflect/TypeVariable;>; -16 -1: parseUnsignedInt -36 -1: ([D)Ljava/util/Spliterator$OfDouble; -26 -1: SPECIFY_HANDLER_PERMISSION -13 -1: primitiveType -17 -1: threadStartFailed -21 -1: (J)Ljava/lang/String; -23 -1: setClassAssertionStatus -28 -1: java/util/Hashtable$EntrySet -28 -1: Non-positive maxBytesPerChar -19 -1: getApplicationClass -14 -1: SentinelHolder -15 -1: staticFieldBase -25 -1: setDefaultRequestProperty -66 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedValueTask -8 -1: threadID -9 -1: getFields -15 -1: LineNumberTable -38 -1: java/util/Collections$CheckedSortedSet -14 -1: jdkBuildNumber -6 -1: divide -46 -1: (Ljava/io/BufferedWriter;Ljava/lang/String;Z)V -20 -1: java/lang/Terminator -92 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/lang/String;Ljava/net/URL;Ljava/util/jar/JarEntry;)V -6 -1: force0 -10 -1: getThreads -34 -1: java/util/IllformedLocaleException -115 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/FieldRepository; -9 -1: testFlags -11 -1: getLanguage -36 -1: java/util/function/IntBinaryOperator -12 -1: Suppressed: -10 -1: isMandated -23 -1: MethodAccessorImpl.java -28 -1: (Ljava/util/zip/ZipEntry;)[B -27 -1: Ljava/util/Hashtable$Entry; -5 -1: table -10 -1: Short.java -19 -1: ReferenceQueue.java -8 -1: setTabAt -26 -1: ()Lsun/invoke/empty/Empty; -53 -1: (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum; -74 -1: (ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node; -19 -1: changeParameterType -61 -1: Ljava/util/Map; -23 -1: (Ljava/lang/Object;IF)V -32 -1: (I)Ljava/util/ListIterator; -6 -1: unread -12 -1: isSubclassOf -6 -1: (JJJ)V -3 -1: Key -105 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;ITK;TV;)Ljava/util/HashMap$TreeNode; -14 -1: x-utf-16le-bom -22 -1: ()Ljava/nio/IntBuffer; -104 -1: (Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; -21 -1: removeFirstOccurrence -21 -1: sun/misc/DoubleConsts -23 -1: ()Ljava/util/SortedSet; -11 -1: getManEntry -23 -1: URI is not hierarchical -7 -1: replace -16 -1: getDisplayScript -11 -1: ISO_8859-15 -16 -1: permuteArguments -5 -1: (JI)C -41 -1: Error decoding percent encoded characters -22 -1: ([I)Ljava/lang/String; -31 -1: java/lang/management/ThreadInfo -9 -1: useCaches -22 -1: withInternalMemberName -5 -1: (JI)I -5 -1: (JI)J -67 -1: Ljava/lang/Object;Ljava/util/Collection; -95 -1: (Ljava/util/jar/JarFile;[Ljava/security/CodeSource;)Ljava/util/Enumeration; -7 -1: release -56 -1: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String; -5 -1: (JI)V -46 -1: (Ljava/util/Iterator;I)Ljava/util/Spliterator; -18 -1: verifyMemberAccess -9 -1: warning: -23 -1: java/lang/reflect/Field -67 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)V -10 -1: SizePrefix -15 -1: setJavaIOAccess -6 -1: (JI)[B -10 -1: ST_FLUSHED -10 -1: resolution -9 -1: ST_CODING -16 -1: sun/misc/Cleaner -21 -1: (Ljava/lang/Class;)[B -18 -1: WeakReference.java -41 -1: (Ljava/util/List;Ljava/util/Comparator;)V -18 -1: printPropertyValue -3 -1: 813 -22 -1: setRunFinalizersOnExit -4 -1: init -44 -1: ()Ljava/util/Iterator; -3 -1: 819 -12 -1: listIterator -8 -1: , arity= -24 -1: (Ljava/util/ArrayList;)I -49 -1: (IJLjava/io/FileDescriptor;Ljava/lang/Runnable;)V -10 -1: principals -17 -1: x-ISO-2022-CN-CNS -22 -1: (Ljava/lang/Object;F)V -14 -1: setReadTimeout -19 -1: getProtectionDomain -13 -1: pathSeparator -12 -1: getAndSetInt -58 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale; -11 -1: setWritable -4 -1: perf -50 -1: ()Ljava/util/concurrent/ConcurrentHashMap; -6 -1: LOCTIM -6 -1: status -11 -1: replaceName -52 -1: (Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer; -9 -1: nextToken -13 -1: dropArguments -20 -1: RECOGNIZED_MODIFIERS -14 -1: getInputStream -9 -1: readFully -25 -1: (CLjava/nio/CharBuffer;)I -24 -1: sun/misc/PathPermissions -10 -1: malformedN -9 -1: n is null -19 -1: instanceof Double: -13 -1: markSupported -26 -1: fromMethodDescriptorString -43 -1: [Ljava/util/concurrent/locks/ReentrantLock; -17 -1: parseUnsignedLong -33 -1: Lsun/misc/URLClassPath$JarLoader; -26 -1: (Ljava/io/OutputStream;I)V -6 -1: L_DASH -17 -1: EmptyNavigableMap -19 -1: CharsetDecoder.java -18 -1: makeDynamicInvoker -12 -1: URLUtil.java -27 -1: ()Ljava/util/Iterator; -9 -1: initTable -11 -1: getFragment -7 -1: isLower -20 -1: getMethodOrFieldType -29 -1: java/util/function/BiFunction -10 -1: access$700 -3 -1: 850 -7 -1: UTC2037 -43 -1: java/util/ArraysParallelSortHelpers$FJShort -9 -1: toSTZTime -10 -1: access$702 -3 -1: 852 -8 -1: hashCode -3 -1: 855 -44 -1: (Ljava/lang/ThreadLocal;Ljava/lang/Object;)V -3 -1: 857 -3 -1: 858 -5 -1: erase -55 -1: ()Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>; -47 -1: (Ljava/util/Iterator;JI)Ljava/util/Spliterator; -38 -1: Ljava/nio/charset/spi/CharsetProvider; -22 -1: can't deserialize enum -13 -1: LF_EX_INVOKER -18 -1: java/text/Collator -18 -1: Zero length string -49 -1: ()Ljava/util/Iterator; -5 -1: amd64 -12 -1: getNameCount -7 -1: inCheck -52 -1: (Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)V -53 -1: (ILjava/lang/CharSequence;II)Ljava/lang/StringBuffer; -21 -1: java/util/WeakHashMap -8 -1: throws -52 -1: (Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)Z -55 -1: Ljava/lang/ref/SoftReference; -16 -1: emptyEnumeration -3 -1: 862 -89 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;ILjava/lang/Class;)Ljava/util/List; -3 -1: 866 -55 -1: Lsun/reflect/generics/repository/ConstructorRepository; -35 -1: (Ljava/lang/ref/ReferenceQueue$1;)V -33 -1: java/util/Collections$CheckedList -18 -1: prefetchReadStatic -7 -1: (JI[I)I -78 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;)Ljava/lang/ThreadLocal$ThreadLocalMap; -7 -1: ordinal -22 -1: FilterInputStream.java -26 -1: java/util/zip/ZipConstants -28 -1: JVM cannot find invoker for -43 -1: sun/reflect/generics/parser/SignatureParser -51 -1: (Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)V -73 -1: (Ljava/util/function/ToIntFunction;Ljava/lang/Object;Ljava/lang/Object;)I -17 -1: StringBuffer.java -62 -1: ([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V -6 -1: equals -9 -1: formatter -3 -1: 874 -35 -1: newGetShortIllegalArgumentException -74 -1: (Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult; -3 -1: ucp -60 -1: ([Ljava/lang/ClassValue$Entry;I)Ljava/lang/ClassValue$Entry; -6 -1: create -17 -1: makeReinvokerForm -18 -1: csisolatincyrillic -15 -1: incrementAndGet -24 -1: maybeInstantiateVerifier -33 -1: ()Ljava/nio/channels/FileChannel; -6 -1: class -16 -1: getAnnotatedType -43 -1: (Ljava/lang/reflect/Type;)Ljava/lang/Class; -9 -1: HASH_BITS -12 -1: placeInCache -38 -1: java/util/Collections$SynchronizedList -89 -1: (Ljava/net/URL;Ljava/util/jar/JarFile;Ljava/util/jar/JarEntry;)Ljava/security/CodeSource; -22 -1: (Ljava/lang/String;I)B -20 -1: Ljava/util/TimeZone; -16 -1: sun.java.command -28 -1: java/util/WeakHashMap$Values -10 -1: X-UTF-16BE -22 -1: (Ljava/lang/String;I)I -26 -1: java/nio/DirectCharBufferS -99 -1: (Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class<*>; -22 -1: (Ljava/lang/String;I)J -26 -1: java/nio/DirectCharBufferU -54 -1: (Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal; -21 -1: java/util/AbstractSet -37 -1: (Ljava/lang/String;)Ljava/lang/Short; -36 -1: Ljava/nio/charset/CoderResult$Cache; -22 -1: (Ljava/lang/String;I)S -15 -1: Ljava/util/Map; -59 -1: (Ljava/lang/reflect/Type;)Ljava/lang/reflect/AnnotatedType; -22 -1: (Ljava/lang/String;I)V -10 -1: getAddress -25 -1: java/nio/DirectIntBufferS -11 -1: IMPL_LOOKUP -3 -1: uee -7 -1: addTime -37 -1: sun/security/action/GetPropertyAction -25 -1: java/nio/DirectIntBufferU -21 -1: javaUtilZipFileAccess -34 -1: java/util/Collections$CheckedQueue -11 -1: readResolve -22 -1: (Ljava/lang/String;I)Z -11 -1: findVirtual -63 -1: (Ljava/lang/String;Ljava/lang/String;)Lsun/security/util/Debug; -22 -1: getDeclaredAnnotations -16 -1: Collections.java -18 -1: invalid entry size -49 -1: java/util/concurrent/ConcurrentHashMap$TableStack -32 -1: java/util/AbstractSequentialList -4 -1: int0 -16 -1: MAXIMUM_CAPACITY -53 -1: ()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; -4 -1: int1 -4 -1: int2 -4 -1: int3 -119 -1: (Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;I)Lsun/reflect/MethodAccessor; -7 -1: variant -39 -1: Lsun/reflect/annotation/AnnotationType; -11 -1: arrayOffset -24 -1: ()Ljava/util/LinkedList; -31 -1: java/lang/ClassCircularityError -17 -1: java/lang/Package -10 -1: ccsid00858 -27 -1: java/io/ExpiringCache$Entry -16 -1: newFieldAccessor -67 -1: (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object; -99 -1: Lsun/reflect/generics/repository/GenericDeclRepository; -53 -1: (Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)V -53 -1: Ljava/util/concurrent/ConcurrentHashMap$Node; -58 -1: ([TT;)Ljava/util/stream/Stream; -54 -1: (Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Z -8 -1: Kerberos -29 -1: ()Ljava/nio/channels/Channel; -12 -1: java_version -45 -1: (Lsun/reflect/DelegatingMethodAccessorImpl;)V -10 -1: canConvert -136 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V -26 -1: getDayOfWeekDateOnOrBefore -7 -1: INVALID -10 -1: TERMINATED -41 -1: Ljava/security/cert/CertificateException; -74 -1: (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String; -30 -1: [Ljava/lang/invoke/MethodType; -13 -1: getMethodName -7 -1: Factory -34 -1: (Ljava/util/function/BiConsumer;)V -11 -1: unlinkFirst -37 -1: lambda$getDeclaredAnnotationsByType$0 -77 -1: (Ljava/nio/ByteBuffer;ILjava/nio/CharBuffer;II)Ljava/nio/charset/CoderResult; -20 -1: java/util/ArrayDeque -65 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V -49 -1: (Ljava/util/ArrayDeque;Ljava/util/ArrayDeque$1;)V -22 -1: (J)Ljava/time/Instant; -17 -1: URLClassPath.java -6 -1: 8859_1 -25 -1: stopRemoteManagementAgent -6 -1: 8859_2 -17 -1: containsNullValue -6 -1: 8859_4 -6 -1: 8859_5 -26 -1: (Ljava/nio/ByteBuffer;IC)V -76 -1: (Ljava/lang/Runnable;Ljava/security/AccessControlContext;)Ljava/lang/Thread; -6 -1: 8859_7 -6 -1: 8859_9 -8 -1: setHours -9 -1: File.java -21 -1: isIdentifierIgnorable -5 -1: ([C)I -4 -1: (B)I -10 -1: codesource -77 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;Ljava/security/AccessControlContext;)V -4 -1: (B)J -6 -1: isFair -30 -1: java/lang/NullPointerException -10 -1: IMPL_NAMES -13 -1: Runnable.java -26 -1: Ill-formed extension key: -17 -1: ()[Ljava/io/File; -18 -1: javaSecurityAccess -16 -1: equalsIgnoreCase -4 -1: (B)V -5 -1: ([C)V -25 -1: Ljava/io/FileInputStream; -14 -1: trackJavaUsage -20 -1: Ljava/io/FileSystem; -10 -1: iso_8859_1 -4 -1: (B)Z -30 -1: java/lang/NoClassDefFoundError -152 -1: (Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode; -19 -1: java/lang/Cloneable -55 -1: ([Ljava/lang/Object;Ljava/util/function/IntFunction;I)V -27 -1: (Ljava/nio/ByteBuffer;IJZ)V -21 -1: ()Lsun/misc/JarIndex; -72 -1: ([Ljava/security/CodeSource;)Ljava/util/Enumeration; -64 -1: (Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object; -20 -1: invalid entry crc-32 -9 -1: BASECOUNT -29 -1: java/security/BasicPermission -52 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/io/File; -7 -1: ([B[B)Z -17 -1: EMPTY_ELEMENTDATA -61 -1: (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; -49 -1: (ILjava/lang/Class;)Ljava/lang/invoke/MethodType; -29 -1: sun/reflect/MagicAccessorImpl -121 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/ConstructorRepository; -6 -1: ([II)I -40 -1: (Ljava/lang/String;I)Ljava/lang/Integer; -25 -1: java.content.handler.pkgs -63 -1: ()Ljava/util/Set;>; -13 -1: parameterList -6 -1: rebind -16 -1: isSuperInterface -6 -1: ([II)V -14 -1: currentRuntime -9 -1: BA_EXISTS -15 -1: END_PUNCTUATION -15 -1: no such method -19 -1: getAndVerifyPackage -4 -1: wrap -24 -1: checkAwtEventQueueAccess -7 -1: ibm-437 -4 -1: open -47 -1: (Ljava/nio/ByteBuffer;[BI)Ljava/nio/ByteBuffer; -21 -1: ADDRESS_BITS_PER_WORD -13 -1: isConstructor -12 -1: getUseCaches -27 -1: sun/util/locale/LocaleUtils -4 -1: koi8 -23 -1: getParameterAnnotations -9 -1: providers -57 -1: ([Ljava/lang/Object;Ljava/util/function/BinaryOperator;)V -24 -1: Lsun/misc/JavaNetAccess; -22 -1: ([J)Ljava/lang/String; -7 -1: p-1022$ -6 -1: isType -63 -1: Ljava/util/Map; -21 -1: pageAlignDirectMemory -18 -1: getManifestDigests -37 -1: [Ljava/lang/reflect/AccessibleObject; -7 -1: decrypt -54 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/util/HashMap; -32 -1: lambda$comparingByKey$bbdbfea9$1 -21 -1: hasGenericInformation -31 -1: java/nio/charset/CharsetEncoder -15 -1: setTargetNormal -3 -1: ulp -18 -1: argumentTypesMatch -12 -1: getDayOfYear -8 -1: closeAll -76 -1: Ljava/lang/ref/SoftReference; -6 -1: concat -9 -1: getLongAt -16 -1: hasBeenFinalized -32 -1: [Ljava/util/Hashtable$Entry<**>; -23 -1: CheckedRandomAccessList -106 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI; -21 -1: defineClassInPackage. -11 -1: ([III[III)V -8 -1: toZoneId -34 -1: SUBCLASS_IMPLEMENTATION_PERMISSION -55 -1: java/util/concurrent/atomic/AtomicReferenceFieldUpdater -8 -1: isDirect -10 -1: ALL_ACCESS -12 -1: isRegistered -29 -1: ForEachTransformedMappingTask -5 -1: LIJFD -23 -1: (Ljava/util/TimeZone;)V -23 -1: (Ljava/util/TimeZone;)Z -20 -1: java/lang/Appendable -29 -1: Lsun/util/calendar/Gregorian; -9 -1: charValue -8 -1: ONE_HOUR -38 -1: (Ljava/util/Locale;)Ljava/lang/String; -7 -1: script= -10 -1: X-UTF-16LE -7 -1: ENTRIES -6 -1: detach -38 -1: certpath PKIX CertPathBuilder and -14 -1: setLanguageTag -13 -1: isAlphaString -13 -1: interpretName -9 -1: dayOfWeek -88 -1: (Ljava/lang/Class;ZLjava/lang/String;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/List; -91 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)Ljava/lang/invoke/MethodHandle; -13 -1: addTypeString -17 -1: VectorSpliterator -12 -1: MILLISECONDS -6 -1: CENCOM -10 -1: KeySetView -18 -1: getTargetException -7 -1: H_ALPHA -32 -1: sun/util/locale/BaseLocale$Cache -25 -1: [Ljava/lang/CharSequence; -7 -1: Builder -4 -1: left -19 -1: BootClassPathHolder -12 -1: publicFields -11 -1: windows-437 -9 -1: EMPTY_SET -26 -1: GET_STACK_TRACE_PERMISSION -6 -1: copyOf -14 -1: aliases_IBM737 -9 -1: writeLong -35 -1: (JLjava/util/concurrent/TimeUnit;)Z -70 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; -22 -1: getAnnotatedReturnType -41 -1: (Ljava/lang/String;[BII)Ljava/lang/Class; -8 -1: ,maxpri= -29 -1: handleParameterNumberMismatch -26 -1: ts timestamping -11 -1: checkListen -10 -1: SourceFile -44 -1: (Ljava/lang/String;)Ljava/util/jar/JarEntry; -17 -1: weakCompareAndSet -9 -1: timestamp -21 -1: (Z)Ljava/lang/String; -12 -1: doneWithMeta -20 -1: makeCollectArguments -52 -1: (JLjava/util/function/BiFunction;)Ljava/lang/Object; -10 -1: searchKeys -48 -1: sun/reflect/SerializationConstructorAccessorImpl -69 -1: (Ljava/lang/reflect/Constructor<*>;)Lsun/reflect/ConstructorAccessor; -19 -1: ()Lsun/misc/Unsafe; -11 -1: deepEquals0 -7 -1: GB18030 -13 -1: ValueIterator -75 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V -28 -1: java/util/PropertyPermission -6 -1: CENCRC -3 -1: url -3 -1: L_L -19 -1: Certificate too big -33 -1: sun/reflect/DelegatingClassLoader -16 -1: lambda$stream$57 -11 -1: BitSet.java -13 -1: sun/misc/Perf -26 -1: Ljava/util/SimpleTimeZone; -7 -1: (BBBB)I -24 -1: sun/misc/FloatingDecimal -21 -1: sun/util/PreHashedMap -8 -1: utf-16be -11 -1: isInherited -83 -1: (Ljava/util/Properties;Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V -52 -1: (Ljava/lang/Class;Ljava/security/ProtectionDomain;)V -11 -1: getDoOutput -18 -1: asVarargsCollector -22 -1: NoSuchMethodError.java -18 -1: getStackTraceDepth -30 -1: (Ljava/io/File;)Ljava/net/URL; -15 -1: CURRENCY_SYMBOL -24 -1: Lsun/misc/JavaNioAccess; -6 -1: NATIVE -22 -1: Lsun/misc/PerfCounter; -63 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToIntTask -30 -1: less than Character.MIN_RADIX -17 -1: isCallerSensitive -8 -1: shutdown -11 -1: STATE_GREEN -4 -1: next -10 -1: tryPresize -16 -1: CONSTRUCTOR_NAME -3 -1: MAY -21 -1: java.security.manager -20 -1: Lsun/misc/Contended; -16 -1: DISPLAY_LANGUAGE -6 -1: KeySet -9 -1: getScript -3 -1: utc -17 -1: TRACE_INTERPRETER -39 -1: (Ljava/lang/Object;I)Ljava/lang/String; -19 -1: getFieldAtIfLoaded0 -15 -1: methodFilterMap -54 -1: Ljava/util/Map; -45 -1: java/security/cert/Certificate$CertificateRep -43 -1: (Ljava/lang/String;)Lsun/util/calendar/Era; -34 -1: java/security/cert/X509Certificate -19 -1: versionsInitialized -11 -1: isDirectory -14 -1: aliases_IBM775 -38 -1: (Ljava/util/function/Consumer<-TE;>;)V -38 -1: (Ljava/lang/String;)Ljava/util/Locale; -40 -1: (Ljava/lang/String;Z)Lsun/misc/Resource; -14 -1: setDefaultZone -14 -1: highResCounter -78 -1: (Ljava/lang/ClassValue$Version;Ljava/lang/Object;)Ljava/lang/ClassValue$Entry; -16 -1: defaultUseCaches -40 -1: (Ljava/util/zip/ZipFile;)Ljava/util/Map; -24 -1: isSupplementaryCodePoint -15 -1: ISO_8859_1.java -13 -1: multiplyExact -126 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale; -8 -1: classMap -8 -1: wildcard -19 -1: getSimpleBinaryName -17 -1: illegal signature -14 -1: == basicType( -17 -1: ZipConstants.java -32 -1: [Ljava/lang/VirtualMachineError; -27 -1: ()Ljava/util/stream/Stream; -24 -1: (Ljava/lang/Exception;)V -21 -1: java/util/Enumeration -13 -1: newSetFromMap -8 -1: getenv.* -20 -1: sun/management/Agent -21 -1: sun/nio/cs/US_ASCII$1 -7 -1: comment -15 -1: appendAuthority -11 -1: hasWrappers -10 -1: dstOffset -24 -1: sun/reflect/ConstantPool -75 -1: (Ljava/util/jar/JarFile;[Ljava/security/CodeSource;)Ljava/util/Enumeration; -52 -1: (Ljava/util/jar/JarFile;)Ljava/util/jar/JarVerifier; -70 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; -14 -1: previousSetBit -17 -1: AF_GETSTATIC_INIT -15 -1: ArrayDeque.java -7 -1: boolean -25 -1: (I)Ljava/math/BigInteger; -146 -1: (Ljava/lang/ref/ReferenceQueue;>;Ljava/util/concurrent/ConcurrentMap<+Ljava/lang/ref/WeakReference;>;*>;)V -8 -1: getClass -8 -1: user.dir -6 -1: VALUES -5 -1: raise -39 -1: (JLjava/util/function/Consumer<-TV;>;)V -107 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; -5 -1: print -8 -1: readChar -55 -1: (JLjava/util/TimeZone;)Lsun/util/calendar/CalendarDate; -56 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysTask -60 -1: Ljava/lang/Number;Ljava/lang/Comparable; -102 -1: (Ljava/util/SortedMap;)Ljava/util/SortedMap; -23 -1: printModifiersIfNonzero -14 -1: getterFunction -15 -1: ISO-10646-UCS-2 -14 -1: canonizeString -13 -1: getTotalSpace -24 -1: synchronizedNavigableSet -100 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)TT; -4 -1: ioex -24 -1: ()Ljava/nio/FloatBuffer; -14 -1: toBinaryString -7 -1: Segment -34 -1: ()Lsun/misc/JavaUtilZipFileAccess; -17 -1: setTargetVolatile -22 -1: (Ljava/util/List<*>;)V -51 -1: (ILjava/lang/CharSequence;)Ljava/lang/StringBuffer; -22 -1: (Ljava/util/List<*>;)Z -5 -1: (FI)F -11 -1: parseMethod -8 -1: Compiled -19 -1: java/util/SortedMap -7 -1: setByte -12 -1: getFieldType -8 -1: pageSize -14 -1: getCallerClass -9 -1: ensureObj -18 -1: refKindHasReceiver -10 -1: getZoneIds -24 -1: (Ljava/nio/CharBuffer;)I -47 -1: ()Lsun/reflect/generics/parser/SignatureParser; -8 -1: getIndex -24 -1: (Ljava/lang/Thread;TT;)V -18 -1: (Ljava/util/Map;)V -18 -1: (Ljava/util/Map;)Z -6 -1: random -10 -1: putAddress -64 -1: (Ljava/util/function/Consumer<-Ljava/util/Map$Entry;>;)V -24 -1: (Ljava/nio/CharBuffer;)V -8 -1: canCache -24 -1: (Ljava/nio/CharBuffer;)Z -9 -1: getIntAt0 -4 -1: sqrt -8 -1: makeLong -54 -1: ([Ljava/lang/Object;Ljava/util/function/IntFunction;)V -5 -1: (JJ)I -26 -1: javaIOFileDescriptorAccess -5 -1: (JJ)J -15 -1: != basicType: -36 -1: Ljava/lang/ref/ReferenceQueue<-TT;>; -5 -1: words -16 -1: sun.jnu.encoding -32 -1: (Ljava/lang/invoke/LambdaForm;)V -22 -1: ensureClassInitialized -16 -1: Ljava/util/List; -14 -1: varargsInvoker -5 -1: (JJ)V -20 -1: java/util/Properties -12 -1: getImplClass -21 -1: argumentTypesToString -5 -1: (JJ)Z -50 -1: java/util/Collections$SynchronizedRandomAccessList -17 -1: makeWrappedMember -21 -1: UnmodifiableSortedSet -22 -1: (ILjava/lang/Class;Z)V -3 -1: MIT -13 -1: bootClassPath -50 -1: (JLjava/util/function/Function;)Ljava/lang/Object; -74 -1: Ljava/util/HashMap$Node; -45 -1: (Ljava/util/Map$Entry;Ljava/util/Map$Entry;)I -12 -1: advanceProbe -10 -1: encoderFor -14 -1: DataInput.java -16 -1: java/lang/Double -3 -1: 912 -3 -1: 914 -3 -1: abs -3 -1: 915 -13 -1: currentThread -17 -1: ClassDefiner.java -32 -1: sun/misc/Launcher$ExtClassLoader -16 -1: Current state = -12 -1: elementCount -10 -1: unmaskNull -8 -1: csibm857 -32 -1: java/net/UnknownServiceException -10 -1: x-utf-16be -3 -1: acc -37 -1: Ljava/util/List; -23 -1: ([Ljava/lang/Thread;Z)I -17 -1: impliesIgnoreMask -23 -1: getGenericComponentType -51 -1: ()Lsun/reflect/generics/repository/ClassRepository; -34 -1: " not found. Will use interpreter. -38 -1: ()Ljava/security/AccessControlContext; -6 -1: final -8 -1: utf-16le -3 -1: 920 -3 -1: 923 -5 -1: (I)[C -43 -1: (Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer; -8 -1: csibm862 -34 -1: (Ljava/lang/ref/Reference<+TT;>;)Z -8 -1: csibm866 -20 -1: getParameterizedType -7 -1: (II[C)V -20 -1: [Ljava/lang/Package; -84 -1: (Ljava/lang/String;Ljava/security/ProtectionDomain;)Ljava/security/ProtectionDomain; -28 -1: SynchronizedRandomAccessList -18 -1: sun/misc/VMSupport -61 -1: java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry -3 -1: add -16 -1: ZipEntryIterator -11 -1: next_target -87 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class<*>; -4 -1: amod -12 -1: markedSkipLF -55 -1: java/util/concurrent/ConcurrentHashMap$EntrySpliterator -5 -1: lim= -29 -1: java/security/PermissionsHash -50 -1: (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; -19 -1: makePairwiseConvert -58 -1: (Ljava/lang/ClassValue$Entry;)V -8 -1: contents -11 -1: user.region -17 -1: RandomAccess.java -13 -1: singletonList -13 -1: policy,access -64 -1: Ljava/util/Map; -25 -1: (Ljava/lang/Appendable;)V -19 -1: (Ljava/util/List;)V -43 -1: (Ljava/lang/ClassLoader;Ljava/lang/Class;)V -19 -1: (Ljava/util/List;)Z -15 -1: America/Chicago -25 -1: (II)Ljava/nio/CharBuffer; -12 -1: getDayOfWeek -8 -1: ([BIIZ)V -28 -1: (Ljava/lang/reflect/Field;)I -28 -1: (Ljava/lang/reflect/Field;)J -18 -1: getDeclaringClass0 -11 -1: counterTime -30 -1: (Ljava/util/Collection;)V -28 -1: (Ljava/lang/reflect/Field;)V -31 -1: (IIIILjava/io/FileDescriptor;)V -25 -1: java/net/SocketPermission -20 -1: bad parameter count -18 -1: getHeaderFieldLong -26 -1: GetReflectionFactoryAction -19 -1: MIN_TRANSFER_STRIDE -17 -1: java/nio/Bits$1$1 -7 -1: getSize -33 -1: java/util/function/ToLongFunction -46 -1: (IILjava/lang/String;)Ljava/lang/StringBuffer; -10 -1: access$800 -65 -1: sun/misc/JavaSecurityProtectionDomainAccess$ProtectionDomainCache -26 -1: (Ljava/lang/ClassLoader;)V -25 -1: java/util/IdentityHashMap -26 -1: (Ljava/lang/ClassLoader;)Z -91 -1: (Ljava/util/function/ToIntFunction<-TT;>;)Ljava/util/Comparator; -26 -1: ([CIILjava/lang/String;I)I -12 -1: canonicalize -3 -1: val -8 -1: putCharB -12 -1: UTF_32LE_BOM -60 -1: (Ljava/security/CodeSource;)Ljava/security/ProtectionDomain; -44 -1: (Lsun/misc/SignalHandler;Lsun/misc/Signal;)V -26 -1: (Ljava/util/Enumeration;)V -11 -1: INVALIDATED -8 -1: putCharL -22 -1: (II)Ljava/lang/String; -7 -1: hasNext -5 -1: WRITE -20 -1: MIN_INITIAL_CAPACITY -13 -1: propertyNames -9 -1: Gregorian -13 -1: getExpiration -7 -1: minutes -7 -1: ostream -9 -1: java.lang -17 -1: forceStandardTime -9 -1: initWords -41 -1: java/lang/Thread$UncaughtExceptionHandler -9 -1: theUnsafe -27 -1: ForEachTransformedEntryTask -10 -1: forEncoder -31 -1: needsClassLoaderPermissionCheck -5 -1: ctime -25 -1: ()Ljava/nio/DoubleBuffer; -8 -1: getValue -66 -1: (Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale$Key; -42 -1: (Ljava/io/InputStream;Ljava/lang/String;)V -6 -1: august -14 -1: compileClasses -13 -1: javaNetAccess -22 -1: interpretWithArguments -4 -1: url: -14 -1: EMPTY_ITERATOR -60 -1: Ljava/util/WeakHashMap; -24 -1: java/util/jar/Attributes -12 -1: getOrDefault -19 -1: Pacific/Guadalcanal -33 -1: ()Ljava/lang/reflect/Constructor; -38 -1: java/util/Collections$UnmodifiableList -13 -1: basicTypeChar -22 -1: (Ljava/lang/String;J)J -14 -1: memberDefaults -42 -1: (Ljava/lang/Class<*>;[Ljava/lang/String;)V -38 -1: (Ljava/util/function/Consumer<-TK;>;)V -16 -1: LF_NEWINVSPECIAL -10 -1: classDepth -28 -1: [Ljava/io/ObjectStreamField; -46 -1: (Ljava/util/Collection;)Ljava/util/Collection; -91 -1: ([Ljava/lang/reflect/Method;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; -11 -1: getLocation -39 -1: (Ljava/lang/Class;[Ljava/lang/Class;Z)V -9 -1: loadTable -55 -1: Directory separator should not appear in library name: -7 -1: setTime -14 -1: getConstructor -4 -1: urls -25 -1: dispatchUncaughtException -77 -1: (ILjava/lang/Object;Ljava/lang/Class<*>;)Ljava/util/HashMap$TreeNode; -8 -1: modCount -8 -1: Opening -6 -1: ENDHDR -4 -1: cnfe -34 -1: DIRECTIONALITY_PARAGRAPH_SEPARATOR -10 -1: Asia/Amman -3 -1: MST -28 -1: DIRECTIONALITY_ARABIC_NUMBER -3 -1: all -4 -1: enum -8 -1: copyWith -12 -1: ([JI[IIJII)I -29 -1: Ljava/lang/annotation/Target; -7 -1: Thread- -14 -1: x-utf-32le-bom -38 -1: (ILjava/lang/management/MemoryUsage;)V -33 -1: Signal already used by VM or OS: -27 -1: (I)Ljava/lang/StringBuffer; -25 -1: java/text/Normalizer$Form -10 -1: x-utf-16le -34 -1: can not access a member of class -27 -1: (Ljava/nio/ByteBuffer;IFZ)V -28 -1: (Ljava/lang/ClassValue<*>;)V -16 -1: INITIAL_CAPACITY -23 -1: DirectMethodHandle.java -18 -1: reduceValuesToLong -41 -1: (Ljava/lang/String;Ljava/lang/Class<*>;)V -6 -1: unwrap -12 -1: threadStatus -5 -1: (DI)D -11 -1: fieldOffset -52 -1: java/util/concurrent/ConcurrentHashMap$EntryIterator -14 -1: ACCESS_EXECUTE -44 -1: (Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer; -29 -1: ([Ljava/lang/ThreadGroup;IZ)I -18 -1: LocalVariableTable -17 -1: ConstantPool.java -26 -1: (Ljava/nio/ByteBuffer;ID)V -4 -1: (C)B -3 -1: and -4 -1: head -126 -1: (Ljava/lang/reflect/GenericDeclaration;Lsun/reflect/generics/scope/Scope;)Lsun/reflect/generics/factory/CoreReflectionFactory; -4 -1: (C)C -16 -1: Pacific/Auckland -7 -1: Thread[ -5 -1: ([D)I -4 -1: (C)I -98 -1: ([Ljava/lang/reflect/Constructor;)[Ljava/lang/reflect/Constructor; -11 -1: fileHandler -30 -1: DIRECTIONALITY_NONSPACING_MARK -10 -1: (this Map) -14 -1: malformedCache -5 -1: ([D)V -4 -1: (C)V -26 -1: getUnicodeLocaleAttributes -4 -1: (C)Z -81 -1: (JLjava/util/function/ToLongBiFunction;JLjava/util/function/LongBinaryOperator;)J -46 -1: [Ljava/util/concurrent/ConcurrentHashMap$Node; -20 -1: Max. Heap Size: -24 -1: Ljava/lang/reflect/Type; -13 -1: EmptyIterator -8 -1: allocate -7 -1: FLUSHED -8 -1: exitVM.* -59 -1: (Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder; -19 -1: reduceEntriesToLong -15 -1: getISOLanguages -13 -1: CONSTANT_ZERO -23 -1: (I)Ljava/util/Iterator; -96 -1: Ljava/util/AbstractMap;Ljava/util/Map; -11 -1: isSynthetic -7 -1: lineBuf -30 -1: java/lang/annotation/Inherited -65 -1: Ljava/lang/Object;Ljava/lang/Iterable; -35 -1: (Ljava/lang/String;)[Ljava/io/File; -27 -1: java/security/cert/CertPath -26 -1: startRemoteManagementAgent -9 -1: shiftLeft -5 -1: stack -42 -1: (Ljava/lang/Class<*>;[Ljava/lang/Object;)V -11 -1: CheckedList -10 -1: replaceAll -86 -1: (Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode; -24 -1: (I)Ljava/nio/CharBuffer; -13 -1: image/vnd.fpx -15 -1: iso_8859-1:1987 -19 -1: (Ljava/lang/Long;)I -22 -1: sun/misc/SignalHandler -15 -1: ifModifiedSince -42 -1: (Ljava/lang/Class;)Ljava/lang/ClassLoader; -105 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Class;I[Ljava/lang/invoke/MemberName;)I -22 -1: Negative timeout value -38 -1: Ljava/io/UnsupportedEncodingException; -11 -1: removeRange -13 -1: Compiler.java -6 -1: Sorter -8 -1: aliasSet -10 -1: UNASSIGNED -34 -1: lambda$comparingByValue$1065357e$1 -34 -1: ()Ljava/lang/Class$AnnotationData; -25 -1: sun/misc/Launcher$Factory -15 -1: getLongVolatile -8 -1: vmloader -10 -1: unicodebig -10 -1: closeables -31 -1: JavaIOFileDescriptorAccess.java -7 -1: static -3 -1: arg -21 -1: library can't be null -42 -1: java/util/ArraysParallelSortHelpers$FJByte -22 -1: getDeclaringExecutable -19 -1: runFinalizersOnExit -20 -1: simpleTimeZoneParams -13 -1: Modifier.java -14 -1: pkcs11keystore -6 -1: shared -30 -1: java/net/MalformedURLException -26 -1: ()[Lsun/util/calendar/Era; -13 -1: x-MS950-HKSCS -10 -1: relativize -40 -1: (Ljava/lang/String;JJ)Ljava/lang/String; -31 -1: java/util/HashMap$ValueIterator -29 -1: MODIFY_THREADGROUP_PERMISSION -38 -1: (Ljava/lang/String;)Ljava/lang/Object; -7 -1: destroy -37 -1: (Ljava/util/List;)[Ljava/lang/String; -18 -1: (Ljava/io/File;Z)V -32 -1: Ljava/util/HashMap$Node; -18 -1: interfaceModifiers -34 -1: java/util/LinkedList$LLSpliterator -7 -1: REF_??? -23 -1: java/net/ContentHandler -20 -1: -17 -1: [Ljava/lang/Byte; -6 -1: exitVM -3 -1: att -27 -1: sun/nio/cs/UTF_16BE$Encoder -6 -1: exists -28 -1: Ljava/util/Collection<+TE;>; -48 -1: (Ljava/lang/CharSequence;)Ljava/lang/Appendable; -6 -1: getMap -52 -1: ([Ljava/lang/Class;I)Ljava/lang/reflect/Constructor; -11 -1: stackTrace[ -21 -1: slowCheckMemberAccess -33 -1: ReflectiveOperationException.java -9 -1: versionId -56 -1: Wrong number of parameters in MethodParameters attribute -14 -1: isLowSurrogate -8 -1: csPCp852 -16 -1: copyConstructors -25 -1: ()Ljava/util/Spliterator; -9 -1: closeLock -17 -1: readUnsignedShort -7 -1: 8859_13 -7 -1: 8859_15 -13 -1: TARGET_OFFSET -26 -1: (Ljava/util/Hashtable;IZ)V -44 -1: (Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer; -46 -1: (Ljava/lang/reflect/Type;)Ljava/lang/Class<*>; -25 -1: DEFAULT_CONCURRENCY_LEVEL -36 -1: Ljava/util/List; -29 -1: sun.nio.PageAlignDirectMemory -37 -1: (Ljava/lang/Class;I)Ljava/lang/Class; -12 -1: encryptBlock -8 -1: parentOf -5 -1: H_HEX -11 -1: getFloatAt0 -24 -1: VirtualMachineError.java -18 -1: getDeclaredClasses -59 -1: (Ljava/lang/AbstractStringBuilder;)Ljava/lang/StringBuffer; -42 -1: (Ljava/util/List;>;)[C -37 -1: (Ljava/lang/String;)Ljava/lang/Float; -13 -1: Iterator.java -25 -1: (Ljava/io/PrintStream;I)V -9 -1: getObject -19 -1: [Ljava/lang/String; -7 -1: SIZECTL -11 -1: isUnderflow -27 -1: sun.nio.MaxDirectMemorySize -21 -1: isNonPublicProxyClass -13 -1: toCalendarDOW -9 -1: Type.java -14 -1: aliases_IBM850 -17 -1: emptyNavigableMap -14 -1: aliases_IBM852 -14 -1: aliases_IBM855 -14 -1: aliases_IBM857 -14 -1: aliases_IBM858 -15 -1: iso_8859-4:1988 -13 -1: UnicodeScript -8 -1: getCharB -17 -1: constructorMethod -27 -1: java/util/function/Function -20 -1: getProtectionDomain0 -8 -1: getCharL -32 -1: ([Ljava/io/File;)[Ljava/net/URL; -51 -1: (Ljava/lang/Class;Z)Ljava/lang/invoke/MethodHandle; -7 -1: getenv. -5 -1: stale -14 -1: aliases_IBM862 -32 -1: java/util/spi/LocaleNameProvider -14 -1: aliases_IBM866 -51 -1: ([Ljava/lang/Class;)Ljava/lang/reflect/Constructor; -6 -1: CENDSK -36 -1: java/util/Comparators$NullComparator -34 -1: UnsafeStaticFieldAccessorImpl.java -17 -1: staticFieldOffset -12 -1: prefetchRead -4 -1: help -34 -1: (Ljava/util/concurrent/TimeUnit;)J -8 -1: getChars -19 -1: java/lang/Throwable -34 -1: Annotation Type:\n Member types: -55 -1: (Ljava/lang/Class<*>;Ljava/security/ProtectionDomain;)V -14 -1: aliases_IBM874 -17 -1: getDisplayVariant -24 -1: Ljava/net/NetPermission; -15 -1: jvmMinorVersion -11 -1: subSequence -3 -1: x86 -6 -1: double -14 -1: checkSlotCount -20 -1: java/net/InetAddress -14 -1: Principal.java -8 -1: $,;:@&=+ -17 -1: ByteBuffered.java -21 -1: sun.misc.Perf.getPerf -11 -1: finishEntry -27 -1: sun.timezone.ids.oldmapping -26 -1: (ZLjava/io/OutputStream;)V -41 -1: (Ljava/lang/String;Z)Ljava/lang/Class<*>; -32 -1: generateSerializationConstructor -6 -1: Value -40 -1: (Ljava/lang/String;Ljava/lang/String;Z)V -16 -1: previousClearBit -7 -1: theProp -51 -1: (Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V -39 -1: com.sun.javafx.application.LauncherImpl -21 -1: URLStreamHandler.java -4 -1: in -14 -1: BIT_INDEX_MASK -125 -1: (Ljava/util/Comparator<-TK;>;)Ljava/util/Comparator;>; -49 -1: (Ljava/util/Set;Ljava/lang/Class;)Ljava/util/Set; -10 -1: scaleValue -27 -1: (Ljava/nio/ByteBuffer;IDZ)V -78 -1: (Ljava/util/Collection;[Ljava/lang/reflect/Field;)V -53 -1: (I)Ljava/util/Enumeration; -38 -1: java/lang/IncompatibleClassChangeError -60 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsTask -23 -1: not a method or field: -35 -1: Ljava/nio/BufferUnderflowException; -4 -1: i386 -13 -1: US_ASCII.java -80 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)Ljava/lang/reflect/AnnotatedType; -21 -1: initializeSystemClass -6 -1: ([CI)I -18 -1: getBooleanProperty -35 -1: java/util/function/ToDoubleFunction -37 -1: (Ljava/lang/String;)Ljava/lang/Class; -28 -1: MapReduceEntriesToDoubleTask -38 -1: java/util/LinkedHashMap$LinkedEntrySet -8 -1: copySign -6 -1: ([CI)V -55 -1: sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule -12 -1: parseBoolean -3 -1: NET -3 -1: NEW -6 -1: Values -17 -1: getJavaLangAccess -9 -1: LocaleKey -3 -1: :-1 -30 -1: (Ljava/io/ObjectInputStream;)V -3 -1: NFC -3 -1: NFD -18 -1: SIMPLIFIED_CHINESE -28 -1: ()Ljava/lang/reflect/Method; -9 -1: localInit -37 -1: sun/util/locale/LocaleSyntaxException -15 -1: LambdaForm.java -5 -1: rtype -8 -1: field " -50 -1: (Ljava/lang/Class;Ljava/lang/ref/ReferenceQueue;)V -80 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)V -36 -1: java/lang/invoke/MethodHandleNatives -22 -1: (Ljava/util/Map<**>;)Z -22 -1: Ljava/lang/Class; -7 -1: SubList -14 -1: connect,accept -19 -1: declaredAnnotations -38 -1: Ljava/lang/ThreadLocal$ThreadLocalMap; -11 -1: isSpaceChar -10 -1: offerFirst -20 -1: sun/nio/ByteBuffered -17 -1: packageDefinition -7 -1: trigger -35 -1: [Ljava/lang/invoke/LambdaForm$Name; -19 -1: sun.stdout.encoding -5 -1: start -26 -1: (Ljava/util/HashMap;IIII)V -65 -1: (JLjava/util/function/Consumer<-Ljava/util/Map$Entry;>;)V -6 -1: LOCVER -3 -1: :// -42 -1: (CLjava/lang/Class<*>;Ljava/lang/Object;)Z -6 -1: friday -45 -1: sun/reflect/DelegatingConstructorAccessorImpl -15 -1: iso_8859-7:1987 -15 -1: newCalendarDate -24 -1: getAnnotatedReceiverType -32 -1: java/util/NoSuchElementException -50 -1: (Ljava/util/NavigableSet;)Ljava/util/NavigableSet; -26 -1: java/text/SimpleDateFormat -16 -1: threadInitNumber -55 -1: (TT;)Ljava/util/Spliterator; -23 -1: (Ljava/lang/Object;)TT; -3 1: bar -37 -1: getFunctionalInterfaceMethodSignature -5 -1: state -39 -1: [Ljava/lang/reflect/GenericDeclaration; -22 -1: sun/net/ProgressSource -13 -1: LLSpliterator -93 -1: Ljava/lang/Object;Ljava/util/Enumeration;Ljava/util/Iterator; -5 -1: JAPAN -11 -1: SPACE_TOTAL -20 -1: CharsetProvider.java -12 -1: CR_UNDERFLOW -7 -1: ITALIAN -11 -1: getCallerPD -13 -1: isMemberClass -38 -1: (Ljava/util/function/Consumer<-TT;>;)V -18 -1: malformedForLength -14 -1: ReflectionData -34 -1: (BZI)Ljava/lang/invoke/LambdaForm; -16 -1: forPrimitiveType -31 -1: field found in java.lang.Class -60 -1: (Ljava/lang/Void;Ljava/lang/ThreadGroup;Ljava/lang/String;)V -18 -1: DescendingIterator -25 -1: (IZLjava/lang/Runnable;)V -35 -1: ()[Ljava/lang/reflect/TypeVariable; -3 -1: bcp -23 -1: (Ljava/lang/Object;)TV; -25 -1: setDefaultAssertionStatus -10 -1: ([BIIIII)V -150 -1: (Ljava/util/concurrent/ConcurrentHashMap$Node;)Ljava/util/concurrent/ConcurrentHashMap$Node; -14 -1: Inherited: -17 -1: fileTimeToWinTime -7 -1: ([BI)[B -26 -1: java/io/OutputStreamWriter -58 -1: (Ljava/util/ListIterator<+TT;>;I)TT; -39 -1: sun/reflect/annotation/AnnotationParser -71 -1: (Ljava/nio/file/Path;Ljava/lang/String;)Ljava/nio/file/DirectoryStream; -47 -1: Ljava/util/concurrent/locks/ReentrantLock$Sync; -44 -1: (Ljava/util/Collection;[Ljava/lang/Object;)Z -43 -1: ([ILjava/util/function/IntBinaryOperator;)V -29 -1: reverseAllValidSurrogatePairs -20 -1: Ljava/nio/file/Path; -20 -1: getGenericSignature0 -42 -1: (Ljava/lang/String;Ljava/lang/Class<*>;Z)V -8 -1: manEntry -64 -1: (Ljava/lang/String;)Ljava/util/Enumeration; -36 -1: newGetDoubleIllegalArgumentException -63 -1: (Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection; -30 -1: Ergonomics Machine Class: -40 -1: ()Ljava/util/Map; -50 -1: (Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer; -30 -1: CHECK_MEMBER_ACCESS_PERMISSION -22 -1: (Ljava/lang/Boolean;)I -10 -1: V_Variable -68 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedMappingTask -61 -1: (Ljava/lang/String;IILjava/lang/String;)Ljava/nio/ByteBuffer; -21 -1: accessClassInPackage. -44 -1: java/util/WeakHashMap$WeakHashMapSpliterator -11 -1: nextElement -9 -1: separator -48 -1: java/util/zip/ZipFile$ZipFileInflaterInputStream -44 -1: java/security/UnresolvedPermissionCollection -10 -1: access$900 -44 -1: java/util/ArraysParallelSortHelpers$FJDouble -84 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodHandle; -52 -1: (Ljava/lang/ref/Finalizer;)Ljava/lang/ref/Finalizer; -19 -1: getDeclaredMethods0 -29 -1: (IJ)Ljava/lang/StringBuilder; -11 -1: Member.java -61 -1: (Ljava/lang/String;ZJJ)Ljava/lang/management/MemoryPoolMBean; -35 -1: java/lang/AssertionStatusDirectives -23 -1: Declaring class is null -56 -1: (Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)I -12 -1: java/io/File -41 -1: java/util/ConcurrentModificationException -47 -1: (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; -19 -1: parameterClassCache -8 -1: US_ASCII -15 -1: tryMonitorEnter -22 -1: Ljava/util/Collection; -67 -1: (Lsun/misc/Signal;Lsun/misc/SignalHandler;)Lsun/misc/SignalHandler; -27 -1: (Lsun/misc/JavaNioAccess;)V -9 -1: DigitOnes -5 -1: write -31 -1: NF_internalMemberNameEnsureInit -18 -1: comparableClassFor -20 -1: defineAnonymousClass -49 -1: (Ljava/io/InputStream;Lsun/net/ProgressSource;J)V -31 -1: java/lang/NumberFormatException -17 -1: remainderUnsigned -62 -1: ;>()Ljava/util/Comparator; -4 -1: Kind -20 -1: (Ljava/lang/Short;)I -8 -1: OfDouble -51 -1: ([Ljava/lang/Object;Ljava/lang/invoke/MethodType;)Z -22 -1: [Ljava/util/Map$Entry; -13 -1: instanceClass -29 -1: ()Ljava/lang/SecurityManager; -12 -1: isUnmappable -17 -1: getAllStackTraces -19 -1: LinkedValueIterator -7 -1: isDigit -10 -1: rangeCheck -89 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Ljava/util/List; -13 -1: getMethodType -21 -1: FileOutputStream.java -22 -1: ()Ljava/text/Collator; -64 -1: (Ljava/security/PrivilegedAction;)TT; -15 -1: defaultTimeZone -14 -1: emptySortedMap -35 -1: (Ljava/util/function/IntConsumer;)V -45 -1: java/util/Collections$CheckedRandomAccessList -11 -1: getPriority -7 -1: signals -6 -1: Subset -15 -1: invokeInterface -16 -1: nameRefsAreLegal -38 -1: (Ljava/lang/Object;)Ljava/lang/Object; -37 -1: Ljava/util/Collections$EmptyIterator; -9 -1: Perf.java -20 -1: java/math/BigInteger -38 -1: java/util/WeakHashMap$ValueSpliterator -71 -1: (Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder; -50 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Object;)V -21 -1: [Ljava/lang/Class<*>; -13 -1: getProperties -63 -1: (Ljava/lang/Class<*>;[B[Ljava/lang/Object;)Ljava/lang/Class<*>; -65 -1: (Ljava/util/Set;>;)[Ljava/lang/reflect/Field; -21 -1: sun/util/calendar/Era -21 -1: Ljava/nio/CharBuffer; -23 -1: (Ljava/lang/Object;JS)V -24 -1: oracle/jrockit/jfr/VMJFR -15 -1: access allowed -34 -1: ()Lsun/util/calendar/CalendarDate; -97 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; -44 -1: ([Ljava/lang/Object;[Ljava/lang/Object;III)V -48 -1: (Ljava/util/Collection;I)Ljava/util/Spliterator; -11 -1: SimpleEntry -63 -1: (Ljava/net/URL;Ljava/net/URLStreamHandler;Ljava/util/HashMap;)V -8 -1: putFloat -20 -1: linkToCallSiteMethod -8 -1: invokers -35 -1: (J)Lsun/util/calendar/BaseCalendar; -6 -1: FRENCH -26 -1: getRawParameterAnnotations -9 -1: wordIndex -29 -1: JNI_COPY_FROM_ARRAY_THRESHOLD -20 -1: sun/nio/cs/Surrogate -48 -1: (Lsun/misc/JavaSecurityProtectionDomainAccess;)V -45 -1: (Ljava/lang/ThreadLocal;Ljava/lang/Object;I)V -3 -1: NST -14 -1: getHeaderField -27 -1: (Ljava/util/jar/JarFile;Z)V -10 -1: findNative -38 -1: The following can be used with access: -29 -1: convertCertArrayToSignerArray -4 -1: .DSA -12 -1: dependencies -12 -1: SYNCHRONIZED -14 -1: x-euc-jp-linux -28 -1: URLStreamHandlerFactory.java -11 -1: checkPtypes -68 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V -13 -1: addDayOfMonth -10 -1: isAncestor -16 -1: entryDislocation -12 -1: tableSizeFor -29 -1: (ID)Ljava/lang/StringBuilder; -19 -1: getLastRuleInstance -24 -1: getGenericParameterTypes -8 -1: ,offset= -37 -1: (Ljava/net/URL;Ljava/lang/String;II)V -13 -1: UTF_16LE.java -12 -1: setTimestamp -31 -1: AtomicReferenceFieldUpdaterImpl -6 -1: L_URIC -4 -1: (D)D -14 -1: DeqSpliterator -13 -1: LF_INVVIRTUAL -171 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; -4 -1: (D)I -22 -1: Ljava/lang/Class; -4 -1: (D)J -196 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -13 -1: ,transitions= -30 -1: (Lsun/net/www/MessageHeader;)I -4 -1: (D)V -12 -1: segmentShift -4 -1: (D)Z -14 -1: Reference.java -26 -1: [Ljava/lang/reflect/Field; -26 -1: java/nio/DirectByteBufferR -31 -1: lambda$thenComparing$36697e65$1 -30 -1: (Lsun/net/www/MessageHeader;)V -55 -1: No java.nio.charset.StandardCharsets instances for you! -59 -1: (Ljava/lang/Class<*>;Ljava/lang/Object;Ljava/lang/Object;)I -19 -1: thenComparingDouble -31 -1: ()Ljava/lang/invoke/LambdaForm; -9 -1: getMillis -21 -1: StandardCharsets.java -15 -1: postDefineClass -8 -1: getExtra -3 -1: box -10 -1: nextSetBit -27 -1: java/util/ArrayList$SubList -43 -1: (Ljava/util/concurrent/ConcurrentHashMap;)V -52 -1: (Lsun/misc/URLClassPath;)Ljava/net/URLStreamHandler; -7 -1: putLong -40 -1: ;>([TT;)V -8 -1: ([DII)[D -8 -1: ([SIIS)I -8 -1: argument -12 -1: linkCallSite -56 -1: Ljava/lang/ref/WeakReference; -15 -1: returnSlotCount -68 -1: (Ljava/lang/String;[Ljava/lang/Class<*>;Z)Ljava/lang/reflect/Method; -20 -1: defaultDisplayLocale -21 -1: (Ljava/util/Vector;)V -49 -1: (Lsun/reflect/generics/visitor/TypeTreeVisitor;)V -12 -1: isAlphabetic -5 -1: perms -13 -1: dosToJavaTime -8 -1: ([SIIS)V -7 -1: valueOf -27 -1: Ljava/util/LinkedList$Node; -41 -1: (Ljava/lang/String;I)Ljava/lang/Class<*>; -38 -1: ()Ljava/nio/charset/CodingErrorAction; -4 -1: MASK -5 -1: Field -101 -1: (Ljava/lang/Class;Ljava/nio/ByteBuffer;Lsun/reflect/ConstantPool;Ljava/lang/Class;)Ljava/lang/Object; -56 -1: (Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; -9 -1: SURROGATE -72 -1: (Ljava/lang/invoke/DirectMethodHandle$StaticAccessor;)Ljava/lang/Object; -19 -1: PARAMETER_MODIFIERS -48 -1: ([Ljava/lang/Object;II)Ljava/util/stream/Stream; -56 -1: (TK;TV;Ljava/util/function/BiFunction<-TV;-TV;+TV;>;)TV; -118 -1: (JLjava/util/function/BiFunction<-TK;-TV;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; -29 -1: (Lsun/nio/ch/Interruptible;)V -45 -1: Ljava/lang/ref/Reference; -17 -1: isHeldExclusively -3 -1: NYI -15 -1: getByteVolatile -20 -1: compareAndSwapObject -29 -1: (Z)[Ljava/lang/reflect/Field; -7 -1: ([SII)V -13 -1: toLanguageTag -18 -1: StreamEncoder.java -25 -1: (IF)Ljava/nio/ByteBuffer; -18 -1: afterNodeInsertion -11 -1: accessOrder -60 -1: Lsun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget; -20 -1: META-INF/MANIFEST.MF -18 -1: getSuperInterfaces -26 -1: (Ljava/nio/ByteBuffer;IZ)C -26 -1: (Ljava/nio/ByteBuffer;IZ)D -9 -1: PROTECTED -18 -1: not visible from -26 -1: java/lang/RuntimeException -26 -1: (Ljava/nio/ByteBuffer;IZ)F -20 -1: java/net/FileNameMap -15 -1: insertArguments -8 -1: diagprop -26 -1: (Ljava/nio/ByteBuffer;IZ)I -26 -1: (Ljava/nio/ByteBuffer;IZ)J -20 -1: createContentHandler -11 -1: getProtocol -26 -1: (Ljava/nio/ByteBuffer;IZ)S -33 -1: Ljava/lang/NoSuchMethodException; -19 -1: entry name too long -40 -1: java/util/jar/JarVerifier$VerifierStream -6 -1: server -7 -1: OCTOBER -26 -1: sun/invoke/util/VerifyType -6 -1: domain -9 -1: getUnsafe -5 -1: ([Z)I -4 -1: cons -42 -1: ()Ljava/lang/ReflectiveOperationException; -4 -1: byte -29 -1: java/util/function/BiConsumer -24 -1: getJavaUtilZipFileAccess -37 -1: ([Ljava/lang/Object;)Ljava/util/List; -27 -1: timeout can not be negative -62 -1: Ljava/util/Map; -16 -1: getOurStackTrace -34 -1: (J)Ljava/lang/ref/Reference<+TT;>; -50 -1: Lsun/reflect/generics/repository/MethodRepository; -20 -1: MIN_BYTE_BUFFER_SIZE -3 -1: buf -13 -1: getAttributes -6 -1: GERMAN -38 -1: java/security/NoSuchAlgorithmException -20 -1: Direct buffer memory -6 -1: (IIZ)V -27 -1: JVMTI_THREAD_STATE_RUNNABLE -26 -1: [Ljava/io/File$PathStatus; -36 -1: (Ljava/util/List;Ljava/lang/Class;)V -13 -1: JarIndex.java -34 -1: java/lang/Character$CharacterCache -8 -1: csIBM857 -10 -1: LineReader -28 -1: Ljava/lang/RuntimeException; -30 -1: ()Ljava/util/Enumeration; -12 -1: getSeparator -124 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object; -97 -1: Ljava/util/Map;>; -21 -1: ConstantCallSite.java -40 -1: sun/util/locale/provider/LocaleResources -101 -1: ;>(Ljava/util/function/Function<-TT;+TU;>;)Ljava/util/Comparator; -4 -1: copy -23 -1: sun/security/util/Debug -10 -1: isAbsolute -34 -1: (Ljava/lang/invoke/MethodHandle;)V -34 -1: (Ljava/lang/invoke/MethodHandle;)Z -48 -1: ()[Ljava/util/concurrent/ConcurrentHashMap$Node; -34 -1: (Lsun/reflect/LangReflectAccess;)V -8 -1: csIBM862 -8 -1: csIBM866 -64 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToDoubleTask -39 -1: No java.util.Objects instances for you! -68 -1: (Ljava/util/PrimitiveIterator$OfInt;JI)Ljava/util/Spliterator$OfInt; -19 -1: Illegal class name -24 -1: uncaughtExceptionHandler -12 -1: runFinalizer -23 -1: java/io/FileInputStream -41 -1: (Ljava/lang/Class<*>;Ljava/lang/String;)V -98 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; -30 -1: java/nio/charset/CoderResult$1 -20 -1: SourceDebugExtension -30 -1: java/nio/charset/CoderResult$2 -69 -1: ([Ljava/security/ProtectionDomain;[Ljava/security/ProtectionDomain;)Z -14 -1: 1.8.0-internal -16 -1: ReduceValuesTask -13 -1: toLowerString -14 -1: newPrintStream -13 -1: unicodelittle -19 -1: getClassLoadingLock -9 -1: DigitTens -80 -1: (Ljava/lang/Class<*>;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType; -12 -1: sun_eu_greek -21 -1: getBootstrapClassPath -9 -1: volatile -15 -1: UnmodifiableMap -21 -1: enumConstantDirectory -10 -1: getContent -4 -1: cosh -74 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; -11 -1: ([JII[JII)V -28 -1: java/lang/reflect/Executable -17 -1: MapReduceKeysTask -6 -1: isOpen -17 -1: AnnotationDefault -17 -1: Already connected -27 -1: (Lsun/misc/JavaNetAccess;)V -34 -1: ([BILjava/nio/charset/Charset;Z)[B -55 -1: Ljava/lang/invoke/DirectMethodHandle$EnsureInitialized; -8 -1: Set.java -10 -1: DEAD_ENTRY -7 -1: nextInt -3 -1: wtb -23 -1: java/util/Collections$1 -86 -1: (Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/visitor/Reifier; -23 -1: java/util/Collections$2 -23 -1: java/util/Collections$3 -18 -1: DoubleCumulateTask -22 -1: skip value is negative -85 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/lang/String;)Lsun/nio/cs/StreamDecoder; -5 -1: \\[\\]$ -34 -1: Ljava/util/NoSuchElementException; -3 -1: NaN -30 -1: sun/util/calendar/CalendarDate -10 -1: V_Constant -20 -1: java/lang/Comparable -9 -1: text/html -20 -1: -9223372036854775808 -20 -1: DataInputStream.java -20 -1: Member defaults: -35 -1: Ljava/lang/ref/ReferenceQueue$Lock; -8 -1: getBytes -17 -1: CodePointIterator -11 -1: Signal.java -19 -1: javaHomePrefixCache -12 -1: replaceFirst -37 -1: Ljava/lang/IndexOutOfBoundsException; -39 -1: (Ljava/lang/String;ZI)Ljava/lang/Class; -21 -1: initSystemClassLoader -28 -1: America/Indiana/Indianapolis -47 -1: (Ljava/security/Permission;Ljava/lang/Object;)V -27 -1: java/net/URISyntaxException -21 -1: createSecurityManager -7 -1: suspend -12 -1: L_UNRESERVED -17 -1: checkMemberAccess -12 -1: CoreCounters -19 -1: java/net/HttpCookie -8 -1: isGetter -17 -1: setDaylightSaving -27 -1: java.launcher.javafx.error1 -53 -1: java/util/concurrent/ConcurrentHashMap$CollectionView -16 -1: readUnsignedByte -47 -1: (Ljava/lang/String;)Ljava/net/URLStreamHandler; -40 -1: (Z)[Ljava/lang/reflect/Constructor; -14 -1: javaLangAccess -5 -1: apply -8 -1: getFloat -15 -1: getD3DAvailable -25 -1: startLocalManagementAgent -7 -1: RUNTIME -22 -1: LocalVariableTypeTable -8 -1: doOutput -16 -1: CheckedSortedSet -10 -1: zoneOffset -64 -1: (Ljava/security/Permission;)Ljava/security/PermissionCollection; -13 -1: hasUnresolved -13 -1: user.language -11 -1: getDoubleAt -14 -1: getQueueLength -37 -1: java/nio/DirectByteBuffer$Deallocator -6 -1: ASHIFT -9 -1: checkPath -80 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/Class;)V -6 -1: CENEXT -16 -1: doubleToLongBits -11 -1: copyToArray -9 -1: copyField -36 -1: ()Lsun/util/calendar/Gregorian$Date; -53 -1: (ILjava/lang/Object;)Ljava/util/HashMap$Node; -44 -1: (TK;TV;Ljava/lang/ref/ReferenceQueue;)V -35 -1: java/util/Collections$EmptyIterator -38 -1: sealing violation: can't seal package -37 -1: (Ljava/util/Queue;Ljava/lang/Class;)V -129 -1: (Ljava/lang/Class<*>;Ljava/lang/String;[Ljava/lang/Class<*>;Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B[B)V -18 -1: HashMapSpliterator -8 -1: putShort -23 -1: (Ljava/lang/Object;II)V -7 -1: GERMANY -13 -1: toTitleString -102 -1: (Ljava/util/ArrayPrefixHelpers$CumulateTask;Ljava/util/function/BinaryOperator;[Ljava/lang/Object;II)V -44 -1: ([Ljava/lang/Object;)Ljava/util/Spliterator; -6 -1: unused -25 -1: java/net/URLClassLoader$1 -25 -1: java/net/URLClassLoader$2 -25 -1: java/net/URLClassLoader$3 -25 -1: java/net/URLClassLoader$4 -12 -1: getFixedDate -25 -1: java/net/URLClassLoader$5 -4 -1: time -25 -1: java/net/URLClassLoader$6 -25 -1: java/net/URLClassLoader$7 -14 -1: historicalName -12 -1: normalizeKey -13 -1: MIN_SURROGATE -41 -1: java/nio/charset/CharacterCodingException -18 -1: java/lang/Iterable -8 -1: ([JII)[J -103 -1: Ljava/util/Map;Ljava/lang/annotation/Annotation;>; -18 -1: putBooleanVolatile -5 -1: Entry -11 -1: CounterCell -12 -1: monitorEnter -10 -1: skipBuffer -15 -1: hasMoreElements -24 -1: newIllegalStateException -24 -1: Ljava/lang/LinkageError; -12 -1: getEntryFlag -44 -1: (Ljava/lang/Throwable$PrintStreamOrWriter;)V -18 -1: java/nio/IntBuffer -17 -1: jdk_minor_version -28 -1: DIRECTIONALITY_RIGHT_TO_LEFT -15 -1: getAndSetObject -7 -1: sizeCtl -15 -1: Ljava/util/Set; -32 -1: (I)Ljava/lang/invoke/LambdaForm; -16 -1: runFinalization0 -30 -1: Ljava/lang/reflect/Executable; -15 -1: compareUnsigned -5 -1: nkeys -31 -1: Ljava/nio/channels/FileChannel; -40 -1: sun/reflect/generics/tree/ClassSignature -22 -1: (Ljava/lang/Object;I)B -22 -1: (Ljava/lang/Object;I)C -22 -1: (Ljava/lang/Object;I)D -7 -1: JANUARY -30 -1: newGetIllegalArgumentException -22 -1: (Ljava/lang/Object;I)F -22 -1: (Ljava/lang/Object;I)I -22 -1: (Ljava/lang/Object;I)J -28 -1: generateNamedFunctionInvoker -38 -1: (Ljava/lang/String;)Ljava/time/ZoneId; -19 -1: lambda$codePoints$2 -4 -1: Null -7 -1: setEras -15 -1: lambda$chars$15 -14 -1: CollectionView -24 -1: (C)Ljava/io/PrintStream; -22 -1: (Ljava/lang/Object;I)S -96 -1: (Ljava/security/AccessControlContext;Lsun/security/util/Debug;Ljava/security/ProtectionDomain;)V -17 -1: getJulianCalendar -22 -1: (Ljava/lang/Object;I)V -17 -1: getMethodAccessor -9 -1: not owner -35 -1: java/lang/reflect/ParameterizedType -15 -1: ValueCollection -22 -1: (Ljava/lang/Object;I)Z -4 -1: utf8 -5 -1: CHINA -9 -1: sprintf0d -18 -1: java/nio/file/Path -35 -1: DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC -30 -1: URI has an authority component -43 -1: (Ljava/lang/Object;)Ljava/util/Spliterator; -15 -1: -62 -1: (Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale; -6 -1: ([ZZ)V -10 -1: getContext -12 -1: content-type -99 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;ILjava/util/WeakHashMap$Entry;)V -51 -1: (Ljava/util/concurrent/ConcurrentHashMap;)V -27 -1: Invalid constant pool index -20 -1: getUnicodeLocaleType -43 -1: Ljava/nio/charset/CharacterCodingException; -113 -1: (Ljava/net/URL;Ljava/net/URLStreamHandler;Ljava/util/HashMap;)V -56 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; -24 -1: Lsun/misc/SignalHandler; -8 -1: readlink -125 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind<*>;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey; -11 -1: initStatics -15 -1: unmappableCache -13 -1: fixMethodType -25 -1: sun/net/www/MessageHeader -3 -1: cdt -27 -1: Ljava/util/Locale$Category; -59 -1: (ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; -8 -1: Accessor -14 -1: mapLibraryName -54 -1: (Lsun/misc/URLClassPath$JarLoader;)Lsun/misc/JarIndex; -24 -1: ZoneOffsetTransitionRule -7 -1: getChar -3 -1: cee -25 -1: MapReduceValuesToLongTask -20 -1: declaredPublicFields -44 -1: (Ljava/lang/ClassLoader;Ljava/lang/String;)J -13 -1: removeElement -20 -1: Ljava/nio/ByteOrder; -8 -1: parallel -67 -1: (Ljava/lang/reflect/Constructor;Lsun/reflect/ConstructorAccessor;)V -22 -1: java/util/zip/ZipCoder -8 -1: ([ZIIZ)V -45 -1: (Ljava/lang/String;Ljava/lang/CharSequence;)Z -8 -1: february -40 -1: java/util/zip/ZipFile$ZipFileInputStream -47 -1: java/nio/charset/Charset$ExtendedProviderHolder -13 -1: IEEEremainder -15 -1: sun/misc/Perf$1 -9 -1: abstract -20 -1: ()Ljava/time/ZoneId; -7 -1: ONE_DAY -92 -1: (Ljava/util/concurrent/ConcurrentHashMap$Node;)Ljava/util/concurrent/ConcurrentHashMap$Node; -45 -1: (Ljava/util/ListIterator;I)Ljava/lang/Object; -16 -1: Buffer size <= 0 -9 -1: checkName -11 -1: getJarEntry -20 -1: Replacement too long -53 -1: (Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder; -12 -1: isWhitespace -15 -1: csISOLatinGreek -70 -1: (Ljava/lang/reflect/Constructor<*>;Lsun/reflect/ConstructorAccessor;)V -20 -1: TypeAnnotationTarget -3 -1: No -27 -1: Lsun/reflect/FieldAccessor; -12 -1: doPrivileged -83 -1: (JLjava/util/function/ToIntFunction<-TV;>;ILjava/util/function/IntBinaryOperator;)I -60 -1: (Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry; -11 -1: changeEntry -18 -1: MessageHeader.java -51 -1: ([Ljava/lang/String;Ljava/util/Map;)Ljava/util/Map; -9 -1: castEntry -16 -1: ACCESS_MODIFIERS -11 -1: newInstance -24 -1: lastIndexOfSupplementary -13 -1: JZENTRY_EXTRA -5 -1: LONGS -7 -1: domain -16 -1: protocolPathProp -21 -1: java/util/Hashtable$1 -10 -1: isSameDate -23 -1: (I)Ljava/nio/file/Path; -33 -1: java/util/PrimitiveIterator$OfInt -7 -1: ([II)[I -8 -1: variant= -29 -1: (Ljava/util/Collection<*>;Z)Z -38 -1: already loaded in another classloader -10 -1: setSeconds -9 -1: makeShort -59 -1: ClassLoader.findLibrary failed to return an absolute path: -26 -1: java/util/jar/JarException -9 -1: setCharAt -13 -1: initCauseFrom -13 -1: val$fieldName -18 -1: MIN_HIGH_SURROGATE -60 -1: (Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule;)B -25 -1: getDayOfWeekFromFixedDate -10 -1: maybeReBox -9 -1: getHandle -60 -1: (Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule;)I -59 -1: ([Ljava/lang/Class<*>;)Ljava/lang/reflect/Constructor; -3 -1: cis -11 -1: getIssuerDN -9 -1: codebase= -80 -1: (ILjava/lang/invoke/BoundMethodHandle$SpeciesData;)Ljava/lang/invoke/LambdaForm; -29 -1: addThreadDumpForSynchronizers -6 -1: FRANCE -77 -1: ([TU;ILjava/lang/Class<+[TT;>;)[TT; -45 -1: ()Ljava/util/List; -16 -1: putFloatVolatile -34 -1: (Ljava/lang/Class;)Ljava/util/Map; -28 -1: ()Ljava/security/Permission; -28 -1: (Ljava/lang/CharSequence;I)I -51 -1: ()Ljava/util/Enumeration; -25 -1: (II)Ljava/nio/ByteBuffer; -20 -1: BasicPermission.java -5 -1: isNaN -48 -1: (Ljava/lang/Throwable;)Ljava/lang/InternalError; -10 -1: ONE_MINUTE -55 -1: (Ljava/lang/invoke/DirectMethodHandle$StaticAccessor;)J -13 -1: DAYS_IN_MONTH -7 -1: domains -10 -1: isUnshared -58 -1: Ljava/lang/Number;Ljava/lang/Comparable; -47 -1: (Ljava/util/List;)Ljava/security/cert/CertPath; -28 -1: ()Ljava/util/Enumeration<*>; -34 -1: sun/misc/Launcher$ExtClassLoader$1 -22 -1: (CLjava/lang/Object;)Z -64 -1: Ljava/lang/ref/WeakReference; -7 -1: ENGLISH -27 -1: (Ljava/util/zip/Inflater;)V -24 -1: makeArrayElementAccessor -72 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; -48 -1: (Ljava/util/jar/JarFile;)Ljava/util/Enumeration; -48 -1: (Ljava/lang/Class;)Ljava/lang/invoke/MethodType; -15 -1: getNthDayOfWeek -16 -1: printHelpMessage -15 -1: getAbsoluteFile -9 -1: OPEN_READ -19 -1: willGMTOffsetChange -28 -1: (Ljava/util/LinkedHashMap;)V -37 -1: java/security/AllPermissionCollection -5 -1: [id=" -34 -1: java/lang/invoke/BoundMethodHandle -31 -1: ()Ljava/security/cert/CertPath; -50 -1: java/util/ArraysParallelSortHelpers$FJShort$Sorter -14 -1: StaticAccessor -22 -1: synchronizedCollection -53 -1: ([Ljava/io/File;)Ljava/security/AccessControlContext; -37 -1: (Ljava/lang/Class;Ljava/lang/Class;)Z -14 -1: codePointCount -13 -1: is param at -37 -1: Ljava/lang/invoke/MemberName$Factory; -20 -1: annotationDataOffset -31 -1: protocol doesn't support output -11 -1: hostAddress -12 -1: ,dstSavings= -35 -1: java.lang.Integer.IntegerCache.high -15 -1: ParallelLoaders -48 -1: (Ljava/util/Locale;)Lsun/util/locale/BaseLocale; -8 -1: getSize0 -22 -1: checkCreateClassLoader -8 -1: transfer -32 -1: (Lsun/misc/JavaSecurityAccess;)V -26 -1: ()Ljava/net/URLConnection; -3 -1: cmp -9 -1: setMillis -34 -1: sun/util/calendar/AbstractCalendar -19 -1: getDirectBufferPool -7 -1: ([FII)V -28 -1: ([C)Ljava/lang/StringBuffer; -54 -1: (Ljava/lang/Class<*>;)Ljava/security/ProtectionDomain; -26 -1: (Ljava/nio/ByteBuffer;IF)V -11 -1: discardMark -71 -1: (Ljava/lang/Class;)Lsun/util/locale/provider/LocaleServiceProviderPool; -30 -1: java/io/UTFDataFormatException -53 -1: (Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult; -48 -1: java/util/concurrent/ConcurrentHashMap$Traverser -5 -1: ([F)I -37 -1: (IC)Ljava/lang/AbstractStringBuilder; -27 -1: Ljava/util/jar/JarVerifier; -22 -1: java/util/Spliterators -32 -1: java/lang/invoke/MutableCallSite -20 -1: java/io/Serializable -5 -1: ([F)V -35 -1: (Ljava/security/ProtectionDomain;)V -33 -1: ()Ljava/lang/ref/Reference<+TT;>; -10 -1: unlinkLast -6 -1: (JSZ)V -8 -1: isStatic -14 -1: subclassAudits -23 -1: (Ljava/lang/String;)TT; -17 -1: java.awt.headless -9 -1: -39 -1: Lsun/util/locale/LocaleSyntaxException; -8 -1: location -3 -1: cos -27 -1: createGarbageCollectorMBean -20 -1: MAX_MH_INVOKER_ARITY -75 -1: (Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult; -14 -1: Cloneable.java -50 -1: (Lsun/reflect/DelegatingConstructorAccessorImpl;)V -26 -1: sun/nio/ch/FileChannelImpl -51 -1: (Ljava/lang/Class;Ljava/lang/reflect/Constructor;)V -18 -1: Unknown byte order -28 -1: ()[Lsun/invoke/util/Wrapper; -21 -1: getReadClassBytesTime -64 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodTypeForm; -11 -1: setDelegate -20 -1: (Ljava/util/List;)[C -7 -1: usemmap -22 -1: (CC)Ljava/lang/String; -34 -1: sun/invoke/util/BytecodeDescriptor -21 -1: getJavaSecurityAccess -53 -1: (Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult; -7 -1: ibm-737 -19 -1: (Ljava/lang/Enum;)I -4 -1: rint -11 -1: Constructor -9 -1: arraycopy -35 -1: ([D)Ljava/util/stream/DoubleStream; -13 -1: comparingLong -40 -1: Ljava/lang/Object; -23 -1: OutputStreamWriter.java -8 -1: getShort -17 -1: CLASSPATH_LASTOCC -13 -1: createNewFile -14 -1: internalValues -34 -1: Ljava/lang/IllegalAccessException; -23 -1: (JILjava/lang/Object;)V -27 -1: sun.misc.URLClassPath.debug -45 -1: [Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; -35 -1: ()Lsun/reflect/ConstructorAccessor; -12 -1: classEnabled -23 -1: cachedFixedDateNextJan1 -48 -1: (Ljava/util/Locale$LocaleKey;)Ljava/util/Locale; -26 -1: (Ljava/lang/ThreadGroup;)V -7 -1: setErr0 -6 -1: CENFLG -26 -1: (Ljava/lang/ThreadGroup;)Z -18 -1: sun/misc/MetaIndex -3 -1: crc -34 -1: (Z)Ljava/lang/invoke/MethodHandle; -12 -1: replaceNames -15 -1: java/util/Stack -57 -1: Ljava/util/Vector; -89 -1: (JLjava/util/function/ToDoubleFunction<-TV;>;DLjava/util/function/DoubleBinaryOperator;)D -24 -1: permission can't be null -22 -1: Unable to connect to: -44 -1: (Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer; -14 -1: floatToIntBits -11 -1: getLastRule -6 -1: EXTCRC -26 -1: java/net/InetSocketAddress -36 -1: (Lsun/misc/URLClassPath$JarLoader;)V -27 3: sun/launcher/LauncherHelper -8 -1: ecma-118 -49 -1: (Ljava/net/URL;Ljava/lang/String;)[Ljava/net/URL; -13 -1: hashCodeValue -5 -1: CESU8 -21 -1: appendVmSelectMessage -13 -1: bindImmediate -12 -1: closeLoaders -16 -1: emptySpliterator -28 -1: (J)Ljava/time/LocalDateTime; -22 -1: [Ljava/lang/Character; -5 -1: certs -6 -1: (null) -25 -1: java/io/ObjectInputStream -27 -1: ([Ljava/lang/ThreadGroup;)I -3 -1: cst -3 -1: csu -20 -1: java/nio/ShortBuffer -53 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)V -4 -1: (Z)I -24 -1: Ljava/io/FileDescriptor; -6 -1: cclass -10 -1: , profile -39 -1: (Ljava/lang/String;)Ljava/lang/Process; -4 -1: (Z)V -5 -1: toURI -24 -1: ConstructorAccessor.java -5 -1: toURL -18 -1: addAllIfNotPresent -4 -1: (Z)Z -5 -1: parse -11 -1: isPrimitive -42 -1: (Ljava/io/File;)Ljava/lang/ProcessBuilder; -36 -1: (Ljava/util/Date;)Ljava/lang/String; -23 -1: getFormalTypeParameters -13 -1: Resource.java -7 -1: ibm-775 -6 -1: isEnum -24 -1: setJavaUtilZipFileAccess -21 -1: \t[CIRCULAR REFERENCE: -51 -1: (Ljava/lang/CharSequence;)Ljava/util/regex/Matcher; -24 -1: (I)Ljava/nio/ByteBuffer; -53 -1: sun/reflect/generics/repository/GenericDeclRepository -3 -1: xor -17 -1: invokeBasicMethod -27 -1: java/lang/invoke/LambdaForm -99 -1: (Ljava/util/jar/Manifest;Ljava/util/jar/JarEntry;Ljava/io/InputStream;Ljava/util/jar/JarVerifier;)V -46 -1: Lsun/reflect/generics/factory/GenericsFactory; -37 -1: sun/misc/Launcher$BootClassPathHolder -10 -1: BindCaller -24 -1: java/lang/reflect/Member -32 -1: java/lang/management/ThreadState -5 -1: (IB)V -21 -1: RuntimeException.java -5 -1: ended -17 -1: java/util/TreeSet -7 -1: : no !/ -16 -1: java/util/Vector -9 -1: nextAfter -22 -1: Ljava/lang/Deprecated; -20 -1: requestedCharsetName -37 -1: ([JIII)Ljava/util/Spliterator$OfLong; -14 -1: internArgument -11 -1: getTimeZone -10 -1: isValidKey -11 -1: LAST_RESULT -43 -1: sun/reflect/annotation/TypeAnnotationParser -13 -1: encodedInPath -52 -1: (Ljava/security/PrivilegedAction;)Ljava/lang/Object; -4 -1: LL_L -34 -1: java/nio/charset/CodingErrorAction -10 -1: copyFields -11 -1: getConstant -9 -1: threshold -13 -1: aliases_UTF_8 -27 -1: (Ljava/util/ArrayDeque;II)V -29 -1: Ljava/lang/ref/SoftReference; -19 -1: indexedBinarySearch -11 -1: containsKey -81 -1: ([Ljava/lang/ClassValue$Entry;Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; -86 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class<*>;II)Ljava/lang/invoke/MethodHandle; -15 -1: cannot convert -25 -1: getSystemResourceAsStream -46 -1: (Ljava/util/Properties;)Ljava/util/Properties; -12 -1: reverseOrder -16 -1: getSystemPackage -8 -1: ([SII)[S -19 -1: makeAccessException -100 -1: (JLjava/util/function/Function<-TK;+TU;>;Ljava/util/function/Consumer<-TU;>;)V -39 -1: ([Ljava/lang/Class;I)[Ljava/lang/Class; -19 -1: Ljava/lang/Boolean; -6 -1: Hidden -47 -1: java/lang/invoke/MethodHandleImpl$ArrayAccessor -5 -1: APRIL -8 -1: emptySet -11 -1: getCombiner -58 -1: (Ljava/lang/String;I[Ljava/lang/invoke/LambdaForm$Name;I)V -24 -1: java.system.class.loader -14 -1: Can't handle: -16 -1: isNullConversion -38 -1: ()Ljava/util/HashMap$TreeNode; -29 -1: referenceKindIsConsistentWith -11 -1: flushBuffer -8 -1: putField -27 -1: ()Ljava/security/PublicKey; -53 -1: ()Ljava/util/stream/Stream; -10 -1: pathToURLs -26 -1: throwIllegalStateException -10 -1: markedChar -14 -1: isNativeMethod -36 -1: (I)Ljava/lang/AbstractStringBuilder; -54 -1: java/util/concurrent/ConcurrentHashMap$ReservationNode -45 -1: Lsun/misc/JavaSecurityProtectionDomainAccess; -62 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;Ljava/lang/Object;I)V -7 -1: subList -8 -1: UTF_32BE -6 -1: U_None -50 -1: sun/reflect/generics/repository/AbstractRepository -62 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;Ljava/lang/Object;I)Z -43 -1: sun/net/www/protocol/file/FileURLConnection -13 -1: setZoneOffset -43 -1: Underlying input stream returned zero bytes -54 -1: [a-zA-Z_$][a-zA-Z0-9_$]*([.][a-zA-Z_$][a-zA-Z0-9_$]*)* -13 -1: containsValue -44 -1: (Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer; -25 -1: isNullReferenceConversion -38 -1: Ljava/util/Vector; -6 -1: toFile -7 -1: getSlot -17 -1: (Ljava/net/URI;)V -32 -1: java.security.cert.Certificate: -24 -1: ()Lsun/misc/PerfCounter; -11 -1: Asia/Hebron -16 -1: createMemoryPool -10 -1: addToCache -29 -1: Ljava/lang/invoke/DontInline; -39 -1: java/lang/ref/Finalizer$FinalizerThread -58 -1: (Ljava/lang/Class;)Lsun/reflect/generics/scope/ClassScope; -20 -1: getBooleanAttributes -15 -1: parallelLockMap -34 -1: java/util/Vector$VectorSpliterator -21 -1: createMemoryPoolMBean -15 -1: no content-type -41 -1: Couldn't find 3-letter language code for -5 -1: slash -34 -1: Ljava/lang/annotation/ElementType; -8 -1: isSetter -26 -1: (ZLjava/lang/String;JJJZ)V -6 -1: GMT_ID -73 -1: ()[Ljava/lang/reflect/TypeVariable;>; -56 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object; -32 -1: (Ljava/util/Set;)Ljava/util/Set; -4 -1: stop -62 -1: (Ljava/lang/String;IILjava/lang/String;I)Ljava/nio/ByteBuffer; -11 -1: genericInfo -11 -1: listToArray -26 -1: ()Ljava/util/jar/Manifest; -13 -1: putOrderedInt -5 -1: flush -13 -1: ArrayAccessor -4 -1: Name -95 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V -68 -1: (Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; -23 -1: java/lang/ref/Reference -37 -1: (Ljava/nio/file/attribute/FileTime;)J -14 -1: MIN_CODE_POINT -9 -1: ISO8859-1 -9 -1: ISO8859-2 -9 -1: ISO8859-5 -34 -1: ([CILjava/nio/charset/Charset;Z)[C -9 -1: ISO8859-9 -9 -1: getUTF8At -12 -1: java/net/URI -67 -1: (Ljava/io/DataInput;Ljava/lang/String;)Lsun/util/calendar/ZoneInfo; -22 -1: ListCompositionPattern -67 -1: (Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class; -3 1: xxx -12 -1: java/net/URL -27 -1: Can't overwrite cause with -30 -1: sun/util/locale/BaseLocale$Key -22 -1: forkSecondaryFinalizer -23 -1: java/security/Principal -8 -1: makeSite -17 -1: NEGATIVE_INFINITY -12 -1: addUnstarted -12 -1: internalForm -9 -1: cellsBusy -23 -1: (Ljava/lang/Object;IJ)V -13 -1: getParameters -6 -1: H_PATH -10 -1: L_REG_NAME -139 -1: Ljava/util/AbstractMap;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; -6 -1: latin0 -10 -1: addSeconds -6 -1: latin1 -6 -1: latin2 -6 -1: latin4 -6 -1: latin5 -17 -1: getWaitingThreads -6 -1: latin9 -21 -1: java/util/Comparators -10 -1: trimToSize -96 -1: (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/Collection; -43 -1: ([JLjava/util/function/IntToLongFunction;)V -23 -1: GET_COMBINER_PERMISSION -20 -1: lambda$replaceAll$14 -5 -1: KOREA -20 -1: getJvmSpecialVersion -9 -1: dumpStack -16 -1: CACHE_LOAD_LIMIT -43 -1: GSS LoginConfigImpl debugging -26 -1: (DLjava/lang/Appendable;)V -8 -1: forName0 -35 -1: java/lang/ClassLoader$NativeLibrary -46 -1: java/util/concurrent/ConcurrentHashMap$Segment -24 -1: getDeclaredAnnotationMap -89 -1: java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1 -20 -1: java_runtime_version -26 -1: java/util/stream/IntStream -16 -1: Ljava/io/Writer; -69 -1: ()Ljava/util/SortedMap; -15 -1: getClassLoader0 -6 -1: x86_64 -11 -1: isInterface -15 -1: MODIFIER_SYMBOL -44 -1: Note: Separate multiple options with a comma -9 -1: recursive -19 -1: java/nio/CharBuffer -8 -1: capacity -17 -1: validateMainClass -50 -1: (Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; -22 -1: (Ljava/lang/Object;J)B -22 -1: (Ljava/lang/Object;J)C -22 -1: (Ljava/lang/Object;J)D -17 -1: not a method type -22 -1: (Ljava/lang/Object;J)F -5 -1: count -32 -1: AtomicReferenceFieldUpdater.java -22 -1: (Ljava/lang/Object;J)I -14 -1: methodAccessor -22 -1: (Ljava/lang/Object;J)J -7 -1: isError -51 -1: (Ljava/nio/Buffer;II)Ljava/nio/charset/CoderResult; -53 -1: (BZLjava/lang/Class<*>;)Ljava/lang/invoke/LambdaForm; -25 -1: -5 -1: [pos= -14 -1: lambda$chars$1 -9 -1: CELLVALUE -16 -1: haveLeftoverChar -22 -1: ([Ljava/lang/String;)V -32 -1: java/lang/InstantiationException -7 -1: SIG_IGN -13 -1: ZipUtils.java -50 -1: Ljava/lang/ref/ReferenceQueue; -22 -1: (Ljava/lang/Object;J)S -69 -1: Ljava/util/HashMap; -16 -1: newInternalError -22 -1: (Ljava/lang/Object;J)V -9 -1: ABBR_MASK -5 -1: array -22 -1: (Ljava/lang/Object;J)Z -13 -1: FilteringMode -30 -1: java/util/stream/StreamSupport -19 -1: retrieveDisplayName -56 -1: (Ljava/util/TimeZone;)Lsun/util/calendar/Gregorian$Date; -10 -1: val$values -9 -1: normalize -28 -1: (II)Ljava/lang/CharSequence; -16 -1: serialVersionUID -7 -1: getPath -25 -1: (ILjava/lang/Class<*>;Z)V -13 -1: thenComparing -51 -1: (Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; -36 -1: ()[Ljava/lang/annotation/Annotation; -14 -1: MetaIndex.java -8 -1: identity -15 -1: findSystemClass -24 -1: privateGetDeclaredFields -27 -1: java/lang/ref/SoftReference -19 -1: useCanonPrefixCache -3 -1: dec -3 -1: PLT -8 -1: UTF_32LE -17 -1: java/util/HashMap -12 -1: toEpochMilli -9 -1: intStream -11 -1: Caused by: -31 -1: java/nio/charset/CharsetDecoder -30 -1: is being checked -11 -1: parseHeader -25 -1: ACCUMULATED_DAYS_IN_MONTH -34 -1: newGetByteIllegalArgumentException -21 -1: checkPropertiesAccess -13 -1: StackMapTable -8 -1: addCount -51 -1: (Ljava/lang/invoke/MethodHandle;)Ljava/lang/String; -9 -1: authority -15 -1: iso-10646-ucs-2 -6 -1: SUNDAY -22 -1: LocalGregorianCalendar -9 -1: listRoots -32 -1: Lsun/reflect/generics/tree/Tree; -38 -1: [Ljava/util/WeakHashMap$Entry; -11 -1: nativeOrder -5 -1: long0 -5 -1: long1 -5 -1: long2 -5 -1: long3 -17 -1: capacityIncrement -5 -1: long4 -97 -1: (Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; -31 -1: Ljava/lang/CharacterDataLatin1; -5 -1: long5 -5 -1: long6 -5 -1: long7 -17 -1: reduceValuesToInt -13 -1: package2certs -13 -1: isTypeVisible -30 -1: java/lang/ref/PhantomReference -47 -1: ()Ljava/util/stream/Stream; -9 -1: longValue -3 -1: PNT -10 -1: storeToXML -10 -1: getMethod0 -12 -1: constantZero -7 -1: promise -116 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/MethodRepository; -32 -1: DIRECTIONALITY_SEGMENT_SEPARATOR -9 -1: byteOrder -9 -1: isPromise -4 -1: isOn -6 -1: LOCCRC -10 -1: setDefault -9 -1: setHandle -15 -1: java/nio/Buffer -37 -1: (Ljava/lang/String;I)Ljava/lang/Long; -10 -1: Float.java -12 -1: showSettings -27 -1: (Ljava/io/FileDescriptor;)I -27 -1: (Ljava/io/FileDescriptor;)J -21 -1: java/util/Spliterator -22 -1: CodingErrorAction.java -11 -1: isMalformed -27 -1: java/util/PrimitiveIterator -15 -1: THROW_EXCEPTION -15 -1: copyToCharArray -26 -1: ()Ljava/util/jar/JarEntry; -27 -1: (Ljava/io/FileDescriptor;)V -11 -1: getEncoding -48 -1: (Ljava/lang/ThreadLocal<*>;Ljava/lang/Object;I)V -17 -1: java.runtime.name -28 -1: (Lsun/invoke/util/Wrapper;)Z -20 -1: annotationTypeOffset -27 -1: (J)Ljava/lang/StringBuffer; -15 -1: METHOD_RECEIVER -10 -1: startEntry -29 -1: (I)Ljava/lang/reflect/Member; -7 -1: setOut0 -10 -1: getMethods -26 -1: ()Lsun/misc/JavaNioAccess; -18 -1: linkToTargetMethod -8 -1: INSTANCE -3 -1: dir -41 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;)V -9 -1: unboxCast -58 -1: (TT;)Lsun/invoke/empty/Empty;^TT; -12 -1: java.version -50 -1: (Ljava/io/InputStream;Ljava/nio/charset/Charset;)V -32 2: sun/net/www/protocol/jar/Handler -20 -1: java/lang/Compiler$1 -9 -1: LongCache -14 -1: FILL_THRESHOLD -22 -1: getRawClassAnnotations -9 -1: (JI[CII)I -13 -1: hasMoreTokens -13 -1: getSuperclass -3 -1: PRC -12 -1: MAX_PRIORITY -14 -1: checkCacheLoad -7 -1: lowMask -8 -1: LM_CLASS -7 -1: initIDs -27 -1: Ljava/util/Collection; -3 -1: yes -3 -1: PRT -91 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/LambdaForm; -27 -1: ()Lsun/security/util/Debug; -8 -1: VM start -9 -1: setMemory -7 -1: getName -10 -1: findSignal -19 -1: startsWithLocHeader -37 -1: java/util/Collections$SynchronizedMap -51 -1: (ICLjava/lang/Object;)Ljava/lang/invoke/LambdaForm; -62 -1: (Ljava/util/Locale;)Lsun/util/locale/provider/LocaleResources; -17 -1: lastParameterType -9 -1: NO_PTYPES -116 -1: ([Ljava/lang/ClassValue$Entry<*>;Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; -18 -1: DisplayNamePattern -8 -1: getField -5 -1: flags -3 -1: PST -17 -1: annotationDefault -18 -1: java/nio/ByteOrder -8 -1: highMask -6 -1: ascii7 -29 -1: getGregorianYearFromFixedDate -125 -1: (Ljava/lang/String;[Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;)V -8 -1: =Lambda( -29 -1: Ljava/util/WeakHashMap$Entry; -18 -1: multiValueIterator -74 -1: Ljava/util/LinkedHashMap; -13 -1: CONV_OP_LIMIT -6 -1: sclSet -81 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/util/jar/JarFile;)Ljava/util/jar/JarFile; -14 -1: appendFragment -46 -1: java/util/Collections$SynchronizedNavigableMap -36 -1: application/x-java-serialized-object -13 -1: setNativeName -53 -1: java/util/concurrent/ConcurrentHashMap$ForwardingNode -16 -1: setJavaAWTAccess -30 -1: methodHandleInvokeLinkerMethod -15 -1: reduceKeysToInt -20 -1: ensureCapacityHelper -23 -1: createFileURLConnection -12 -1: d3dAvailable -69 -1: (Ljava/lang/Object;Ljava/lang/invoke/MethodHandle;)Ljava/lang/String; -49 -1: java/util/ArraysParallelSortHelpers$FJLong$Sorter -21 -1: explicitCastArguments -24 -1: JAVAFX_LAUNCH_MODE_CLASS -9 -1: invoke_MT -18 -1: ensureMemberAccess -74 -1: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)I -36 -1: java/nio/charset/spi/CharsetProvider -23 -1: (Ljava/lang/String;II)V -14 -1: initProperties -4 -1: (F)F -35 -1: [[Ljava/lang/annotation/Annotation; -4 -1: (F)I -106 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable;Ljava/lang/CharSequence; -46 -1: java/lang/invoke/BoundMethodHandle$SpeciesData -74 -1: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z -24 -1: java.launcher.opt.header -37 -1: ([Ljava/security/ProtectionDomain;Z)V -10 -1: lineBuffer -7 -1: ibm-813 -9 -1: isBuiltin -4 -1: (F)V -7 -1: ibm-819 -9 -1: H_ESCAPED -4 -1: (F)Z -20 -1: suppressedExceptions -12 -1: UTF-32LE-BOM -19 -1: CalendarSystem.java -8 -1: readOnly -81 -1: (JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object; -32 -1: sun/misc/Launcher$AppClassLoader -78 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable; -17 -1: [Ljava/lang/Enum; -41 -1: java/util/Collections$CheckedNavigableSet -8 -1: asSetter -3 -1: dom -41 -1: (I)[Ljava/util/WeakHashMap$Entry; -16 -1: localeExtensions -21 -1: sun/net/www/ParseUtil -21 -1: Ljava/nio/ByteBuffer; -29 -1: java/util/concurrent/TimeUnit -25 -1: java/lang/CharacterData00 -15 -1: sun/misc/Unsafe -28 -1: java/io/ByteArrayInputStream -3 -1: dow -25 -1: java/lang/CharacterData01 -25 -1: java/lang/CharacterData02 -6 -1: STORED -11 -1: isTransient -8 -1: function -16 -1: getCanonicalFile -13 -1: ,useDaylight= -24 -1: domain (context is null) -12 -1: Cleaner.java -17 -1: CalendarDate.java -49 -1: Lsun/reflect/generics/repository/FieldRepository; -14 -1: forInputString -25 -1: java/lang/CharacterData0E -67 -1: (Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object; -19 -1: codePointBeforeImpl -6 -1: script -21 -1: systemNativeLibraries -38 -1: ([Ljava/lang/Class;)Ljava/lang/String; -14 -1: CONTENT_LENGTH -19 -1: HeapCharBuffer.java -22 -1: ExtendedProviderHolder -41 -1: java/lang/invoke/InvokerBytecodeGenerator -12 -1: basicInvoker -26 -1: ([Ljava/lang/Comparable;)V -10 -1: val$tclass -47 -1: (Ljava/lang/Throwable;)Lsun/invoke/empty/Empty; -18 -1: isLegalReplacement -22 -1: spliteratorUnknownSize -15 -1: SynchronizedSet -16 -1: MethodParameters -22 -1: desiredAssertionStatus -29 -1: ()Ljava/util/ArrayDeque; -36 -1: ()Ljava/lang/reflect/Constructor<*>; -66 -1: ()Ljava/util/Map; -58 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V -50 -1: (Ljava/util/concurrent/CountedCompleter;[J[JIIII)V -14 -1: requireNonNull -21 -1: java/lang/ThreadGroup -95 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V -76 -1: (Ljava/nio/channels/WritableByteChannel;Ljava/nio/charset/CharsetEncoder;I)V -14 -1: reflectionData -33 -1: Ljava/lang/invoke/MethodTypeForm; -7 -1: tuesday -31 -1: ()Lsun/misc/JavaSecurityAccess; -14 -1: fieldFilterMap -28 -1: ([Ljava/lang/ThreadGroup;Z)I -7 -1: ibm-850 -83 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/management/GarbageCollectorMXBean; -7 -1: ibm-852 -5 -1: cesu8 -14 -1: ForwardingNode -29 -1: (Ljava/nio/ByteBuffer;IIIII)V -7 -1: ibm-855 -12 -1: SingletonSet -16 -1: isOtherUppercase -15 -1: FIELD_UNDEFINED -9 -1: makeEntry -7 -1: ibm-857 -10 -1: extensions -10 -1: longStream -19 -1: getGenericSignature -7 -1: newNode -8 -1: jarNames -25 -1: java/util/jar/JarVerifier -49 -1: ()[Lsun/reflect/generics/tree/ClassTypeSignature; -4 -1: wait -115 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/ClassRepository; -56 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; -65 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)V -7 -1: ibm-862 -9 -1: ISO646-US -7 -1: ibm-866 -16 -1: extendedProvider -7 -1: ([C[C)Z -93 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; -8 -1: getHours -21 -1: ()[Ljava/lang/String; -187 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$ReduceKeysTask;Ljava/util/function/BiFunction;)V -106 -1: Ljava/util/concurrent/locks/ReentrantLock;Ljava/io/Serializable; -24 -1: java/nio/file/FileSystem -14 -1: ForEachKeyTask -13 -1: defaultLocale -20 -1: constructorModifiers -13 -1: asWrapperType -42 -1: (Ljava/lang/String;ZI)Ljava/lang/Class<*>; -17 -1: BaseCalendar.java -76 -1: (Ljava/util/jar/JarFile;Ljava/util/jar/JarEntry;)[Ljava/security/CodeSigner; -14 -1: isSynchronized -27 -1: java/nio/DirectByteBuffer$1 -3 -1: ()B -7 -1: ibm-874 -12 -1: exactInvoker -3 -1: ()C -39 -1: (Ljava/lang/Thread;Ljava/lang/Object;)V -3 -1: ()D -3 -1: ()F -27 -1: [Ljava/lang/reflect/Method; -10 -1: floatValue -3 -1: ()I -3 -1: ()J -18 -1: getLocaleResources -59 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesTask -67 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/Hashtable$Entry;)V -11 -1: maxPriority -11 -1: getStringAt -60 -1: (Ljava/lang/ClassValue$Version;)Ljava/lang/ClassValue$Entry; -3 -1: ()S -49 -1: (Ljava/lang/String;)Ljava/io/ExpiringCache$Entry; -42 -1: (III)Lsun/util/calendar/BaseCalendar$Date; -82 -1: (Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; -62 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)Ljava/util/Map; -3 -1: ()V -24 -1: ()Ljava/nio/ShortBuffer; -29 -1: file descriptor can't be null -3 -1: ()Z -7 -1: matcher -66 -1: (Ljava/lang/reflect/Constructor;)Lsun/reflect/ConstructorAccessor; -7 -1: matches -12 -1: getAuthority -16 -1: java/lang/Object -5 -1: (IC)V -17 -1: EmptyListIterator -8 -1: charsets -8 -1: sameFile -47 -1: (TT;Ljava/util/function/UnaryOperator;)TV; -16 -1: overwrittenEntry -15 -1: reinvokerTarget -11 -1: isUpperCase -5 -1: toUri -9 -1: GMT+00:00 -33 -1: java/util/concurrent/ForkJoinPool -10 -1: parseFloat -53 -1: java/util/concurrent/ConcurrentHashMap$SearchKeysTask -48 -1: (Ljava/lang/Object;Ljava/util/LinkedList$Node;)V -82 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;Ljava/lang/Object;ILjava/lang/Class<*>;)V -15 -1: reduceCacheLoad -76 -1: (Ljava/lang/Class<*>;[Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method; -20 -1: singletonSpliterator -24 -1: getTransitionEpochSecond -24 -1: MapReduceValuesToIntTask -13 -1: ALLOWED_FLAGS -55 -1: (Ljava/lang/reflect/Field;Z)Lsun/reflect/FieldAccessor; -34 -1: [Ljava/lang/annotation/Annotation; -10 -1: readBuffer -21 -1: Illegal month value: -31 -1: java/security/SecureClassLoader -12 -1: reinitialize -5 -1: limit -4 -1: grow -15 -1: getCreationTime -7 -1: , from -25 -1: (Ljava/lang/ClassValue;)V -13 -1: java.compiler -37 -1: ()Ljava/util/Set; -6 -1: FJChar -16 -1: getFieldAccessor -4 -1: eras -11 -1: isSupported -24 -1: ()Ljava/text/DateFormat; -32 -1: java/util/Collections$CopiesList -32 -1: java/io/NotSerializableException -15 -1: typeAnnotations -27 -1: defaultAllowUserInteraction -57 -1: (Ljava/lang/String;I[Ljava/lang/invoke/LambdaForm$Name;)V -18 -1: checkArgumentTypes -71 -1: (Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar; -10 -1: isMirrored -27 -1: (I)Ljava/lang/Thread$State; -26 -1: (Ljava/util/Collection;Z)Z -6 -1: ibm367 -16 -1: isAssignableFrom -7 -1: readUTF -35 -1: Ljava/lang/ref/ReferenceQueue; -56 -1: ([Ljava/util/HashMap$Node;Ljava/util/HashMap$TreeNode;)V -8 -1: MANDATED -18 -1: canonicalizeRegion -11 -1: checkAccept -44 -1: (Ljava/net/Proxy;)Lsun/net/ApplicationProxy; -8 -1: ECMA-118 -22 -1: ReflectPermission.java -4 -1: _put -41 -1: java.lang.invoke.MethodHandle.DEBUG_NAMES -47 -1: java/util/concurrent/ConcurrentHashMap$TreeNode -44 -1: (Ljava/net/URL;[Ljava/security/CodeSigner;)V -5 -1: april -44 -1: ([Ljava/lang/Class<*>;Ljava/lang/Class<*>;)V -150 -1: Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/Set;Ljava/io/Serializable; -91 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; -26 -1: sun/net/util/IPAddressUtil -8 -1: Modifier -9 -1: isVarargs -24 -1: -- listing properties -- -16 -1: hasAllPermission -27 -1: MapReduceMappingsToLongTask -29 -1: sharedGetParameterAnnotations -9 -1: argCounts -11 -1: toLocalTime -89 -1: (Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; -4 -1: ROOT -20 -1: sun.reflect.noCaches -18 -1: UnicodeBigUnmarked -4 -1: Lazy -35 -1: java/lang/invoke/SimpleMethodHandle -20 -1: (I)Ljava/nio/Buffer; -48 -1: ()Lsun/reflect/generics/tree/ClassTypeSignature; -31 -1: (I[CII)Ljava/lang/StringBuffer; -17 -1: America/Anchorage -7 -1: markpos -9 -1: enumerate -11 -1: parseLocale -24 -1: java.launcher.cls.error1 -46 -1: (ILjava/lang/Object;)Ljava/lang/StringBuilder; -24 -1: java.launcher.cls.error2 -24 -1: java.launcher.cls.error3 -24 -1: java.launcher.cls.error4 -21 -1: java/util/ArrayList$1 -17 -1: getExceptionTypes -24 -1: java.launcher.cls.error5 -30 -1: java/util/Spliterator$OfDouble -10 -1: forDecoder -8 -1: getEntry -10 -1: checkGuard -12 -1: checkInitted -34 -1: Lsun/util/locale/LocaleExtensions; -41 -1: java/util/ArraysParallelSortHelpers$FJInt -10 -1: findStatic -22 -1: setConstructorAccessor -34 -1: Lsun/misc/URLClassPath$FileLoader; -20 -1: not a reinvoker MH: -16 -1: LongCumulateTask -11 -1: checkAccess -14 -1: SearchKeysTask -36 -1: ()[Ljava/lang/reflect/AnnotatedType; -11 -1: initDefault --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ExtraSymbols.symbols.txt 2019-07-24 08:26:28.405471121 -0400 @@ -0,0 +1,10826 @@ +VERSION: 1.0 +@SECTION: Symbol +69 -1: ------------------------------------------------------------123456789 +68 -1: # The values in this file are only used for testing the operation of +63 -1: # adding extra symbols into the CDS archive. None of the values +70 -1: # are interpreted in any way. So even if they contain names of classes +70 -1: # that have been renamed or removed, or string literals that have been +66 -1: # changed or remove from Java source code, it would not affect the +26 -1: # correctness of the test. +0 -1: +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +11 -1: linkMethod +18 -1: type can't be null +20 -1: isAlphaNumericString +43 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z +72 -1: (Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process; +1 -1: \t +15 -1: IntCumulateTask +1 -1: \n +33 -1: java/util/Locale$LocaleNameGetter +23 -1: sun/invoke/util/Wrapper +57 -1: (Ljava/io/InputStream;Ljava/nio/charset/CharsetDecoder;)V +12 -1: reduceToLong +11 -1: setReadOnly +34 -1: (Ljava/lang/reflect/Executable;)[B +54 -1: ([Ljava/net/URL;Ljava/security/AccessControlContext;)V +15 -1: LegacyMergeSort +8 -1: endsWith +55 -1: (Ljava/lang/ClassValue;TT;)V +20 -1: createAnnotationData +6 -1: OfLong +90 -1: (Ljava/util/Map;)Ljava/util/Map; +1 -1: +17 -1: getClassSignature +1 -1: " +1 -1: # +1 -1: ( +21 -1: MethodHandleImpl.java +10 -1: getUTF8At0 +1 -1: ) +1 -1: * +1 -1: + +1 -1: , +1 -1: - +1 -1: . +18 -1: unsignedEntryNames +1 -1: / +1 -1: 0 +19 -1: java/io/InputStream +38 -1: java/util/concurrent/ThreadLocalRandom +1 -1: : +1 -1: ; +1 -1: < +13 -1: getAndAddLong +1 -1: = +1 -1: > +1 -1: ? +20 -1: getMethodAtIfLoaded0 +1 -1: @ +1 -1: A +7 -1: isAlive +1 -1: B +10 -1: checkIndex +1 -1: C +1 -1: D +1 -1: E +1 -1: F +1 -1: I +30 -1: sun/misc/JavaUtilZipFileAccess +11 -1: classloader +1 -1: J +1 -1: L +14 -1: packageEnabled +8 -1: ([BIII)V +24 -1: Ljava/io/BufferedWriter; +1 -1: S +32 -1: (Ljava/util/function/Consumer;)V +11 -1: refKindName +1 -1: U +1 -1: V +3 1: yyy +18 -1: JavaNetAccess.java +1 -1: Z +7 -1: members +1 -1: [ +1 -1: ] +13 -1: ShortLanguage +1 -1: _ +9 -1: invoke__L +28 -1: (D)Ljava/lang/StringBuilder; +15 -1: isInvokeSpecial +1 -1: c +17 -1: subListRangeCheck +1 -1: e +29 -1: Ljava/security/AllPermission; +27 -1: (C)Ljava/lang/StringBuffer; +28 -1: ([Ljava/lang/Comparable;II)V +50 -1: (Ljava/util/zip/ZipFile;Ljava/util/zip/Inflater;)V +9 -1: invoke__V +1 -1: m +101 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetEncoder;)Lsun/nio/cs/StreamEncoder; +13 -1: MAX_SURROGATE +18 -1: Ljava/lang/String; +21 -1: ensureProtectedAccess +18 -1: getIfModifiedSince +1 -1: r +9 -1: setExtra0 +1 -1: s +47 -1: Ljava/lang/Enum; +1 -1: x +1 -1: { +7 -1: getLast +1 -1: | +1 -1: } +1 -1: ~ +71 -1: (Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +34 -1: (Ljava/nio/charset/Charset;[BII)[C +10 -1: DST_NSHIFT +25 -1: ForEachTransformedKeyTask +26 -1: Ljava/nio/charset/Charset; +56 -1: (Ljava/lang/reflect/Method;)Lsun/reflect/MethodAccessor; +22 -1: StackTraceElement.java +24 -1: sun.zip.zipFile.openTime +27 -1: JNI_COPY_TO_ARRAY_THRESHOLD +26 -1: java/lang/ClassValue$Entry +19 -1: [Ljava/lang/Thread; +56 -1: (Ljava/lang/ClassLoader$NativeLibrary;)Ljava/lang/Class; +7 -1: message +18 -1: parameterToArgSlot +20 -1: [[Ljava/lang/String; +11 -1: bumpVersion +26 -1: Ljava/lang/reflect/Method; +9 -1: getMethod +6 -1: (I)TE; +49 -1: (Ljava/lang/String;)Ljava/lang/invoke/MemberName; +33 -1: sun/misc/URLClassPath$JarLoader$1 +57 -1: (BLjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V +33 -1: sun/misc/URLClassPath$JarLoader$2 +33 -1: sun/misc/URLClassPath$JarLoader$3 +87 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; +19 -1: FileDescriptor.java +12 -1: forEachValue +36 -1: (Ljava/util/List;)[Ljava/lang/Class; +53 -1: (Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder; +8 -1: hasArray +4 -1: ROWS +10 -1: linkMethod +9 -1: remaining +23 -1: ARRAY_FLOAT_BASE_OFFSET +35 -1: java/lang/reflect/ReflectPermission +24 -1: ()Ljava/net/InetAddress; +7 -1: ngroups +81 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction;>; +10 -1: putTreeVal +4 -1: list +5 -1: trace +7 -1: blocker +21 -1: reset() not supported +8 -1: JAPANESE +11 -1: PRIVATE_USE +53 -1: (Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodHandle; +32 -1: Invalid JavaFX launch parameters +15 -1: SECONDS_PER_DAY +11 -1: UTF_16.java +24 -1: sun/nio/cs/UTF_8$Encoder +102 -1: (Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)V +20 -1: (Lsun/misc/Signal;)V +22 -1: MagicAccessorImpl.java +84 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class; +14 -1: altMetafactory +13 -1: queryOverflow +30 -1: exists, but is not accessible +3 -1: edt +14 -1: MAX_ARRAY_SIZE +20 -1: aliases_UTF_16LE_BOM +34 -1: Ljava/lang/reflect/Constructor<*>; +20 -1: (S)Ljava/lang/Short; +6 -1: STRICT +19 -1: internalCallerClass +27 -1: java/nio/DirectLongBufferRU +13 -1: TIMED_WAITING +15 -1: toGenericString +6 -1: client +10 -1: attachImpl +22 -1: ReflectionFactory.java +8 -1: jsse.jar +37 -1: (IZ)Ljava/lang/AbstractStringBuilder; +41 -1: java/util/LinkedHashMap$LinkedKeyIterator +15 -1: computeIfAbsent +10 -1: GET_TARGET +53 -1: ;>(Ljava/lang/Class;)[TE; +35 -1: java/util/Collections$SingletonList +7 -1: addYear +35 -1: Ljava/lang/Class; +65 -1: (Ljava/util/LinkedHashMap$Entry;Ljava/util/LinkedHashMap$Entry;)V +14 -1: image/x-bitmap +10 -1: (IIII[JI)V +50 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/net/URL;)V +13 -1: getLineNumber +20 -1: toUpperCaseCharArray +62 -1: (Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection; +11 -1: rotateRight +10 -1: checkPtype +85 -1: (JLjava/util/function/ToLongFunction<-TK;>;JLjava/util/function/LongBinaryOperator;)J +81 -1: (Ljava/lang/Class;Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor; +15 -1: Illegal style: +28 -1: (Ljava/lang/StringBuilder;)V +41 -1: 1.8.0-internal-iklam_2013_11_27_21_25-b00 +25 -1: Invalid authority field: +55 -1: (Ljava/lang/CharSequence;)Ljava/util/function/Supplier; +12 -1: staticOffset +32 -1: java/util/HashMap$KeySpliterator +13 -1: javaNioAccess +24 -1: (Ljava/util/SortedSet;)V +17 -1: thenComparingLong +2 -1: \n\n +22 -1: registerFieldsToFilter +34 -1: java/lang/invoke/LambdaMetafactory +225 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsTask;Ljava/util/function/BiFunction;Ljava/util/function/BiFunction;)V +26 -1: [[Ljava/lang/CharSequence; +32 -1: java/util/Collections$CheckedMap +147 -1: Ljava/util/AbstractSequentialList;Ljava/util/List;Ljava/util/Deque;Ljava/lang/Cloneable;Ljava/io/Serializable; +204 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; +27 -1: sun/nio/cs/UTF_16BE$Decoder +12 -1: getZoneInfo0 +77 -1: (Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType; +9 -1: Traverser +35 -1: Ljava/lang/ref/ReferenceQueue; +27 -1: lambda$comparing$ea9a8b3a$1 +7 -1: ([CI)[C +6 -1: getenv +9 -1: newMethod +52 -1: Ljava/lang/reflect/Executable; +164 -1: (Ljava/security/ProtectionDomain;Ljava/security/DomainCombiner;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)V +40 -1: (Ljava/lang/String;)Ljava/util/TimeZone; +11 -1: countTokens +202 -1: Ljava/util/concurrent/ConcurrentHashMap$CollectionView;>;Ljava/util/Set;>;Ljava/io/Serializable; +78 -1: (Ljava/util/Collection;)Ljava/util/Collection; +34 -1: (Ljava/lang/reflect/Constructor;)I +15 -1: comparingDouble +24 -1: ()Ljava/util/Collection; +14 -1: invokeFinalize +14 -1: encodeISOArray +77 -1: (Ljava/lang/ref/Reference;Ljava/lang/ref/Reference;)Ljava/lang/ref/Reference; +11 -1: bad index: +34 -1: (Ljava/lang/reflect/Constructor;)V +68 -1: (Ljava/util/jar/JarEntry;Lsun/security/util/ManifestEntryVerifier;)V +53 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;IIIJ)V +27 -1: ([CII)Ljava/nio/CharBuffer; +6 -1: setOut +41 -1: (ILjava/lang/Object;Ljava/lang/Object;I)V +12 -1: MIN_EXPONENT +30 -1: PrivilegedExceptionAction.java +18 -1: key cannot be null +6 -1: CENHDR +73 -1: (ITK;TV;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; +23 -1: java/lang/reflect/Array +8 -1: AF_LIMIT +2 -1: \r\n +11 -1: getFileName +10 -1: parseShort +22 -1: java/lang/LinkageError +15 -1: FT_LAST_WRAPPER +32 -1: java/util/ArrayDeque$DeqIterator +24 -1: pc-multilingual-850+euro +3 -1: zfc +14 -1: incrementExact +38 -1: (IIII)Lsun/util/calendar/CalendarDate; +8 -1: (II[BI)V +8 -1: isLocked +13 -1: ZoneInfo.java +36 -1: (Lsun/util/calendar/CalendarDate;J)V +35 -1: java/lang/invoke/MethodHandleImpl$1 +31 -1: (Ljava/util/Comparator<-TE;>;)V +19 -1: CharsetEncoder.java +52 -1: ()Ljava/util/Enumeration; +44 -1: (Ljava/io/InputStream;)Ljava/io/InputStream; +7 -1: field +5 -1: abort +25 -1: java/lang/SecurityManager +66 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToDoubleTask +1316 -1: \xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe5\xa0\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\xa0\x80\xe4\x80\x8f\xe6\x80\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\x80\x80\xe4\x80\x8f\xe5\xa0\x80\xe4\x80\x8f\xe6\x80\x80\xe4\x80\x8c\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xe2\xa0\x80\x18\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\x18\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xee\xa0\x80\x15\xee\xa0\x80\x16\xe6\xa0\x80\x18\xe2\x80\x80\x19\xe3\xa0\x80\x18\xe2\x80\x80\x14\xe3\xa0\x80\x18\xe3\xa0\x80\x18\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe1\xa0\x80\xe3\x98\x89\xe3\xa0\x80\x18\xe6\xa0\x80\x18\xee\xa0\x80\x19\xe6\xa0\x80\x19\xee\xa0\x80\x19\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xc2\x82\xe7\xbf\xa1\xee\xa0\x80\x15\xe6\xa0\x80\x18\xee\xa0\x80\x16\xe6\xa0\x80\x1b\xe6\xa0\x80\xe5\x80\x97\xe6\xa0\x80\x1b\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xc2\x81\xe7\xbf\xa2\xee\xa0\x80\x15\xe6\xa0\x80\x19\xee\xa0\x80\x16\xe6\xa0\x80\x19\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe5\x80\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe4\xa0\x80\xe1\x80\x8f\xe3\xa0\x80\x0c\xe6\xa0\x80\x18\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\xe6\x80\x9a\xe2\xa0\x80\xe6\x80\x9a\xe6\xa0\x80\x1c\xe6\xa0\x80\x18\xe6\xa0\x80\x1b\xe6\xa0\x80\x1c\xc0\x80\xe7\x80\x85\xee\xa0\x80\x1d\xe6\xa0\x80\x19\xe4\xa0\x80\xe1\x80\x90\xe6\xa0\x80\x1c\xe6\xa0\x80\x1b\xe2\xa0\x80\x1c\xe2\xa0\x80\x19\xe1\xa0\x80\xd8\x8b\xe1\xa0\x80\xd8\x8b\xe6\xa0\x80\x1b\xdf\xbd\xe7\x80\x82\xe6\xa0\x80\x18\xe6\xa0\x80\x18\xe6\xa0\x80\x1b\xe1\xa0\x80\xd4\x8b\xc0\x80\xe7\x80\x85\xee\xa0\x80\x1e\xe6\xa0\x80\xe0\xa0\x8b\xe6\xa0\x80\xe0\xa0\x8b\xe6\xa0\x80\xe0\xa0\x8b\xe6\xa0\x80\x18\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xe6\xa0\x80\x19\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xc2\x82\xe7\x80\x81\xdf\xbd\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xe6\xa0\x80\x19\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xc2\x81\xe7\x80\x82\xd8\x9d\xe7\x80\x82 +6 -1: (J[I)I +162 -1: (Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List; +21 -1: getQualifiedFieldName +46 -1: Ljava/util/Set;>; +47 -1: (Ljava/util/Collection;Ljava/util/Collection;)Z +10 -1: getRuntime +30 -1: threadLocalRandomSecondarySeed +18 -1: (Ljava/io/File;I)J +10 -1: methodName +34 -1: sun/reflect/generics/tree/TypeTree +35 -1: (Ljava/io/File;)[Ljava/lang/String; +31 -1: java/util/Collections$EmptyList +15 -1: LF_INVINTERFACE +9 -1: notifyAll +18 -1: (Ljava/io/File;I)V +94 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class<*>; +45 -1: (Ljava/lang/String;)Ljava/net/ContentHandler; +3 -1: enc +3 -1: end +18 -1: (Ljava/io/File;I)Z +47 -1: (Ljava/lang/Object;Ljava/lang/reflect/Method;)V +76 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V +19 -1: getURLStreamHandler +46 -1: (Ljava/lang/ClassLoader;Ljava/lang/Class<*>;)V +17 -1: COMPILE_THRESHOLD +15 -1: charset is null +7 -1: ibm-912 +10 -1: basicTypes +7 -1: ibm-914 +78 -1: (Ljava/lang/Class;Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;)Z +7 -1: ibm-915 +12 -1: JarFileEntry +12 -1: setThreshold +22 -1: (ILjava/lang/Object;)V +55 -1: Ljava/lang/Object; +16 -1: Unknown signal: +3 -1: zip +13 -1: CR_UNMAPPABLE +19 -1: getClassAtIfLoaded0 +21 -1: WindowsClientCounters +29 -1: Ljava/lang/invoke/MethodType; +91 -1: Ljava/util/Collections$UnmodifiableList;Ljava/util/RandomAccess; +23 -1: StackOverflowError.java +13 -1: Launcher.java +9 -1: Signature +7 -1: ibm-920 +153 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V +13 -1: setExtensions +26 -1: [Ljava/lang/ref/Reference; +7 -1: ibm-923 +12 -1: BMH.reinvoke +34 -1: java/lang/IllegalArgumentException +53 -1: (Ljava/lang/String;)Ljava/lang/NumberFormatException; +5 -1: .dirs +13 -1: finishToArray +22 -1: (ZI)Ljava/lang/String; +84 -1: (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/RuntimeException; +15 -1: charsetProvider +24 -1: ()Ljava/lang/Class; +10 -1: wordsInUse +26 -1: (Ljava/io/ExpiringCache;)I +53 -1: ()Ljava/util/Iterator;>; +25 -1: com/sun/management/GcInfo +26 -1: getCompatibilityExtensions +69 -1: (Ljava/lang/ref/ReferenceQueue;Ljava/util/concurrent/ConcurrentMap;)V +15 -1: getConstantPool +24 -1: [[Ljava/lang/Comparable; +26 -1: (Ljava/io/ExpiringCache;)V +8 -1: getTable +53 -1: sun/reflect/generics/repository/ConstructorRepository +5 -1: range +36 -1: (Ljava/lang/String;)Ljava/lang/Byte; +72 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V +60 -1: ([TT;TT;Ljava/util/Comparator<-TT;>;)I +20 -1: (Ljava/nio/Bits$1;)V +30 -1: ()Ljava/util/Spliterator; +6 -1: ([BB)I +53 -1: (Ljava/lang/ref/Finalizer;Lsun/misc/JavaLangAccess;)V +11 -1: memberTypes +45 -1: (ILjava/lang/String;)Ljava/lang/StringBuffer; +12 -1: OTHER_SYMBOL +65 -1: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +43 -1: (Ljava/util/Set;)[Ljava/lang/reflect/Field; +30 -1: (Ljava/lang/ref/Reference$1;)V +18 -1: GREGORIAN_INSTANCE +31 -1: Ljava/lang/FunctionalInterface; +57 -1: (Ljava/lang/Error;Ljava/lang/Exception;)Ljava/lang/Error; +54 -1: ([Ljava/lang/reflect/Field;)[Ljava/lang/reflect/Field; +14 -1: not an array: +6 -1: ([BB)V +9 -1: ISO8859_1 +8 -1: addTrans +27 -1: getFunctionalInterfaceClass +29 -1: lambda$comparingInt$7b0bb60$1 +8 -1: TreeNode +138 -1: Ljava/util/Dictionary;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; +3 -1: era +22 -1: fakeMethodHandleInvoke +9 -1: addToList +39 -1: (Ljava/lang/Class;[Ljava/lang/String;)V +17 -1: launchApplication +21 -1: randomNumberGenerator +51 -1: Ljava/lang/ThreadLocal;>; +35 -1: java/io/ObjectOutputStream$PutField +42 -1: (ILjava/util/function/IntBinaryOperator;)I +3 -1: err +13 -1: cachedDecoder +32 -1: sun/util/calendar/ZoneInfoFile$1 +23 -1: doIntersectionPrivilege +19 -1: cspc850multilingual +56 -1: Ljava/util/Map;[Ljava/lang/String;>; +11 -1: loader_data +27 -1: (Ljava/util/jar/Manifest;)V +5 -1: files +90 -1: Ljava/util/concurrent/ConcurrentMap; +36 -1: [[Ljava/lang/invoke/LambdaForm$Name; +5 -1: lines +55 -1: (Lsun/misc/URLClassPath$JarLoader;)Lsun/misc/MetaIndex; +9 -1: ansi-1251 +15 -1: refKindIsMethod +29 -1: java/lang/reflect/Constructor +3 -1: est +19 -1: Lsun/misc/Launcher; +109 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)TT; +10 -1: getOffsets +9 -1: removeAll +23 -1: java/util/regex/Matcher +8 -1: sumCount +7 -1: implies +10 -1: MAIN_CLASS +75 -1: (Ljava/util/List;)[Ljava/lang/String; +11 -1: getISO3Code +4 -1: high +53 -1: (TK;Ljava/util/function/BiFunction<-TK;-TV;+TV;>;)TV; +17 -1: setNormalizedDate +23 -1: AbstractRepository.java +28 -1: java/util/LinkedList$ListItr +8 -1: isFrozen +38 -1: (Ljava/lang/String;Z)Ljava/lang/Class; +16 -1: ReflectUtil.java +30 -1: ()Ljava/util/stream/IntStream; +57 -1: (Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object; +11 -1: getResource +16 -1: ThreadDeath.java +24 -1: unmodifiableNavigableSet +59 -1: (Ljava/lang/String;)Ljava/util/Enumeration; +24 -1: java.security.auth.debug +58 -1: (Ljava/io/FileInputStream;)Ljava/nio/channels/FileChannel; +25 -1: ()Ljava/util/Enumeration; +11 -1: getInstance +6 -1: MONDAY +15 -1: jdkMinorVersion +16 -1: newThreadWithAcc +6 -1: CENHOW +32 -1: Max. Heap Size (Estimated): +61 -1: (Ljava/lang/invoke/MethodType;Z)Ljava/lang/invoke/LambdaForm; +11 -1: windows-932 +7 -1: Index: +11 -1: composeList +6 -1: utf-16 +6 -1: ibm437 +10 -1: getJarFile +8 -1: , rem = +13 -1: multiNewArray +14 -1: getDefaultPort +39 -1: Ljava/security/cert/CertificateFactory; +10 -1: L_RESERVED +19 -1: getMethodAtIfLoaded +8 -1: needCast +8 -1: IS_FIELD +15 -1: ClassValue.java +31 -1: ()Ljava/util/function/Supplier; +125 -1: (Ljava/lang/Class<*>;)Ljava/util/Map;Ljava/lang/annotation/Annotation;>; +34 -1: lambda$comparingByValue$827a17d5$1 +4 -1: NONE +21 -1: java/nio/DoubleBuffer +33 -1: ()Lsun/reflect/LangReflectAccess; +26 -1: invalid compression method +6 -1: (TK;)Z +16 -1: FT_UNCHECKED_REF +14 -1: getGenericType +17 -1: pathSeparatorChar +8 -1: writeUTF +8 -1: NO_PROXY +188 -1: (Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V +13 -1: finalRefCount +12 -1: NF_checkCast +6 -1: utf-32 +26 -1: (Ljava/util/ArrayDeque;I)Z +19 -1: prefetchWriteStatic +14 -1: computeInvoker +5 -1: cap= +19 -1: generateCertificate +15 -1: methodModifiers +3 -1: exc +27 -1: ()Lsun/misc/JavaLangAccess; +5 -1: State +14 -1: NullComparator +10 -1: getClassAt +15 -1: printProperties +110 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)Ljava/lang/reflect/Constructor; +40 -1: (Ljava/util/List<*>;Ljava/util/Random;)V +63 -1: ()[Ljava/lang/reflect/TypeVariable; +28 -1: (I)Ljava/lang/StringBuilder; +48 -1: ([DIILjava/util/function/DoubleBinaryOperator;)V +3 -1: exp +11 -1: interpret_L +17 -1: Serializable.java +8 -1: FJDouble +12 -1: HashMap.java +9 -1: sys_paths +17 -1: getMainAttributes +14 -1: asDoubleBuffer +10 -1: buildNames +26 -1: TOPLEVEL_WINDOW_PERMISSION +4 -1: Type +31 -1: (Ljava/util/Collection<+TE;>;)V +64 -1: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class<*>; +100 -1: (Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection; +10 -1: checkError +31 -1: (Ljava/util/Collection<+TE;>;)Z +31 -1: java/lang/NoSuchMethodException +6 -1: attach +87 -1: (BLjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; +9 -1: writeChar +44 -1: java/util/ArraysParallelSortHelpers$FJObject +34 -1: (Ljava/lang/Class;Ljava/io/File;)Z +21 -1: java/util/zip/ZipFile +5 -1: dirty +6 -1: (JIZ)V +12 -1: leftoverChar +39 -1: is being loaded in another classloader +10 -1: writeBytes +6 -1: unlink +41 -1: (TT;Ljava/lang/ref/ReferenceQueue;)V +21 -1: getBootstrapResources +95 -1: Ljava/util/AbstractMap;Ljava/io/Serializable; +10 -1: PathStatus +25 -1: java/io/InputStreamReader +15 -1: ISO_8859-9:1989 +37 -1: java/lang/ExceptionInInitializerError +14 -1: exceptionTypes +19 -1: BufferedReader.java +34 -1: Could not create SecurityManager: +13 -1: definePackage +12 -1: getAndAddInt +50 -1: (Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle; +30 -1: (Ljava/lang/SecurityManager;)V +12 -1: fxLaunchName +22 -1: BINARYSEARCH_THRESHOLD +29 -1: JVMTI_THREAD_STATE_TERMINATED +9 -1: fullFence +60 -1: (Ljava/lang/String;Z)Ljava/util/Enumeration; +29 -1: java/lang/Thread$WeakClassKey +47 -1: (Ljava/nio/charset/Charset;Ljava/lang/String;)V +8 -1: (TV;)TV; +60 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;I)V +47 -1: java/security/cert/CertificateEncodingException +12 -1: BA_DIRECTORY +53 -1: (Ljava/lang/Class;ZLjava/lang/Class;)Ljava/util/List; +9 -1: checkRead +6 -1: +4 -1: args +17 -1: genericMethodType +10 -1: writeFloat +26 -1: Can't handle static method +49 -1: (Ljava/lang/String;)Ljava/lang/invoke/MethodType; +22 -1: MapReduceKeysToIntTask +17 -1: jvm_micro_version +29 -1: (Ljava/util/Map<+TK;+TV;>;Z)V +40 -1: ([Ljava/lang/Object;Ljava/lang/Object;)I +7 -1: vmindex +22 -1: maybeCompileToBytecode +89 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl; +11 -1: getLauncher +17 -1: jvm_major_version +36 -1: ([IIII)Ljava/util/Spliterator$OfInt; +40 -1: ([Ljava/lang/Object;Ljava/lang/Object;)V +33 -1: IllegalMonitorStateException.java +73 -1: ([ILjava/util/function/IntUnaryOperator;)Ljava/util/function/IntConsumer; +39 -1: (Ljava/lang/String;)Ljava/lang/Package; +29 -1: java/lang/CharacterDataLatin1 +52 -1: (Ljava/lang/annotation/Annotation;)Ljava/lang/Class; +49 -1: (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; +53 -1: (Ljava/lang/Object;)Ljava/nio/charset/CharsetDecoder; +22 -1: Ljava/net/FileNameMap; +16 -1: isAnonymousClass +4 -1: item +7 -1: compute +12 -1: user.country +22 -1: malformed context url: +16 -1: jvm_build_number +69 -1: (Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; +17 -1: getDirectionality +4 -1: save +8 -1: UNMARKED +58 -1: (Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V +12 -1: searchFields +9 -1: frequency +23 -1: getLocalizedInputStream +2 -1: +126 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;ILjava/lang/Class<*>;)Ljava/util/List; +39 -1: (Ljava/lang/String;Z)Ljava/lang/String; +7 -1: setZone +2 -1: " +9 -1: checkRef( +11 -1: loadFromXML +49 -1: (Ljava/util/jar/JarFile;Ljava/util/Enumeration;)V +68 -1: (IILsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate; +2 -1: ( +54 -1: (Ljava/util/TimeZone;)Lsun/util/calendar/CalendarDate; +6 -1: rewind +13 -1: getAndSetLong +30 -1: java/lang/invoke/MethodHandles +11 -1: ListPattern +97 -1: Ljava/util/AbstractList;Ljava/util/RandomAccess;Ljava/io/Serializable; +25 -1: (Ljava/io/InputStream;I)V +9 -1: setMethod +10 -1: H_REG_NAME +39 -1: ([Ljava/lang/Object;)Ljava/lang/Object; +16 -1: AbstractMap.java +68 -1: Ljava/util/Hashtable; +58 -1: (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process; +23 -1: getFileSystemAttributes +12 -1: toSurrogates +2 -1: !/ +5 -1: empty +24 -1: isUnicodeIdentifierStart +35 -1: sun/nio/cs/StandardCharsets$Classes +27 -1: [Ljava/security/Permission; +13 -1: getDefinition +11 -1: permission= +42 -1: (ILjava/lang/String;)Ljava/nio/ByteBuffer; +69 -1: (Ljava/util/List;>;)Ljava/lang/invoke/MethodType; +3 1: zzz +17 -1: hasLongPrimitives +2 -1: != +13 -1: getInterfaces +2 -1: " +11 -1: noInflation +14 -1: aliases_UTF_16 +2 -1: ") +17 -1: ()Ljava/util/Map; +55 -1: ()Ljava/util/Map; +6 -1: charAt +12 -1: getStringAt0 +10 -1: superClone +28 -1: Ljava/util/AbstractSet; +40 -1: java/lang/ref/Reference$ReferenceHandler +22 -1: NaturalOrderComparator +9 -1: markValue +9 -1: getRegion +26 -1: null permissions parameter +17 -1: Ljava/util/Stack; +14 -1: codebase= +36 -1: (Ljava/util/List;)Ljava/lang/Object; +17 -1: setJavaLangAccess +16 -1: hasQueuedThreads +5 -1: (CC)I +8 -1: toString +5 -1: (CC)J +11 -1: permissions +10 -1: getHeaders +27 -1: java/io/BufferedInputStream +21 -1: unicodelittleunmarked +51 -1: (Ljava/net/URLClassLoader;Ljava/util/Enumeration;)V +14 -1: generateMethod +11 -1: skipForward +55 -1: java/util/concurrent/ConcurrentHashMap$ForEachEntryTask +5 -1: (CC)Z +15 -1: getURLClassPath +84 -1: Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet; +23 -1: primitiveParameterCount +8 -1: security +14 -1: aliases_UTF_32 +22 -1: ()Ljava/util/Set; +9 -1: listFiles +15 -1: insertElementAt +42 -1: Ljava/util/Comparator; +11 -1: getUserInfo +46 -1: ([JIILjava/util/function/LongBinaryOperator;)V +23 -1: (Ljava/util/Iterator;)V +46 -1: ([Ljava/lang/Object;II)Ljava/util/Spliterator; +67 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Object;)Ljava/lang/Object; +14 -1: normalizeMonth +13 -1: getStackTrace +51 -1: java/lang/invoke/MethodType$ConcurrentWeakInternSet +8 -1: makeChar +2 -1: %% +9 -1: getTarget +21 -1: packageDefinitionLock +52 -1: java/util/concurrent/ConcurrentHashMap$ValueIterator +12 -1: OTHER_NUMBER +22 -1: java/util/jar/JarEntry +11 -1: access$1000 +16 -1: NON_SPACING_MARK +13 -1: last-modified +68 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; +16 -1: Australia/Darwin +55 -1: (Ljava/lang/management/ThreadInfo;[Ljava/lang/Object;)V +29 -1: Ljava/lang/ref/WeakReference; +19 -1: expungeStaleEntries +41 -1: Ljava/security/PrivilegedActionException; +6 -1: update +23 -1: (Ljava/lang/Object;JB)V +10 -1: newUpdater +39 -1: (Ljava/net/URL;)Ljava/util/jar/JarFile; +25 -1: Ljava/net/ContentHandler; +21 -1: ARRAY_INT_INDEX_SCALE +13 -1: hasSurrogates +27 -1: (Ljava/lang/ThreadGroup;Z)Z +20 -1: createGCNotification +21 -1: negative day of week +11 -1: getInIfOpen +22 -1: java/util/RandomAccess +24 -1: available locales = +21 -1: AccessController.java +44 -1: can not access a protected member of class +4 -1: LONG +15 -1: objectOnlyTypes +75 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetDecoder;)V +14 -1: getFindClasses +10 -1: storeFence +16 -1: asNormalOriginal +45 -1: (Ljava/lang/String;)Ljava/lang/StringBuilder; +6 -1: millis +16 -1: America/St_Johns +38 -1: ()Ljava/lang/IllegalArgumentException; +37 -1: DIRECTIONALITY_POP_DIRECTIONAL_FORMAT +15 -1: implReplaceWith +29 -1: ([C)Ljava/lang/StringBuilder; +15 -1: Appendable.java +41 -1: (Ljava/lang/String;)Ljava/io/InputStream; +26 -1: Illegal Initial Capacity: +9 -1: checkBase +7 -1: setYear +15 -1: DISPLAY_VARIANT +7 -1: getType +31 -1: Ljava/lang/ref/Reference<+TT;>; +15 -1: isFieldOrMethod +35 -1: appendToClassPathForInstrumentation +16 -1: LocaleNameGetter +7 -1: compact +55 -1: ()Ljava/util/Map; +10 -1: dummyQueue +3 -1: ROC +2 -1: (" +15 -1: checkPermission +38 -1: java/util/zip/ZipFile$ZipEntryIterator +8 -1: hexDigit +8 -1: pairs: +2 -1: () +2 -1: )\n +43 -1: handler for url different from this handler +15 -1: isAutoDetecting +37 -1: (Ljava/util/LinkedList$Node;)TE; +11 -1: Unsafe.java +12 -1: windows-1250 +39 -1: java/util/Collections$CheckedCollection +12 -1: windows-1251 +15 -1: codePointAtImpl +12 -1: windows-1252 +12 -1: windows-1253 +12 -1: windows-1254 +58 -1: (Ljava/lang/String;Ljava/lang/Integer;)Ljava/lang/Integer; +5 -1: deref +12 -1: windows-1255 +12 -1: windows-1256 +12 -1: windows-1257 +12 -1: windows-1258 +14 -1: FT_CHECKED_REF +47 -1: (Ljava/util/Hashtable;Ljava/util/Hashtable$1;)V +37 -1: (J)Lsun/util/calendar/Gregorian$Date; +19 -1: checkPropertyAccess +4 -1: file +17 -1: emptyListIterator +26 -1: sun/util/calendar/ZoneInfo +14 -1: file.separator +4 -1: fill +62 -1: (Ljava/util/Spliterator$OfLong;Z)Ljava/util/stream/LongStream; +18 -1: java/util/Iterator +20 -1: reduceValuesToDouble +12 -1: LF_CS_LINKER +26 -1: java/util/Arrays$ArrayList +45 -1: Ljava/util/concurrent/ConcurrentHashMap$Node; +6 -1: skipLF +2 -1: )= +39 -1: (I[Ljava/lang/invoke/LambdaForm$Name;)I +90 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;)V +18 -1: parameterModifiers +31 -1: (Ljava/util/Collection<+TK;>;)Z +21 -1: proxy can not be null +22 -1: java/io/FileDescriptor +6 -1: Loader +21 -1: numberOfTrailingZeros +10 -1: addMapping +39 -1: (I[Ljava/lang/invoke/LambdaForm$Name;)Z +30 -1: java/util/Locale$LanguageRange +20 -1: getReflectionFactory +16 -1: shouldMeterInput +56 -1: ([Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method; +23 -1: sun/net/ProgressMonitor +510 -1: \xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\x01\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\x01\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80\xc0\x80 +28 -1: java/util/Spliterator$OfLong +24 -1: SynchronizedNavigableMap +4 -1: find +6 -1: unsafe +31 -1: java/nio/ByteBufferAsIntBufferB +2 -1: ,\n +6 -1: [ call +14 -1: registerFilter +10 -1: ValuesView +9 -1: untreeify +59 -1: ([Ljava/lang/Object;IILjava/util/function/BinaryOperator;)V +13 -1: getSimpleName +41 -1: (Ljava/util/Vector;Ljava/util/Vector$1;)V +31 -1: java/nio/ByteBufferAsIntBufferL +45 -1: (Ljava/lang/reflect/Field;)Ljava/lang/Object; +13 -1: getDefaultRef +18 -1: mapAlternativeName +30 -1: setDefaultAllowUserInteraction +13 -1: cannotCastMsg +4 -1: )=>{ +7 -1: println +2 -1: , +70 -1: (Ljava/nio/Buffer;IILjava/nio/Buffer;II)Ljava/nio/charset/CoderResult; +32 -1: (ILjava/util/Collection<+TE;>;)Z +9 -1: interpret +104 -1: (Ljava/util/NavigableSet;Ljava/lang/Class;)Ljava/util/NavigableSet; +7 -1: advance +86 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; +11 -1: Stack trace +6 -1: raise0 +68 -1: ()Ljava/util/Collections$UnmodifiableNavigableMap$EmptyNavigableMap; +32 -1: sun/util/calendar/Gregorian$Date +33 -1: java/lang/ref/ReferenceQueue$Lock +19 -1: constructorAccessor +6 -1: IBM367 +18 -1: CharacterData.java +8 -1: parseURL +32 -1: java/io/FilePermissionCollection +7 -1: ([JI)[J +9 -1: JIS_X0201 +2 -1: -1 +8 -1: encoding +63 -1: ([Ljava/util/WeakHashMap$Entry;[Ljava/util/WeakHashMap$Entry;)V +9 -1: localhost +66 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal$1;)V +54 -1: (II[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +67 -1: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle; +14 -1: containsAllPDs +23 -1: setAllowUserInteraction +30 -1: Ljava/security/DomainCombiner; +26 -1: Ljava/security/Permission; +30 -1: serializePropertiesToByteArray +112 -1: (Ljava/util/Iterator;Ljava/util/Map;)V +2 -1: .. +6 -1: LOCEXT +2 -1: ./ +26 -1: (Ljava/nio/ByteBuffer;II)V +18 -1: (Ljava/io/File;J)Z +45 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;)V +17 -1: asCollectorChecks +7 -1: actions +5 -1: ([I)I +20 -1: asChange_otherthread +20 -1: forInputStreamReader +69 -1: java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject +5 -1: FINAL +17 -1: staticPermissions +44 -1: (Ljava/lang/Object;)Ljava/lang/StringBuffer; +5 -1: ([I)V +4 -1: swap +10 -1: readOffset +2 -1: /* +112 -1: (JLjava/util/function/Function<-TK;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; +12 -1: isAsciiDigit +2 -1: /- +2 -1: /. +2 -1: // +5 -1: zones +37 -1: (ILjava/lang/Object;)Ljava/util/List; +17 -1: SHUFFLE_THRESHOLD +32 -1: java/lang/CharacterDataUndefined +23 -1: sun.reflect.noInflation +11 -1: Can not set +36 -1: (Ljava/util/Properties$LineReader;)V +9 -1: debugName +78 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; +6 -1: (III)J +58 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String; +19 -1: BufferedWriter.java +148 -1: (Ljava/lang/Class;[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B)Ljava/lang/reflect/Constructor; +6 -1: printf +7 -1: signers +2 -1: 0. +4 -1: Date +15 -1: findReplacement +6 -1: (III)V +32 -1: java/nio/ReadOnlyBufferException +92 -1: ([Ljava/lang/String;)Ljava/util/Map;>; +6 -1: (III)Z +43 -1: (Ljava/lang/ClassValue;Ljava/lang/Object;)V +32 -1: java/nio/ByteBufferAsLongBufferB +16 -1: Constructor.java +10 -1: removeLast +9 -1: ([CII[B)I +40 -1: ()Ljava/util/List;>; +2 -1: 1. +7 -1: VARARGS +32 -1: java/nio/ByteBufferAsLongBufferL +18 -1: java/lang/Shutdown +40 -1: not supported, using ISO-8859-1 instead +40 -1: Ljava/util/Collections$EmptyEnumeration; +146 -1: (Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/SortedMap; +20 -1: aliases_UTF_32LE_BOM +23 -1: getEnclosingConstructor +2 -1: 0X +11 -1: NO_TIMEZONE +37 -1: ()Lsun/misc/JavaNioAccess$BufferPool; +18 -1: printXUsageMessage +9 -1: isPrivate +63 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/invoke/MethodHandle;)V +17 -1: maxSkipBufferSize +76 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetEncoder;)V +40 -1: (Ljava/lang/String;II)Ljava/lang/String; +17 -1: selectAlternative +53 -1: [Ljava/util/concurrent/ConcurrentHashMap$CounterCell; +87 -1: (Ljava/util/function/Supplier<+TS;>;)Ljava/lang/ThreadLocal; +40 -1: Ljava/util/concurrent/ConcurrentHashMap; +41 -1: (Ljava/lang/Character;)Ljava/lang/String; +19 -1: getMemberRefInfoAt0 +14 -1: reduceToDouble +18 -1: SUPPRESSED_CAPTION +6 -1: CANADA +64 -1: (IZ[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Ljava/lang/String; +12 -1: UnicodeBlock +2 -1: 0x +44 -1: (Ljava/lang/CharSequence;II)Ljava/io/Writer; +23 -1: getPermissionCollection +19 -1: threadLocalHashCode +9 -1: createMap +25 -1: checkForSpecialAttributes +12 -1: Mark invalid +36 -1: java/lang/CharSequence$1CharIterator +11 -1: local time +16 -1: Enumeration.java +27 -1: (Ljava/util/zip/ZipEntry;)V +11 -1: MATH_SYMBOL +8 -1: filename +24 -1: (Ljava/util/List<*>;II)V +9 -1: bindCache +18 -1: java/io/FileFilter +12 -1: checkInvoker +18 -1: OSEnvironment.java +8 -1: EmptyMap +11 -1: getIterator +35 -1: java/util/function/IntUnaryOperator +35 -1: java/util/WeakHashMap$EntryIterator +90 -1: (Ljava/util/Queue;Ljava/lang/Class;)Ljava/util/Queue; +8 -1: batchFor +16 -1: isValidCodePoint +27 -1: ([Lsun/util/calendar/Era;)V +16 -1: ThreadGroup.java +33 2: sun/net/www/protocol/file/Handler +7 -1: isField +22 -1: sun/misc/OSEnvironment +38 -1: Ljava/lang/Class; +12 -1: ADDRESS_SIZE +8 -1: forDigit +49 -1: (Ljava/lang/Object;)Ljava/util/WeakHashMap$Entry; +13 -1: getCodeSource +41 -1: ([Ljava/lang/Class<*>;)Ljava/lang/String; +39 -1: (Ljava/util/function/Predicate<-TE;>;)Z +13 -1: asFloatBuffer +34 -1: ()Lsun/reflect/generics/tree/Tree; +3 -1: ftp +18 -1: maybeReBoxElements +82 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)[[Ljava/lang/annotation/Annotation; +48 -1: ()Ljava/util/Set;>; +27 -1: (Ljava/util/NavigableMap;)V +18 -1: parameterSlotCount +20 -1: NF_getCallSiteTarget +16 -1: aliases_US_ASCII +13 -1: NF_staticBase +31 -1: sun/reflect/ConstructorAccessor +26 -1: guessContentTypeFromStream +10 -1: Deprecated +35 -1: System initialization has completed +11 -1: initialized +7 -1: compare +15 -1: maxDirectMemory +19 -1: setLastModifiedTime +7 -1: (J[BZ)J +12 -1: readEpochSec +66 -1: (Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/BaseLocale; +69 -1: ()Lsun/misc/JavaSecurityProtectionDomainAccess$ProtectionDomainCache; +9 -1: Constants +11 -1: valueOffset +62 -1: (Ljava/util/Hashtable;)V +33 -1: java/lang/CharacterDataPrivateUse +21 -1: Exception in thread " +40 -1: ()Ljava/util/Set; +12 -1: Asia/Yerevan +40 -1: (Ljava/lang/Throwable;)Ljava/lang/Error; +25 -1: (IS)Ljava/nio/ByteBuffer; +7 -1: (I[CI)I +45 -1: java/nio/charset/UnmappableCharacterException +23 -1: java/util/WeakHashMap$1 +21 -1: setFXLaunchParameters +1250 -1: ADANDAEAREAFAFGAGATGAIAIAALALBAMARMANANTAOAGOAQATAARARGASASMATAUTAUAUSAWABWAXALAAZAZEBABIHBBBRBBDBGDBEBELBFBFABGBGRBHBHRBIBDIBJBENBLBLMBMBMUBNBRNBOBOLBQBESBRBRABSBHSBTBTNBVBVTBWBWABYBLRBZBLZCACANCCCCKCDCODCFCAFCGCOGCHCHECICIVCKCOKCLCHLCMCMRCNCHNCOCOLCRCRICUCUBCVCPVCWCUWCXCXRCYCYPCZCZEDEDEUDJDJIDKDNKDMDMADODOMDZDZAECECUEEESTEGEGYEHESHERERIESESPETETHFIFINFJFJIFKFLKFMFSMFOFROFRFRAGAGABGBGBRGDGRDGEGEOGFGUFGGGGYGHGHAGIGIBGLGRLGMGMBGNGINGPGLPGQGNQGRGRCGSSGSGTGTMGUGUMGWGNBGYGUYHKHKGHMHMDHNHNDHRHRVHTHTIHUHUNIDIDNIEIRLILISRIMIMNININDIOIOTIQIRQIRIRNISISLITITAJEJEYJMJAMJOJORJPJPNKEKENKGKGZKHKHMKIKIRKMCOMKNKNAKPPRKKRKORKWKWTKYCYMKZKAZLALAOLBLBNLCLCALILIELKLKALRLBRLSLSOLTLTULULUXLVLVALYLBYMAMARMCMCOMDMDAMEMNEMFMAFMGMDGMHMHLMKMKDMLMLIMMMMRMNMNGMOMACMPMNPMQMTQMRMRTMSMSRMTMLTMUMUSMVMDVMWMWIMXMEXMYMYSMZMOZNANAMNCNCLNENERNFNFKNGNGANINICNLNLDNONORNPNPLNRNRUNUNIUNZNZLOMOMNPAPANPEPERPFPYFPGPNGPHPHLPKPAKPLPOLPMSPMPNPCNPRPRIPSPSEPTPRTPWPLWPYPRYQAQATREREUROROURSSRBRURUSRWRWASASAUSBSLBSCSYCSDSDNSESWESGSGPSHSHNSISVNSJSJMSKSVKSLSLESMSMRSNSENSOSOMSRSURSSSSDSTSTPSVSLVSXSXMSYSYRSZSWZTCTCATDTCDTFATFTGTGOTHTHATJTJKTKTKLTLTLSTMTKMTNTUNTOTONTRTURTTTTOTVTUVTWTWNTZTZAUAUKRUGUGAUMUMIUSUSAUYURYUZUZBVAVATVCVCTVEVENVGVGBVIVIRVNVNMVUVUTWFWLFWSWSMYEYEMYTMYTZAZAFZMZMBZWZWE +60 -1: Ljava/util/Set;>; +24 -1: ()Ljava/security/Policy; +7 -1: initted +44 -1: java/util/Collections$UnmodifiableCollection +12 -1: Pacific/Apia +23 -1: checkProxyPackageAccess +7 -1: (I[CI)V +64 -1: ([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I +16 -1: getJavaNioAccess +7 -1: reverse +7 -1: nocerts +16 -1: activeGroupCount +34 -1: java/util/jar/JarFile$JarFileEntry +7 -1: loaders +9 -1: toRadians +24 -1: java/util/HashMap$KeySet +37 -1: (Ljava/lang/Class;)Ljava/lang/Object; +6 -1: getRef +6 -1: H_DASH +17 -1: LinkageError.java +66 -1: (Ljava/lang/invoke/MethodTypeForm;)Ljava/lang/invoke/MethodHandle; +41 -1: (Ljava/nio/ByteBuffer;)Ljava/util/BitSet; +10 -1: addMinutes +58 -1: ([TT;II)Ljava/util/Spliterator; +9 -1: parseJars +13 -1: getUnsignedCS +28 -1: (Ljava/util/AbstractList;I)V +22 -1: threadLocalRandomProbe +19 -1: newDirectByteBuffer +27 -1: Filter already registered: +8 -1: unescape +31 -1: sun/misc/URLClassPath$JarLoader +6 -1: TAIWAN +53 -1: ()Ljava/util/ListIterator; +17 -1: REVERSE_THRESHOLD +31 -1: Java(TM) SE Runtime Environment +7 -1: SECONDS +70 -1: (Ljava/util/function/ToLongFunction<-TT;>;)Ljava/util/Comparator; +7 -1: BLOCKED +6 -1: Caches +63 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)V +2 -1: : +210 -1: (Ljava/util/Map;Ljava/lang/annotation/Annotation;>;Ljava/util/Map;Ljava/lang/annotation/Annotation;>;I)V +153 -1: (JLjava/util/function/BiFunction;Ljava/util/Map$Entry;+Ljava/util/Map$Entry;>;)Ljava/util/Map$Entry; +22 -1: ()Ljava/lang/Class<*>; +28 -1: Ljava/lang/OutOfMemoryError; +19 -1: writeFileDescriptor +39 -1: Ljava/util/LinkedHashMap$Entry; +26 -1: (ILjava/util/Collection;)Z +18 -1: getEncodedInternal +16 -1: ForEachValueTask +23 -1: (Ljava/util/List<*>;I)V +19 -1: SharedArchiveLoader +20 -1: probeBackupLocations +24 -1: java/lang/StringCoding$1 +28 -1: lookupContentHandlerClassFor +36 -1: ()Lsun/misc/Launcher$ExtClassLoader; +27 -1: reflectionFactoryAccessPerm +14 -1: ACCESSOR_FORMS +35 -1: ([JII)Ljava/util/stream/LongStream; +34 -1: ISO-8859-1 charset not available: +8 -1: cscesu-8 +2 -1: ;/ +17 -1: typeToPackageName +34 -1: (Ljava/net/URL;)Ljava/lang/String; +5 -1: (IZ)V +25 -1: Prohibited package name: +51 -1: (Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V +108 -1: (JLjava/util/function/ToIntFunction;>;ILjava/util/function/IntBinaryOperator;)I +12 -1: soleInstance +27 -1: (Ljava/io/BufferedReader;)V +71 -1: (Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder; +17 -1: Ljava/lang/Class; +38 -1: (Ljava/lang/String;)Ljava/lang/Double; +10 -1: viewAsType +22 -1: (Ljava/io/DataInput;)I +22 -1: (Ljava/io/DataInput;)J +105 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/WrongMethodTypeException; +16 -1: setJavaNetAccess +73 -1: (ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/util/HashMap$Node; +22 -1: (Ljava/io/DataInput;)V +14 -1: getHostAddress +37 -1: sun/reflect/annotation/TypeAnnotation +14 -1: ENCLOSING_MARK +5 -1: FALSE +14 -1: preDefineClass +9 -1: newKeySet +18 -1: getWaitQueueLength +32 -1: ()Lsun/misc/URLClassPath$Loader; +54 -1: (Ljava/nio/CharBuffer;I)Ljava/nio/charset/CoderResult; +3 -1: SEP +45 -1: (ITK;TV;Ljava/util/Hashtable$Entry;)V +17 -1: getDeclaredFields +7 -1: getDate +10 -1: getClasses +240 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToIntTask;Ljava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)V +12 -1: WeakClassKey +14 -1: LF_GEN_INVOKER +25 -1: Ljava/lang/StringBuilder; +2 -1: > +9 -1: getJarMap +4 -1: asin +37 -1: (Ljava/net/URLStreamHandlerFactory;)V +30 -1: not a constructor type or name +4 -1: main +22 -1: java/io/FilenameFilter +22 -1: sun.java.launcher.diag +30 -1: ()Ljava/util/Spliterator; +57 -1: ;>(Ljava/util/List;)V +86 -1: (Ljava/lang/ThreadLocal;>;)TT; +18 -1: canBeCalledVirtual +9 -1: Shift_JIS +24 -1: ()Ljava/util/ArrayDeque; +32 -1: (Ljava/lang/Class$MethodArray;)V +22 -1: java/lang/StringCoding +33 -1: sun/util/locale/LocaleObjectCache +20 -1: Sorry, deque too big +38 -1: java/lang/Throwable$WrappedPrintWriter +25 -1: (Ljava/io/InputStream;J)J +44 -1: (Ljava/security/Permission;)Ljava/util/List; +5 -1: thunk +5 -1: props +15 -1: getLastModified +120 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/util/HashMap;>;)V +146 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MemberName;Ljava/lang/Class;Ljava/lang/invoke/MethodHandleImpl$1;)V +27 -1: parseExtensionsDependencies +10 -1: getRawType +39 -1: (Ljava/nio/charset/CodingErrorAction;)V +22 -1: ObjectStreamField.java +6 -1: handle +11 -1: hasPrevious +18 -1: instanceof Float: +52 -1: (ZLjava/io/OutputStream;Ljava/nio/charset/Charset;)V +4 -1: make +13 -1: isIdeographic +26 -1: java/util/HashMap$EntrySet +51 -1: (Ljava/util/Hashtable;)[Ljava/util/Hashtable$Entry; +91 -1: (Ljava/lang/CharSequence;Ljava/lang/Iterable<+Ljava/lang/CharSequence;>;)Ljava/lang/String; +13 -1: makeAllocator +10 -1: , headless +20 -1: expungeStaleElements +58 -1: sun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget +41 -1: ([Ljava/lang/Object;Ljava/lang/Class$1;)V +50 -1: (I)Ljava/util/Iterator; +7 -1: TreeBin +21 -1: Ljava/io/IOException; +56 -1: (I[Ljava/lang/Class;)[Ljava/lang/invoke/LambdaForm$Name; +6 -1: LOCFLG +6 -1: DIRECT +3 -1: SIG +37 -1: java/security/NoSuchProviderException +39 -1: " with illegal data type conversion to +16 -1: getCodeSourceURL +51 -1: java/util/concurrent/ConcurrentHashMap$EntrySetView +47 -1: (Ljava/util/ArrayList;Ljava/util/ArrayList$1;)V +6 -1: delete +38 -1: sun/reflect/UnsafeFieldAccessorFactory +11 -1: isDestroyed +140 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z +9 -1: unaligned +36 -1: ()Lsun/misc/Launcher$AppClassLoader; +57 -1: (Ljava/lang/String;Ljava/util/Locale;)[Ljava/lang/String; +37 -1: sun/reflect/annotation/AnnotationType +49 -1: ([TT;)Ljava/util/List; +24 -1: (S)Ljava/nio/ByteBuffer; +6 -1: ([DD)I +9 -1: setTarget +29 -1: (IF)Ljava/lang/StringBuilder; +12 -1: forBasicType +10 -1: (IIII[BI)V +8 -1: ([DIID)I +9 -1: BASE_YEAR +19 -1: ()Ljava/lang/Error; +42 -1: (Ljava/util/Map;)V +6 -1: ([DD)V +14 -1: Illegal size: +8 -1: ([DIID)V +7 -1: (II[I)I +17 -1: java_profile_name +28 -1: java/util/AbstractCollection +43 -1: (Ljava/net/URL;)[Ljava/security/CodeSource; +62 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/net/URLStreamHandler; +33 -1: [Ljava/util/HashMap$Node; +15 -1: (Native Method) +11 -1: fileNameMap +26 -1: ()Ljava/util/ListIterator; +25 -1: java/util/LinkedList$Node +18 -1: SELECT_ALTERNATIVE +35 -1: (Ljava/lang/Object;)Ljava/util/Set; +19 -1: java/io/IOException +16 -1: : already loaded +9 -1: image/gif +6 -1: (TE;)I +25 -1: (Ljava/util/Properties;)V +40 -1: (Ljava/lang/String;)Ljava/nio/file/Path; +19 -1: checkedNavigableMap +9 -1: checkInt( +17 -1: getContentTypeFor +26 -1: ()Ljava/io/FileDescriptor; +69 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V +6 -1: (TE;)V +25 -1: WARNING: Default charset +14 -1: ZipFile closed +2 -1: CA +6 -1: (TE;)Z +64 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToLongTask +15 -1: FileSystem.java +75 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +10 -1: FileLoader +44 -1: (Lsun/util/PreHashedMap;)[Ljava/lang/Object; +19 -1: availableProcessors +2 -1: CN +36 -1: ([JII)Ljava/util/Spliterator$OfLong; +11 -1: access$1100 +18 -1: getFieldAtIfLoaded +30 -1: PrivilegedActionException.java +6 -1: EUC-JP +20 -1: (F)Ljava/lang/Float; +22 -1: unable to instantiate +31 -1: java/lang/reflect/ReflectAccess +23 -1: (Ljava/lang/Object;JC)V +3 -1: get +59 -1: ([TT;IILjava/util/Comparator<-TT;>;)V +2 -1: DE +13 -1: GMT_ID_LENGTH +7 -1: execute +12 -1: MethodHandle +18 -1: AllPermission.java +54 -1: (Ljava/util/Locale;)Lsun/util/locale/LocaleExtensions; +23 -1: MapReduceKeysToLongTask +12 -1: varargsArray +23 -1: java/util/jar/JarFile$1 +23 -1: java/util/jar/JarFile$2 +23 -1: java/util/jar/JarFile$3 +12 -1: getAndUpdate +13 -1: reserveMemory +17 -1: expungeStaleEntry +6 -1: EUC-KR +120 -1: Ljava/lang/ref/WeakReference;Ljava/util/Map$Entry; +69 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher; +26 -1: ()Ljava/util/NavigableMap; +7 -1: L_PCHAR +23 -1: (Ljava/lang/String$1;)V +4 -1: KEYS +37 -1: (Ljava/util/List;Ljava/lang/Object;)I +31 -1: Ljava/lang/ArithmeticException; +15 -1: [Ljava/net/URL; +37 -1: (Ljava/util/List;Ljava/lang/Object;)V +18 -1: MAX_HIGH_SURROGATE +6 -1: (JCZ)V +4 -1: mark +17 -1: setMethodAccessor +21 -1: java/io/ExpiringCache +21 -1: PrivilegedAction.java +21 -1: MappedByteBuffer.java +2 -1: FR +10 -1: copyMemory +8 -1: L_SERVER +13 -1: assertionLock +12 -1: searchValues +46 -1: (Ljava/util/Collection<*>;Ljava/lang/Object;)I +21 -1: ProtectionDomainCache +32 -1: USE_PREDEFINED_INTERPRET_METHODS +2 -1: GB +16 -1: getFinalRefCount +23 -1: Ljava/lang/ClassLoader; +4 -1: mask +94 -1: (Ljava/util/function/ToDoubleFunction<-TT;>;)Ljava/util/Comparator; +4 -1: bind +41 -1: (Ljava/lang/Class<*>;I)Ljava/lang/Object; +9 -1: COUNT_GWT +16 -1: DASH_PUNCTUATION +24 -1: UNICODE_LOCALE_EXTENSION +15 -1: checkInvariants +10 -1: stringSize +12 -1: deepHashCode +30 -1: java/security/cert/Certificate +19 -1: America/Los_Angeles +19 -1: unmappableForLength +6 -1: UTF-16 +10 -1: methodType +21 -1: sun/misc/URLClassPath +19 -1: META-INF/INDEX.LIST +10 -1: jniVersion +6 -1: IBM437 +29 -1: sun/reflect/FieldAccessorImpl +21 -1: ()Ljava/lang/Package; +32 -1: java/security/SecurityPermission +57 -1: (Lsun/util/calendar/Era;)Lsun/util/calendar/CalendarDate; +34 -1: [Ljava/util/concurrent/locks/Lock; +11 -1: replacement +20 -1: ()Ljava/lang/String; +6 -1: resize +12 -1: UTF_32BE_BOM +26 -1: (Ljava/util/jar/JarFile;)V +24 -1: DEFAULT_INITIAL_CAPACITY +87 -1: (ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode; +74 -1: (Ljava/util/jar/JarFile;)Ljava/util/Enumeration; +18 -1: parameterSlotDepth +26 -1: (Ljava/util/jar/JarFile;)Z +18 -1: makePlatformString +24 -1: doPrivilegedWithCombiner +48 -1: (Ljava/lang/String;)Lsun/util/calendar/ZoneInfo; +27 -1: ()Ljava/lang/ref/Reference; +40 -1: java/util/ArrayList$ArrayListSpliterator +67 -1: ([Ljava/lang/Object;IILjava/util/Comparator;[Ljava/lang/Object;II)V +2 -1: ID +19 -1: stringPropertyNames +28 -1: (Ljava/util/Collections$1;)V +12 -1: STATE_YELLOW +12 -1: isNormalized +10 -1: fromIndex( +16 -1: getFloatVolatile +37 -1: Lsun/util/calendar/BaseCalendar$Date; +10 -1: properties +17 -1: peakFinalRefCount +102 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; +68 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; +2 -1: IT +9 -1: ([BI[BI)V +51 -1: scl permissions SecureClassLoader assigns +36 -1: (Ljava/util/Set;Ljava/lang/Object;)V +11 -1: ([SII[SII)V +21 -1: sun.io.useCanonCaches +18 -1: Illegal capacity: +22 -1: (Ljava/lang/Integer;)I +83 -1: ([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set<[Ljava/lang/Object;>;)V +65 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;II)V +17 -1: java/util/Objects +48 -1: (ILjava/util/List;)Ljava/lang/invoke/LambdaForm; +31 -1: java/util/Properties$XmlSupport +10 -1: L_LOWALPHA +13 -1: long overflow +25 -1: NullPointerException.java +32 -1: (I)Ljava/lang/StackTraceElement; +34 -1: ()[Ljava/lang/reflect/Constructor; +2 -1: JP +3 -1: SST +12 -1: ShortCountry +48 -1: (Ljava/util/stream/Collector;)Ljava/lang/Object; +29 -1: Lsun/reflect/CallerSensitive; +10 -1: addElement +12 -1: lastReturned +6 -1: putInt +34 -1: sun.misc.JarIndex.metaInfFilenames +13 -1: getBaseLocale +20 -1: StringTokenizer.java +8 -1: entrySet +11 -1: getTypeName +17 -1: America/Sao_Paulo +5 -1: \t... +35 -1: (Lsun/util/calendar/CalendarDate;)I +28 -1: java/lang/StackOverflowError +35 -1: (Lsun/util/calendar/CalendarDate;)J +10 -1: logicalAnd +18 -1: csISOLatinCyrillic +43 -1: (Ljava/lang/String;II)Ljava/nio/CharBuffer; +73 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;Z)Ljava/lang/invoke/MethodType; +14 -1: aliases_MS1250 +14 -1: aliases_MS1251 +17 -1: getImplMethodKind +17 -1: getLastAccessTime +14 -1: aliases_MS1252 +14 -1: aliases_MS1253 +35 -1: (Lsun/util/calendar/CalendarDate;)V +2 -1: KR +14 -1: aliases_MS1254 +14 -1: getGenericInfo +8 -1: utf_32be +14 -1: aliases_MS1257 +35 -1: (Lsun/util/calendar/CalendarDate;)Z +13 -1: StringEncoder +7 -1: LDT2037 +7 -1: generic +2 -1: L9 +45 -1: ([DLjava/util/function/IntToDoubleFunction;)V +17 -1: isOtherAlphabetic +9 -1: implWrite +24 -1: PC-Multilingual-850+euro +12 -1: valueMatches +78 -1: (Ljava/lang/String;Lsun/util/locale/ParseStatus;)Lsun/util/locale/LanguageTag; +3 -1: gmt +19 -1: (Ljava/io/Reader;)V +25 -1: (JJ)Ljava/nio/ByteBuffer; +7 -1: val$url +26 -1: (Ljava/nio/ByteBuffer;IJ)V +10 -1: isImplicit +19 -1: getDeclaredClasses0 +4 -1: (I)B +4 -1: (I)C +4 -1: (I)D +9 -1: byteValue +4 -1: (I)F +5 -1: ([J)I +6 -1: isLive +5 -1: sleep +4 -1: (I)I +4 -1: (I)J +6 -1: outBuf +77 -1: Ljava/util/AbstractCollection;Ljava/util/Set; +4 -1: (I)S +5 -1: ([J)V +4 -1: (I)V +30 -1: (I[C)Ljava/lang/StringBuilder; +14 -1: intBitsToFloat +4 -1: (I)Z +15 -1: MethodType.java +14 -1: resolveSibling +9 -1: Enum.java +111 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V +14 -1: IS_CONSTRUCTOR +4 -1: bits +34 -1: java/security/PermissionCollection +9 -1: autoFlush +21 -1: java/util/Collections +12 -1: bindReceiver +20 -1: DMH.invokeStaticInit +11 -1: charsetName +14 -1: x-utf-32be-bom +5 -1: cause +7 -1: handle0 +43 -1: ([I[C[Ljava/lang/invoke/LambdaForm$Name;I)Z +30 -1: getDefaultAllowUserInteraction +18 -1: ConcurrentMap.java +35 -1: (Ljava/lang/String;Z)Ljava/net/URL; +33 -1: Ljava/nio/charset/CharsetDecoder; +36 -1: java/lang/invoke/MethodHandleStatics +34 -1: java/util/concurrent/ConcurrentMap +16 -1: collectArguments +22 -1: packageAssertionStatus +79 -1: (JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J +39 -1: Cannot reflectively create enum objects +62 -1: attempt to add a Permission to a readonly PermissionCollection +22 -1: FieldAccessorImpl.java +9 -1: ByteCache +4 -1: TRUE +85 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable; +17 -1: java.library.path +7 -1: encoder +21 -1: default locale = +11 -1: secondOfDay +37 -1: (Lsun/util/calendar/ZoneInfoFile$1;)V +35 -1: sun/reflect/UnsafeFieldAccessorImpl +24 -1: (Ljava/lang/Object;JJJ)V +16 -1: countStackFrames +24 -1: (Ljava/lang/Object;JJJ)Z +17 -1: nonfairTryAcquire +20 -1: ArrayListSpliterator +5 -1: /DMH= +68 -1: (Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String; +2 -1: PI +8 -1: cspcp852 +112 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale; +8 -1: cspcp855 +58 -1: (Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z +33 -1: sun/misc/PerfCounter$CoreCounters +6 -1: CESU_8 +7 -1: vmslots +4 -1: Init +7 -1: handler +11 -1: getProperty +10 -1: isVolatile +8 -1: ([J[IJ)I +25 -1: ()Ljava/lang/ClassLoader; +8 -1: asChange +81 -1: (Ljava/net/URLClassLoader;Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; +12 -1: naturalOrder +8 -1: getState +40 -1: (Ljava/lang/Object;I)[Ljava/lang/String; +36 -1: java/security/AccessControlException +10 -1: linkBefore +48 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;Z)V +26 -1: (Ljava/util/WeakHashMap;)V +23 -1: bad method type alias: +7 -1: putChar +18 -1: basicTypeSignature +33 -1: sun/misc/InvalidJarIndexException +13 -1: getPrivateuse +14 -1: isConstantZero +24 -1: java/io/FilePermission$1 +9 -1: Long.java +19 -1: getLocaleExtensions +10 -1: discovered +17 -1: Invalid file path +12 -1: MAX_MH_ARITY +20 -1: observesDaylightTime +31 -1: Ljava/lang/invoke/MethodHandle; +6 -1: , end +24 -1: java/io/FileDescriptor$1 +12 -1: loadLibrary. +11 -1: Method.java +12 -1: loadLibrary0 +23 -1: java/util/stream/Stream +37 -1: sun.lang.ClassLoader.allowArraySyntax +8 -1: appClass +15 -1: FileReader.java +5 -1: (IF)I +29 -1: [Ljava/lang/ClassValue$Entry; +12 -1: (principals +30 -1: jar jar verification +22 -1: ARRAY_CHAR_BASE_OFFSET +18 -1: newDirectoryStream +4 -1: atan +5 -1: (IF)V +24 -1: (Ljava/lang/Character;)I +2 -1: TH +10 -1: startsWith +9 -1: baseCount +13 -1: canonicalize0 +47 -1: (Ljava/lang/ClassLoader;[Ljava/lang/Class<*>;)V +22 -1: Ljava/io/OutputStream; +2 -1: TW +10 -1: H_RESERVED +19 -1: URLClassLoader.java +16 -1: isAccessibleFrom +59 -1: Ljava/util/Hashtable; +33 -1: java/lang/invoke/ConstantCallSite +14 -1: Ljava/net/URL; +12 -1: deleteOnExit +20 -1: MAX_SKIP_BUFFER_SIZE +30 -1: [Ljava/lang/ref/WeakReference; +15 -1: contentPathProp +9 -1: initCause +53 -1: (Ljava/util/Queue;Ljava/lang/Class;)Ljava/util/Queue; +20 -1: java/util/TimeZone$1 +2 -1: UK +86 -1: (BLjava/lang/Class;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; +51 -1: (II[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +18 -1: Lsun/misc/Cleaner; +31 -1: RuntimeInvisibleTypeAnnotations +2 -1: US +7 -1: makeInt +40 -1: sun/reflect/annotation/AnnotationSupport +28 -1: sun/reflect/misc/ReflectUtil +8 -1: utf_32le +40 -1: (Ljava/lang/Object;JLjava/lang/Object;)V +24 -1: java/nio/file/WatchEvent +66 -1: (Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/invoke/MethodType; +91 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; +114 -1: (Ljava/lang/ThreadLocal;ILjava/lang/ThreadLocal$ThreadLocalMap$Entry;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; +20 -1: internalWriteEntries +79 -1: (TT;Ljava/util/function/Supplier;)TT; +14 -1: bitIndex < 0: +88 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; +6 -1: , len +28 -1: java/io/BufferedOutputStream +11 -1: System.java +11 -1: csISOLatin1 +11 -1: csISOLatin2 +28 -1: Ljava/io/OutputStreamWriter; +27 -1: IllegalAccessException.java +11 -1: csISOLatin4 +14 -1: isDaylightTime +11 -1: csISOLatin5 +21 -1: getYearLengthInMonths +13 -1: canonicalizes +93 -1: "'s signer information does not match signer information of other classes in the same package +32 -1: ()Lsun/management/GcInfoBuilder; +37 -1: (IILjava/nio/charset/CoderResult$1;)V +10 -1: stateNames +46 -1: (Ljava/lang/String;)Ljava/nio/charset/Charset; +21 -1: acquireMethodAccessor +2 -1: X- +32 -1: java/security/ProtectionDomain$1 +5 -1: atan2 +32 -1: java/security/ProtectionDomain$2 +32 -1: java/security/ProtectionDomain$3 +41 -1: malformed input: partial character at end +18 -1: dropParameterTypes +44 -1: (Ljava/lang/String;)Ljava/lang/StringBuffer; +18 -1: CalendarUtils.java +5 -1: month +84 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; +33 -1: sun/misc/JavaNioAccess$BufferPool +18 -1: SearchMappingsTask +38 -1: DelegatingConstructorAccessorImpl.java +80 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class<*>;)Ljava/lang/invoke/MemberName; +8 -1: instance +54 -1: Parameter annotations don't match number of parameters +14 -1: createConstant +35 -1: java/lang/invoke/MemberName$Factory +4 -1: scrt +34 -1: Ljava/lang/InstantiationException; +20 -1: allowUserInteraction +15 -1: java/util/Deque +16 -1: forEachRemaining +35 -1: (J)Lsun/util/calendar/CalendarDate; +13 -1: no such field +25 -1: java/nio/file/FileSystems +16 -1: expectedModCount +44 -1: (Ljava/io/File;ILjava/nio/charset/Charset;)V +12 -1: createString +15 -1: useDaylightTime +31 -1: java/util/Properties$LineReader +111 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Class<*>;I[Ljava/lang/invoke/MemberName;)I +16 -1: java/util/Locale +26 -1: URLClassPath.getResource(" +58 -1: (Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)V +10 -1: appendTail +7 -1: cleaner +78 -1: (Lsun/nio/cs/FastCharsetProvider;Ljava/lang/String;)Ljava/nio/charset/Charset; +18 -1: convertOldISOCodes +4 -1: year +38 -1: java/lang/ReflectiveOperationException +28 -1: (Ljava/lang/StringBuffer;B)V +27 -1: (D)Ljava/lang/StringBuffer; +17 -1: emptyNavigableSet +7 -1: indices +10 -1: is sealed +21 -1: SPECIFICATION_VERSION +3 -1: TE; +8 -1: addMonth +24 -1: java/util/HashMap$Values +17 -1: SEARCH_ALL_SUPERS +18 -1: uncaught exception +14 -1: declaredFields +2 -1: [B +2 -1: [C +8 -1: ABSTRACT +2 -1: [D +2 -1: [F +2 -1: [I +2 -1: [J +5 -1: false +36 -1: (Ljava/net/URL;Ljava/lang/String;J)V +12 -1: equalContext +11 -1: VOID_RESULT +2 -1: [S +24 -1: (JLjava/lang/Object;JJ)V +36 -1: Ljava/security/PermissionCollection; +2 -1: [Z +17 -1: floatToRawIntBits +2 -1: [] +21 -1: ()[Ljava/lang/Thread; +20 -1: [Ljava/lang/Integer; +42 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Z)V +19 -1: checkPrintJobAccess +40 -1: (Ljava/lang/Object;)Ljava/lang/Class<*>; +31 -1: (Lsun/reflect/FieldAccessor;Z)V +10 -1: reallyPoll +52 -1: (Ljava/lang/ref/Reference;)Ljava/lang/ref/Reference; +100 -1: (JLjava/util/function/Function<-TV;+TU;>;Ljava/util/function/Consumer<-TU;>;)V +19 -1: CheckedNavigableMap +48 -1: (Ljava/lang/String;)Ljava/lang/RuntimeException; +35 -1: java/util/Hashtable$ValueCollection +89 -1: (JLjava/util/function/ToDoubleFunction<-TK;>;DLjava/util/function/DoubleBinaryOperator;)D +10 -1: Stack.java +57 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;I)V +12 -1: getTimeOfDay +12 -1: reduceValues +22 -1: warnUnsupportedCharset +34 -1: (Ljava/lang/ref/Reference<+TS;>;)Z +31 -1: EEE, dd MMM yyyy HH:mm:ss 'GMT' +19 -1: setCachedLambdaForm +21 -1: (I)Ljava/lang/Object; +85 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;Ljava/util/Locale$1;)V +36 -1: java/security/AccessControlContext$1 +27 -1: Lsun/net/www/MessageHeader; +23 -1: ()[Ljava/lang/Class<*>; +14 -1: refKindIsValid +41 -1: sun/reflect/NativeConstructorAccessorImpl +6 -1: binary +23 -1: ()Ljava/nio/CharBuffer; +8 -1: getSpace +45 -1: bootstrap method failed to produce a CallSite +15 -1: getISO3Language +17 -1: TRANSITION_NSHIFT +163 -1: ([Ljava/lang/String;Ljava/util/Map;>;)Ljava/util/Map;>; +7 -1: os.name +38 -1: java/util/function/IntToDoubleFunction +8 -1: checkInt +21 -1: java/lang/VerifyError +42 -1: sunpkcs11 SunPKCS11 provider debugging +19 -1: URI is not absolute +23 -1: java/io/DataInputStream +53 -1: (Ljava/lang/Object;)Ljava/nio/charset/CharsetEncoder; +2 -1: _# +41 -1: (Ljava/io/FilenameFilter;)[Ljava/io/File; +26 -1: Ljava/util/jar/Attributes; +7 -1: collect +17 -1: Lsun/misc/Unsafe; +97 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; +78 -1: (Ljava/util/Enumeration;)Ljava/util/ArrayList; +28 -1: (II)Ljava/lang/StringBuffer; +54 -1: (Ljava/lang/reflect/Constructor<*>;)Ljava/lang/String; +28 -1: ()Ljava/util/ResourceBundle; +48 -1: java/util/ArraysParallelSortHelpers$FJInt$Sorter +9 -1: no access +57 -1: Ljava/lang/ref/ReferenceQueue; +7 -1: getPerf +11 -1: getClassAt0 +11 -1: rtypeOffset +20 -1: thread can't be null +12 -1: addArguments +12 -1: utf_32le_bom +21 -1: allowThreadSuspension +25 -1: defaultExpectedLineLength +11 -1: removeFirst +13 -1: reduceEntries +20 -1: Read-ahead limit < 0 +57 -1: (Ljava/util/Collection<-TT;>;[TT;)Z +39 -1: ()Ljava/lang/invoke/MemberName$Factory; +13 -1: ZipCoder.java +16 -1: java/lang/Thread +27 -1: java/lang/NoSuchMethodError +66 -1: (Ljava/util/jar/JarFile;Ljava/net/URL;)[Ljava/security/CodeSource; +22 -1: java/lang/StringBuffer +3 -1: TK; +34 -1: (I)Ljava/lang/invoke/MethodHandle; +30 -1: (Ljava/lang/reflect/Method;Z)V +13 -1: file.encoding +14 -1: removeTreeNode +27 -1: sun/misc/JavaSecurityAccess +58 -1: ([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object; +19 -1: equalLimitedContext +22 -1: appendVmSynonymMessage +10 -1: applyAsInt +23 -1: privateGetPublicMethods +11 -1: dumpThreads +25 -1: RuntimeVisibleAnnotations +37 -1: (IF)Ljava/lang/AbstractStringBuilder; +18 -1: getBooleanVolatile +27 -1: (Ljava/util/zip/ZipFile;J)V +25 -1: INITIAL_QUOTE_PUNCTUATION +51 -1: (Ljava/util/Map;)[Ljava/lang/annotation/Annotation; +54 -1: (ILjava/lang/Object;)Ljava/lang/AbstractStringBuilder; +20 -1: reflectionDataOffset +2 1: aa +51 -1: (Ljava/util/jar/Attributes$Name;)Ljava/lang/String; +13 -1: transferLinks +18 -1: java/util/Vector$1 +10 -1: ensureOpen +22 -1: getDeclaredConstructor +2 -1: am +19 -1: NF_allocateInstance +66 -1: (Ljava/util/Spliterator$OfDouble;Z)Ljava/util/stream/DoubleStream; +6 -1: ([SS)I +17 -1: newReflectionData +19 -1: subclassAuditsQueue +11 -1: access$1200 +16 -1: ValueSpliterator +18 -1: preparedLambdaForm +38 -1: (Ljava/net/URL;)Ljava/net/InetAddress; +14 -1: getMaxPriority +32 -1: ()[Ljava/lang/StackTraceElement; +67 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToDoubleTask +62 -1: (Ljava/util/Hashtable;)V +6 -1: EXTHDR +14 -1: java/util/Date +2 -1: az +6 -1: ([SS)V +15 -1: arrayBaseOffset +9 -1: isTrusted +23 -1: (Ljava/lang/Object;JD)V +2 -1: bb +10 -1: ([BII[BI)V +7 -1: toLower +14 -1: invoke_LLLLL_L +7 -1: jarfile +42 -1: (Ljava/lang/String;)Lsun/misc/PerfCounter; +28 -1: java/lang/ref/Reference$Lock +16 -1: java/util/BitSet +22 -1: jarfile parsing error! +18 -1: jdk_update_version +14 -1: invoke_LLLLL_V +20 -1: java/util/LinkedList +22 -1: erasedInvokerWithDrops +25 -1: timeout value is negative +21 -1: getCalendarProperties +25 -1: not a method descriptor: +2 -1: cb +31 -1: (Lsun/misc/JavaUtilJarAccess;)V +2 -1: cd +43 -1: Lsun/util/PreHashedMap; +12 -1: getEntrySize +2 -1: ce +24 -1: guessContentTypeFromName +2 -1: ch +14 -1: JulianCalendar +22 -1: [Ljava/lang/Cloneable; +122 -1: Ljava/util/AbstractCollection;Ljava/util/Deque;Ljava/lang/Cloneable;Ljava/io/Serializable; +34 -1: Lsun/util/locale/BaseLocale$Cache; +14 -1: LinkedEntrySet +72 -1: Ljava/util/AbstractSet;Ljava/io/Serializable; +39 -1: ()Ljava/io/ObjectOutputStream$PutField; +2 -1: cs +8 -1: indexFor +25 -1: (Ljava/util/List<+TE;>;)V +7 -1: subpath +11 -1: invokeExact +14 -1: setFileNameMap +22 -1: LangReflectAccess.java +8 -1: referent +34 -1: java/util/MissingResourceException +77 -1: (Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package; +11 -1: ([FII[FII)V +17 -1: getParameterCount +18 -1: isMemberAccessible +10 -1: getExtDirs +69 -1: (Ljava/util/List<-TT;>;Ljava/util/List<+TT;>;)V +9 -1: getNextPC +13 -1: setProperties +2 -1: de +16 -1: generateCertPath +6 -1: decode +16 -1: getDefaultParent +50 -1: (Ljava/net/URL;[Ljava/security/cert/Certificate;)V +24 -1: Certificate factory for +35 -1: ()Ljava/lang/reflect/AnnotatedType; +2 -1: ee +12 -1: asLongBuffer +7 -1: PRIVATE +16 -1: aliases_UTF_32BE +2 -1: en +2 -1: eq +7 -1: indexOf +136 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class<+Ljava/lang/Throwable;>;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +24 -1: (Ljava/lang/Class<*>;I)V +72 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/IllegalAccessException; +35 -1: java/util/jar/JavaUtilJarAccessImpl +24 -1: (Ljava/lang/Class<*>;I)Z +2 -1: ex +24 -1: getProtectionDomainCache +101 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;JLjava/security/AccessControlContext;)V +3 -1: hit +8 -1: UTF_16BE +2 -1: fd +16 -1: EmptyEnumeration +4 -1: attr +16 -1: fromIndex < -1: +7 -1: getIntB +22 -1: java/io/FilePermission +2 -1: fr +2 -1: fs +7 -1: lazySet +7 -1: getIntL +37 -1: configfile JAAS ConfigFile loading +24 -1: sun/nio/cs/StreamEncoder +40 -1: (Ljava/time/ZoneId;)Ljava/util/TimeZone; +132 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/BiConsumer;)V +2 -1: gc +18 -1: Ljava/lang/Thread; +10 -1: cacheArray +48 -1: (Ljava/util/jar/JarFile;)Ljava/util/jar/JarFile; +61 -1: (Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)V +8 -1: readByte +7 -1: ([S[S)Z +24 -1: findBootstrapClassOrNull +2 -1: hb +7 -1: REPLACE +45 -1: ()Ljava/util/Enumeration; +10 -1: isOverflow +2 -1: he +13 -1: getCachedJan1 +12 -1: getClassPath +8 -1: leapYear +31 -1: java/lang/invoke/MethodTypeForm +10 -1: ANNOTATION +20 -1: getGregorianCalendar +11 -1: ISO_8859_13 +11 -1: ISO_8859_15 +6 -1: invoke +2 -1: ht +7 -1: ListItr +15 -1: synchronizedMap +7 -1: cleanup +94 -1: (Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;)Lsun/reflect/annotation/AnnotationType; +3 -1: TT; +69 -1: (JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/Gregorian$Date; +81 -1: (Ljava/util/HashMap$TreeNode;)Z +20 -1: Min. Heap Size: +33 -1: (IZ)Ljava/lang/invoke/MethodType; +2 -1: id +7 -1: ([DI)[D +37 -1: (Ljava/lang/reflect/Constructor<*>;)I +42 -1: ;>([TT;II)V +13 -1: addSuppressed +28 -1: internalMemberNameEnsureInit +2 -1: in +17 -1: getCompressedSize +34 -1: sun/misc/Launcher$AppClassLoader$1 +88 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class<*>;)Ljava/security/AccessControlContext; +37 -1: (Ljava/lang/reflect/Constructor<*>;)V +2 -1: is +2 -1: it +6 -1: ENDOFF +4 -1: void +2 -1: iw +14 -1: emptySortedSet +2 -1: ix +17 -1: unicode-1-1-utf-8 +64 -1: (Ljava/lang/Class;Ljava/util/List;)Ljava/lang/invoke/MethodType; +46 -1: (Lsun/misc/URLClassPath$Loader;)Ljava/net/URL; +2 -1: ja +13 -1: synchronized +76 -1: ([DLjava/util/function/IntToDoubleFunction;)Ljava/util/function/IntConsumer; +11 -1: wrapperType +51 -1: ()Ljava/util/Comparator; +106 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/Object; +17 -1: removeAllElements +2 -1: ji +24 -1: java/util/Vector$ListItr +14 -1: getNestedTypes +6 -1: L_MARK +27 -1: Source does not fit in dest +2 -1: l1 +2 -1: jp +2 -1: l2 +4 -1: (J)B +57 -1: (Ljava/lang/String;Ljava/util/Locale;I)Ljava/lang/String; +4 -1: (J)C +27 -1: ForEachTransformedValueTask +2 -1: l4 +26 -1: java/util/Hashtable$KeySet +4 -1: (J)D +2 -1: l5 +39 -1: java/security/BasicPermissionCollection +4 -1: (J)F +2 -1: jv +29 -1: MapReduceMappingsToDoubleTask +18 -1: copyFromShortArray +2 -1: l9 +3 -1: TV; +4 -1: (J)I +4 -1: (J)J +23 -1: Lsun/util/calendar/Era; +8 -1: x-EUC-TW +15 -1: checkSetFactory +7 -1: Special +4 -1: (J)S +4 -1: (J)V +7 -1: invoke_ +25 -1: (IC)Ljava/nio/ByteBuffer; +68 -1: (JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/attribute/FileTime; +36 -1: ()Ljava/net/URLStreamHandlerFactory; +4 -1: (J)Z +181 -1: (Ljava/lang/Class<*>;Ljava/lang/ref/SoftReference;>;Ljava/lang/ref/SoftReference;>;)Z +9 -1: getOffset +46 -1: (ILjava/lang/String;)Ljava/lang/StringBuilder; +7 -1: element +15 -1: createByteArray +17 -1: uncaughtException +2 -1: ko +29 -1: java/nio/file/DirectoryStream +15 -1: getISOCountries +246 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class<*>;Ljava/lang/Class;)Ljava/lang/invoke/MemberName;^Ljava/lang/IllegalAccessException;^TNoSuchMemberException; +7 -1: invoker +17 -1: langReflectAccess +10 -1: bindSingle +23 -1: java/lang/reflect/Proxy +2 -1: lb +2 -1: lc +29 -1: CREATE_CLASSLOADER_PERMISSION +5 -1: isSet +18 -1: ([Ljava/io/File;)V +15 -1: urlNoFragString +21 -1: DirectByteBuffer.java +15 -1: java.class.path +15 -1: createDirectory +4 -1: GMT +37 -1: sun/reflect/annotation/ExceptionProxy +28 -1: (Ljava/util/Map<+TK;+TV;>;)V +17 -1: getContentHandler +26 -1: GenericDeclRepository.java +56 -1: (Ljava/lang/String;)Ljava/lang/IllegalArgumentException; +15 -1: getJavaIOAccess +39 -1: java/util/Collections$EmptyListIterator +34 -1: java/lang/ConditionalSpecialCasing +82 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/management/GarbageCollectorMBean; +58 -1: (Ljava/util/function/ToIntFunction;)Ljava/util/Comparator; +21 -1: ()Lsun/misc/Launcher; +2 -1: lt +92 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V +8 -1: disjoint +62 -1: (Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V +24 -1: ([Ljava/lang/Object;)TT; +4 -1: lmap +8 -1: SATURDAY +12 -1: toStringUTF8 +91 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object; +46 -1: pkcs11 PKCS11 session manager debugging +27 -1: (Z)Ljava/lang/StringBuffer; +7 -1: forEach +17 -1: (Ljava/io/File;)I +17 -1: (Ljava/io/File;)J +5 -1: RESET +6 -1: isFile +14 -1: Exception.java +8 -1: isPublic +27 -1: computeInitialPreparedForms +50 -1: (BZLjava/lang/Class;)Ljava/lang/invoke/LambdaForm; +19 -1: getAvailableLocales +17 -1: (Ljava/io/File;)V +28 -1: ()Ljava/nio/charset/Charset; +10 -1: appendNull +17 -1: (Ljava/io/File;)Z +23 -1: java/lang/InternalError +2 -1: ne +6 -1: radix +8 -1: checksum +66 -1: (Lsun/net/www/MessageHeader;Ljava/lang/String;Ljava/lang/Object;)V +45 -1: (Ljava/io/FilenameFilter;)[Ljava/lang/String; +8 -1: checkJar +28 -1: default format locale = +13 -1: normalizeTime +26 -1: java/util/AbstractList$Itr +30 -1: java/util/function/IntFunction +7 -1: TIS-620 +12 -1: reverseBytes +2 -1: of +26 -1: java/lang/ClassFormatError +109 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; +10 -1: delimiters +20 -1: indexOfSupplementary +16 -1: aliases_UTF_32LE +134 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/Map; +17 -1: [Ljava/lang/Long; +2 -1: or +12 -1: getClassName +31 -1: (Ljava/nio/charset/Charset;FF)V +6 -1: ([FF)I +39 -1: (Ljava/util/Locale;)[Ljava/lang/String; +33 -1: java/util/WeakHashMap$KeyIterator +8 -1: UTF_16LE +12 -1: isISOControl +75 -1: (Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult; +7 -1: ([I[I)Z +28 -1: Self-causation not permitted +6 -1: ([FF)V +14 -1: defaultCharset +12 -1: isJavaLetter +2 -1: pm +39 -1: cannot reflectively invoke MethodHandle +20 -1: getSystemClassLoader +42 -1: ([Ljava/lang/Object;IILjava/lang/Object;)I +56 -1: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +42 -1: ([Ljava/lang/Object;IILjava/lang/Object;)V +12 -1: ZipFile.java +43 -1: (Ljava/util/zip/ZipFile;)Ljava/lang/String; +22 -1: Ljava/net/InetAddress; +15 -1: getCharVolatile +32 -1: ()[Ljava/lang/reflect/Parameter; +13 -1: delimsChanged +13 -1: getFileSystem +13 -1: METHOD_RETURN +20 -1: sun/misc/PerfCounter +61 -1: (Ljava/util/HashMap;)Ljava/util/HashMap$Node; +8 -1: newIndex +18 -1: getDisplayLanguage +36 -1: (C)Ljava/lang/AbstractStringBuilder; +36 -1: java/lang/StringCoding$StringEncoder +12 -1: forEachEntry +23 -1: [Ljava/io/Serializable; +13 -1: totalCapacity +26 -1: java/io/FileOutputStream$1 +14 -1: signatureArity +90 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/security/cert/Certificate;)V +17 -1: reflectionFactory +6 -1: ibm737 +17 -1: fillInStackTrace0 +16 -1: allocateInstance +52 -1: (Lsun/util/locale/BaseLocale$Key;)Ljava/lang/String; +9 -1: addExtURL +16 -1: copyFromIntArray +65 -1: (Ljava/security/Permission;Z)Ljava/security/PermissionCollection; +57 -1: java/util/concurrent/ConcurrentHashMap$SearchMappingsTask +10 -1: toEpochDay +4 -1: gate +24 -1: sun/nio/cs/UTF_8$Decoder +8 -1: entries2 +18 -1: isCharsetSupported +10 -1: toCustomID +2 -1: rw +33 -1: java/nio/ByteBufferAsFloatBufferB +25 -1: (ID)Ljava/nio/ByteBuffer; +12 -1: addTimeOfDay +61 -1: (Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z +2 -1: sd +25 -1: (Ljava/net/InetAddress;)V +33 -1: java/nio/ByteBufferAsFloatBufferL +2 -1: se +15 -1: hasQueuedThread +24 -1: assertMemberIsConsistent +37 -1: java/util/Collections$UnmodifiableMap +2 -1: sp +20 -1: setJavaUtilJarAccess +96 -1: (Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class; +8 -1: language +76 -1: (Ljava/util/SortedSet;)Ljava/util/SortedSet; +11 -1: findLibrary +61 -1: (Ljava/lang/Class<*>;)Lsun/reflect/annotation/AnnotationType; +6 -1: ([BZ)V +24 -1: DEFAULT_BYTE_BUFFER_SIZE +25 -1: (Ljava/util/ArrayList;I)V +2 -1: th +47 -1: (Ljava/util/Collection;)Ljava/util/Enumeration; +49 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/net/URL; +7 -1: ([D[D)Z +2 -1: to +22 -1: java/util/Locale$Cache +8 -1: iterator +30 -1: (Ljava/lang/StringBuilder;IZ)V +17 -1: ()Ljava/util/Set; +2 -1: tr +27 -1: (Ljava/nio/ByteBuffer;ISZ)V +6 -1: method +13 -1: allPermission +9 -1: ruleArray +8 -1: UTC_TIME +10 -1: LF_COUNTER +26 -1: Lsun/nio/cs/StreamDecoder; +25 -1: ()Lsun/util/calendar/Era; +6 -1: LOCHDR +21 -1: sun/net/www/MimeTable +12 -1: Cannot cast +2 -1: us +2 -1: ut +52 -1: Ljava/lang/invoke/MethodHandle$PolymorphicSignature; +6 -1: encode +15 -1: CharBuffer.java +24 -1: (C)Ljava/nio/ByteBuffer; +56 -1: (Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;)V +18 -1: getEnclosingMethod +56 -1: (Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;)Z +6 -1: ibm775 +9 -1: (IIIIII)I +44 -1: ([JLjava/util/function/IntToLongFunction;I)V +9 -1: (IIIIII)J +64 -1: (Ljava/util/Locale$LocaleKey;)Lsun/util/locale/LocaleExtensions; +2 -1: x- +2 -1: vm +5 -1: clock +9 -1: (IIIIII)V +10 -1: XmlSupport +19 -1: sun/nio/cs/US_ASCII +10 -1: toRealPath +5 -1: cp367 +6 -1: ST_END +58 -1: [Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule; +12 -1: hasSameRules +108 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/LocaleExtensions; +22 -1: java/lang/Class$Atomic +4 -1: sync +6 -1: listen +12 -1: firstElement +142 -1: (Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B[B)Ljava/lang/reflect/Method; +18 -1: internalProperties +28 -1: (Ljava/lang/StringBuffer;C)V +7 -1: factory +18 -1: ()Ljava/util/List; +50 -1: (Ljava/util/concurrent/CountedCompleter;[D[DIIII)V +44 -1: (Ljava/lang/Class;)Lsun/invoke/util/Wrapper; +83 -1: (JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D +12 -1: erasedType: +53 -1: (Ljava/util/AbstractList;Ljava/util/AbstractList$1;)V +20 -1: Cannot find package +27 -1: java/util/ArrayList$ListItr +10 -1: copyMethod +23 -1: java/lang/ThreadLocal$1 +16 -1: iso_646.irv:1983 +42 -1: (Ljava/lang/Thread;Ljava/lang/Throwable;)V +19 -1: DEFAULT_LOAD_FACTOR +40 -1: ([Ljava/lang/Object;)[Ljava/lang/Object; +10 -1: (JJJ[BII)I +12 -1: singletonMap +8 -1: RESERVED +9 -1: zipAccess +21 -1: SynchronizedSortedMap +4 -1: flag +15 -1: UnmodifiableSet +18 -1: WrappedPrintWriter +7 -1: resume0 +2 -1: yi +10 -1: erasedType +31 -1: CHECK_AWT_EVENTQUEUE_PERMISSION +8 -1: +59 -1: (Ljava/lang/String;)Ljava/security/cert/CertificateFactory; +40 -1: java/lang/management/MemoryManagerMXBean +33 -1: newGetIntIllegalArgumentException +16 -1: iso_646.irv:1991 +58 -1: (Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; +2 -1: zc +26 -1: (Ljava/util/AbstractMap;)V +6 -1: THROWS +11 -1: toCharArray +64 -1: (Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor; +2 -1: zh +68 -1: Ljava/lang/ref/SoftReference;>; +25 -1: (Ljava/util/Collection;)V +20 -1: getJdkSpecialVersion +17 -1: getTypeParameters +32 -1: [Ljava/lang/ClassValue$Entry<*>; +25 -1: (Ljava/util/Collection;)Z +26 -1: Lsun/nio/ch/Interruptible; +5 -1: 0.0p0 +5 -1: CACHE +7 -1: namesOK +21 -1: Ljava/lang/Exception; +51 -1: (Ljava/net/URL;Lsun/net/www/protocol/jar/Handler;)V +19 -1: jdk_special_version +66 -1: (Ljava/util/List;)Ljava/util/List; +75 -1: (Ljava/util/Comparator;Ljava/util/function/Function;)Ljava/util/Comparator; +11 -1: Arrays.java +19 -1: (Ljava/lang/Byte;)I +17 -1: java/lang/Class$1 +17 -1: java/lang/Class$2 +17 -1: java/lang/Class$3 +47 -1: java/lang/invoke/MethodHandleImpl$WrappedMember +17 -1: java/lang/Class$4 +44 -1: (Ljava/lang/Throwable;)Ljava/lang/Throwable; +9 -1: charCount +24 -1: ()Ljava/net/FileNameMap; +44 -1: sun/util/locale/provider/TimeZoneNameUtility +17 -1: not an array type +2 -1: {} +24 -1: (Lsun/misc/Launcher$1;)V +12 -1: directMemory +10 -1: parameters +5 -1: java. +14 -1: allocateDirect +51 -1: (Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder; +23 -1: java/nio/file/Watchable +37 -1: createDiagnosticFrameworkNotification +54 -1: (Ljava/lang/Class<*>;Z)Ljava/lang/invoke/MethodHandle; +35 -1: sun/nio/cs/StandardCharsets$Aliases +9 -1: retDelims +11 -1: MAX_ENTRIES +12 -1: CumulateTask +64 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedKeyTask +3 -1: iae +12 -1: AF_PUTSTATIC +21 -1: java/lang/Throwable$1 +45 -1: (Ljava/util/HashMap;)Ljava/util/HashMap$Node; +77 -1: (JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I +5 -1: after +29 -1: (Ljava/security/CodeSource;)Z +248 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToDoubleTask;Ljava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)V +6 -1: H_URIC +7 -1: L_DIGIT +7 -1: toNanos +24 -1: (D)Ljava/nio/ByteBuffer; +25 -1: getDiagnosticCommandMBean +6 2: [LFoo; +14 -1: path.separator +16 -1: toUnsignedString +40 -1: DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR +87 -1: (Ljava/security/Permission;[Ljava/security/cert/Certificate;)Ljava/security/Permission; +16 -1: inheritedChannel +11 -1: audio/basic +27 -1: sun.classloader.findClasses +10 -1: queryCount +20 -1: NF_ensureInitialized +12 -1: getBufIfOpen +23 -1: sun/nio/cs/UTF_16LE_BOM +134 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; +17 -1: getImplMethodName +14 -1: linkMethod => +25 -1: Ljava/lang/invoke/Stable; +32 -1: Ljava/lang/annotation/Retention; +7 -1: doInput +9 -1: -_.!~*'() +62 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;B)V +18 -1: separateWithCommas +43 -1: com/sun/crypto/provider/CipherBlockChaining +14 -1: createTempFile +9 -1: implFlush +20 -1: getOffsetsByStandard +21 -1: OutOfMemoryError.java +7 -1: jce.jar +46 -1: java/util/Collections$UnmodifiableNavigableMap +30 -1: (Ljava/io/File;)Ljava/io/File; +15 -1: LinkedList.java +15 -1: iso_8859-9:1989 +50 -1: sun/reflect/generics/factory/CoreReflectionFactory +10 -1: : JVM has +19 -1: HeapByteBuffer.java +6 -1: getURL +37 -1: java/security/cert/CertificateFactory +23 -1: getAllowUserInteraction +12 -1: otherParents +25 -1: ARRAY_BOOLEAN_BASE_OFFSET +9 -1: L_UPALPHA +41 -1: ([Ljava/util/Hashtable$Entry<**>;TK;TV;)V +6 -1: LOCHOW +11 -1: access$1300 +30 -1: sun/reflect/MethodAccessorImpl +130 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/List; +9 -1: MALFORMED +38 -1: (Ljava/lang/String;I)Ljava/lang/Short; +26 -1: File format not recognised +12 -1: setTimeOfDay +19 -1: java/lang/Exception +15 -1: getOutputStream +74 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +41 -1: (Ljava/lang/String;Z)Ljava/util/TimeZone; +49 -1: Lsun/reflect/generics/repository/ClassRepository; +8 -1: getCerts +90 -1: (Ljava/lang/Class<*>;ZLjava/lang/Class<*>;)Ljava/util/List; +5 -1: clone +32 -1: ()Ljava/lang/ref/Reference$Lock; +15 -1: caseIgnoreMatch +23 -1: (Ljava/util/Set;)V +25 -1: enumerateStringProperties +9 -1: inherited +4 -1: flip +8 -1: setMonth +38 -1: (Ljava/util/function/Consumer<-TV;>;)V +55 -1: java/util/concurrent/ConcurrentHashMap$ReduceValuesTask +37 -1: getJavaSecurityProtectionDomainAccess +67 -1: (Ljava/util/NavigableSet;Ljava/lang/Class;)Ljava/util/NavigableSet; +10 -1: reduceKeys +14 -1: MAX_CODE_POINT +24 -1: getGenericExceptionTypes +8 -1: fraction +30 -1: java/lang/InterruptedException +46 -1: (Ljava/lang/String;II[BI)Ljava/nio/ByteBuffer; +114 -1: ([Ljava/util/HashMap$Node;Ljava/util/HashMap$TreeNode;)V +66 -1: (Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/InternalError; +45 -1: (Ljava/lang/Object;)Ljava/lang/StringBuilder; +8 -1: putLongB +101 -1: (Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)Lsun/nio/cs/StreamDecoder; +16 -1: standardProvider +14 -1: parameterCount +59 -1: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/List; +8 -1: putLongL +12 -1: (TT;TV;TV;)Z +37 -1: Lsun/reflect/ConstructorAccessorImpl; +11 -1: ([CII[CII)V +14 -1: parameterArray +15 -1: | interpretName +62 -1: (JLjava/util/function/Function;Ljava/util/function/Consumer;)V +30 -1: (Z)Lsun/reflect/FieldAccessor; +19 -1: jvm_special_version +22 -1: java/util/ArrayDeque$1 +12 -1: initVersions +22 -1: java/lang/CharSequence +21 -1: NF_internalMemberName +5 -1: ()TE; +97 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;IZ)Ljava/lang/invoke/MethodHandle; +25 -1: java/nio/MappedByteBuffer +6 -1: addURL +17 -1: isConvertibleFrom +14 -1: extendWithType +9 -1: interrupt +11 -1: floorDivide +16 -1: x-ISO-2022-CN-GB +12 -1: CheckedQueue +7 -1: setLong +64 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V +108 -1: (Ljava/util/NavigableMap;)Ljava/util/NavigableMap; +38 -1: java/nio/channels/spi/SelectorProvider +17 -1: makeGuardWithTest +20 -1: (Ljava/util/List;Z)V +8 -1: val$path +12 -1: Runtime.java +7 -1: channel +71 -1: ([TT;IILjava/util/function/BinaryOperator;)V +18 -1: initializedHeaders +32 -1: ()[Lsun/launcher/LauncherHelper; +13 -1: jvInitialized +10 -1: getSeconds +7 -1: Decoder +20 -1: getYearFromFixedDate +6 -1: PREFIX +21 -1: sun.boot.library.path +11 -1: FIXED_DATES +33 -1: (JLjava/util/function/Consumer;)V +27 -1: initializeJavaAssertionMaps +13 -1: toOctalString +9 -1: fixResult +10 -1: typeParams +94 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node; +4 -1: Help +11 -1: setIfNotSet +39 -1: java/lang/UnsupportedOperationException +15 -1: zip file closed +8 -1: floorDiv +10 -1: canExecute +10 -1: encodeLoop +18 -1: addRequestProperty +56 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;I)V +10 -1: superclass +5 -1: close +56 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;I)Z +6 -1: ignore +32 -1: ()Ljava/lang/ref/ReferenceQueue; +19 -1: java/util/Formatter +27 -1: java/lang/ClassLoaderHelper +23 -1: (Ljava/lang/Object;JZ)V +29 -1: java/nio/file/WatchEvent$Kind +6 -1: CENLEN +4 -1: SIZE +68 -1: (Ljava/util/Deque;)Ljava/util/Queue; +9 -1: isEscaped +12 -1: LF_INTERPRET +22 -1: (I)Ljava/lang/Integer; +60 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; +49 -1: ([Ljava/lang/Class<*>;Ljava/lang/StringBuilder;)V +11 -1: getZipEntry +16 -1: metaInfFilenames +27 -1: (Ljava/lang/StringBuffer;)V +57 -1: (Ljava/lang/Object;)Ljava/util/WeakHashMap$Entry; +76 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class<*>; +8 -1: ([CII)[B +27 -1: (Ljava/lang/StringBuffer;)Z +24 -1: getManifestFromReference +8 -1: ([CII)[C +10 -1: H_LOWALPHA +18 -1: FileURLMapper.java +12 -1: fxLaunchMode +24 -1: isMethodHandleInvokeName +17 -1: winTimeToFileTime +19 -1: checkTopLevelWindow +26 -1: MapReduceMappingsToIntTask +13 -1: NORM_PRIORITY +18 -1: lookupViaProviders +30 -1: (I)Ljava/util/LinkedList$Node; +3 -1: UTC +10 -1: UNMAPPABLE +68 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;B)V +9 -1: META-INF/ +13 -1: Iterable.java +71 -1: ([Ljava/lang/reflect/Field;Ljava/lang/String;)Ljava/lang/reflect/Field; +9 -1: setOffset +8 -1: FJObject +50 -1: (Ljava/lang/CharSequence;)Ljava/util/StringJoiner; +23 -1: java/nio/HeapByteBuffer +23 -1: sun/util/PreHashedMap$1 +23 -1: sun/util/PreHashedMap$2 +34 -1: newGetCharIllegalArgumentException +40 -1: jca JCA engine class debugging +39 -1: (Ljava/lang/Object;I)Ljava/lang/Object; +42 -1: (Ljava/lang/String;)Ljava/net/InetAddress; +25 -1: (Ljava/net/FileNameMap;)V +44 -1: (Ljava/util/SortedMap;)Ljava/util/SortedMap; +52 -1: (Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long; +27 -1: ()[Ljava/util/HashMap$Node; +29 -1: java/util/EmptyStackException +16 -1: not a field type +14 -1: Ljava/io/File; +28 -1: ()[Ljava/security/Principal; +69 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V +5 -1: ()TK; +10 -1: ISO8859-13 +40 -1: java/lang/invoke/DirectMethodHandle$Lazy +30 -1: The object is not initialized. +10 -1: ISO8859-15 +88 -1: (Ljava/util/List;Ljava/lang/Class;)Ljava/util/List; +25 -1: (ZILjava/lang/String;II)Z +9 -1: stackSize +61 -1: (Ljava/util/Comparator;Ljava/lang/Object;Ljava/lang/Object;)I +16 -1: synchronizedList +90 -1: (Ljava/util/Comparator;Ljava/util/function/Function;Ljava/lang/Object;Ljava/lang/Object;)I +9 -1: nullCheck +174 -1: Ljava/util/concurrent/ConcurrentMap;Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry;>; +14 -1: java/lang/Enum +3 -1: int +13 -1: detailMessage +56 -1: java/util/concurrent/ConcurrentHashMap$SearchEntriesTask +10 -1: ISO-8859-1 +10 -1: ISO-8859-2 +10 -1: ISO-8859-3 +10 -1: ISO-8859-4 +10 -1: ISO-8859-5 +10 -1: ISO-8859-6 +24 -1: ([Ljava/lang/Object;II)V +10 -1: ISO-8859-7 +10 -1: ISO-8859-8 +139 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)[Ljava/util/concurrent/ConcurrentHashMap$Node; +10 -1: ISO-8859-9 +5 -1: round +25 -1: DIRECTIONALITY_WHITESPACE +13 -1: NamedFunction +10 -1: startAgent +3 -1: ioe +7 -1: closing +24 -1: appendSchemeSpecificPart +56 -1: sun/reflect/ReflectionFactory$GetReflectionFactoryAction +83 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; +17 -1: isCharsetDetected +11 -1: getJarFiles +22 -1: getEnclosingMethodInfo +11 -1: setReadable +61 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)V +10 -1: attachment +34 -1: (Ljava/io/File;)Ljava/lang/String; +18 -1: ZipFileInputStream +15 -1: CodeSource.java +61 -1: (Ljava/util/jar/JarFile;)Ljava/util/List; +7 -1: cp00858 +108 -1: ([Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/invoke/LambdaForm$Name;II)Ljava/lang/invoke/LambdaForm$Name; +38 -1: ([DII)Ljava/util/Spliterator$OfDouble; +8 -1: val$name +11 -1: LF_REINVOKE +12 -1: validateTime +17 -1: copyFromCharArray +32 -1: throwSetIllegalArgumentException +14 -1: fieldModifiers +52 -1: (Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; +58 -1: (Ljava/io/OutputStream;Ljava/nio/charset/CharsetEncoder;)V +14 -1: generalInvoker +11 -1: interrupted +246 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToLongTask;Ljava/util/function/ToLongBiFunction;JLjava/util/function/LongBinaryOperator;)V +20 -1: java/util/Dictionary +17 -1: getDoubleVolatile +41 -1: (Ljava/lang/Class<*>;Ljava/lang/Object;)Z +8 -1: intValue +24 -1: (F)Ljava/nio/ByteBuffer; +5 -1: reset +54 -1: (ILjava/util/List;)[Ljava/lang/invoke/LambdaForm$Name; +19 -1: [Ljava/util/Locale; +43 -1: (Ljava/lang/String;II)Ljava/nio/ByteBuffer; +38 -1: ()Ljava/io/ObjectInputStream$GetField; +18 -1: [Locked by thread +10 -1: checkedMap +16 -1: checkedSortedMap +14 -1: illegal symbol +16 -1: TITLECASE_LETTER +4 -1: root +22 -1: (ZLjava/lang/String;)V +27 -1: ([JII)Ljava/nio/LongBuffer; +15 -1: printStackTrace +30 -1: newConstructorForSerialization +14 -1: getPermissions +13 -1: toStringCache +15 -1: equalParamTypes +37 -1: throwFinalFieldIllegalAccessException +35 -1: (Ljava/lang/String;Ljava/io/File;)V +34 -1: java/nio/charset/CoderResult$Cache +3 -1: .\n\n +33 -1: Ljava/nio/charset/CharsetEncoder; +11 -1: lambdaForms +65 -1: (Ljava/lang/Class;)TT; +39 -1: (CLjava/lang/Class;Ljava/lang/Object;)Z +3 -1: ise +14 -1: forLanguageTag +45 -1: ([Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Z +36 -1: RuntimeInvisibleParameterAnnotations +12 -1: binarySearch +24 -1: getAssociatedAnnotations +10 -1: decoderFor +6 -1: ibm813 +10 -1: logicalXor +10 -1: setVarargs +71 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Void;)V +4 -1: cast +6 -1: ibm819 +23 -1: getParentDelegationTime +8 -1: ([FII)[F +4 -1: .tmp +6 -1: (JII)J +27 -1: ()Ljava/lang/ref/Finalizer; +9 -1: sunec.jar +22 -1: java/net/URLConnection +41 -1: (Ljava/lang/Runnable;Ljava/lang/String;)V +20 -1: SecurityManager.java +18 -1: getZipFileOpenTime +7 -1: country +13 -1: inflaterCache +4 -1: +17 -1: java/lang/Runtime +125 -1: (Lsun/management/GcInfoBuilder;JJJ[Ljava/lang/management/MemoryUsage;[Ljava/lang/management/MemoryUsage;[Ljava/lang/Object;)V +24 -1: java/util/ResourceBundle +64 -1: Ljava/util/Hashtable; +79 -1: ([Ljava/util/WeakHashMap$Entry;[Ljava/util/WeakHashMap$Entry;)V +8 -1: x-ibm737 +39 -1: (Ljava/security/AccessControlContext;)Z +21 -1: (Ljava/lang/Class;I)V +4 -1: - +15 -1: calculateFields +22 -1: Ljava/util/Properties; +8 -1: getArray +21 -1: (Ljava/lang/Class;I)Z +41 -1: (Ljava/lang/ThreadGroup;)Ljava/lang/Void; +17 -1: Ljava/io/Console; +115 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; +12 -1: nextThreadID +81 -1: (Ljava/net/URLClassLoader;Ljava/lang/SecurityManager;Ljava/security/Permission;)V +23 -1: ARRAY_SHORT_BASE_OFFSET +10 -1: interpret_ +144 -1: (Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +20 -1: isIPv6LiteralAddress +13 -1: launcher_name +36 -1: java/util/function/IntToLongFunction +38 -1: java/util/WeakHashMap$EntrySpliterator +8 -1: copyInto +3 -1: ACT +11 -1: metafactory +31 -1: ([BLjava/nio/charset/Charset;)V +30 -1: java/lang/annotation/Retention +13 -1: getYearLength +42 -1: java/util/AbstractMap$SimpleImmutableEntry +31 -1: ()Ljava/lang/invoke/MemberName; +21 -1: sun/misc/JavaIOAccess +16 -1: jdk_build_number +8 -1: ST_RESET +96 -1: (BLjava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; +13 -1: getTypeString +15 -1: maxCharsPerByte +8 -1: checkKey +49 -1: (Ljava/nio/charset/Charset;Lsun/nio/cs/UTF_8$1;)V +80 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; +32 -1: Ljava/security/ProtectionDomain; +5 -1: ()TT; +6 -1: insert +10 -1: intersects +38 -1: ([Ljava/lang/Class;Ljava/lang/Class;)V +15 -1: java/lang/Class +12 -1: getPublicKey +37 -1: (ID)Ljava/lang/AbstractStringBuilder; +6 -1: ibm850 +6 -1: locsig +6 -1: ibm852 +19 -1: changeReferenceKind +3 -1: AET +42 -1: (Ljava/util/Collection;Ljava/lang/Class;)V +6 -1: ibm855 +16 -1: getPolicyNoCheck +39 -1: ([B)[[Ljava/lang/annotation/Annotation; +6 -1: ibm857 +10 -1: Error.java +38 -1: ()Ljava/util/List; +14 -1: createInstance +5 -1: cp437 +28 -1: Lsun/util/locale/BaseLocale; +17 -1: getStandardOffset +29 -1: sun/nio/cs/StandardCharsets$1 +36 -1: Ljava/security/ProtectionDomain$Key; +14 -1: ArrayList.java +78 -1: (Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; +38 -1: java/lang/invoke/MethodHandleImpl$Lazy +42 -1: (Ljava/util/LinkedHashMap$Entry;)V +8 -1: getLongB +7 -1: vmentry +21 -1: lookupExtendedCharset +32 -1: ([TT;)[TT; +53 -1: Ljava/util/concurrent/ConcurrentHashMap$EntrySetView; +6 -1: ibm862 +8 -1: getLongL +32 -1: (Ljava/lang/invoke/MemberName;)J +67 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; +6 -1: region +6 -1: ibm866 +89 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;I)Lsun/reflect/ConstructorAccessor; +22 -1: java/util/ListIterator +9 -1: wednesday +16 -1: unsuspendThreads +20 -1: Not a Proxy instance +45 -1: Ljava/lang/reflect/InvocationTargetException; +61 -1: (Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder; +5 -1: ()TV; +32 -1: (Ljava/lang/invoke/MemberName;)V +82 -1: (Ljava/util/jar/JarFile;Ljava/util/jar/JarEntry;)[Ljava/security/cert/Certificate; +34 -1: java/lang/ClassValue$ClassValueMap +32 -1: (Ljava/lang/invoke/MemberName;)Z +15 -1: SPACE_SEPARATOR +17 -1: caseIgnoreCompare +58 -1: (Ljava/lang/Class;)Ljava/lang/invoke/MethodHandles$Lookup; +4 -1: Code +3 -1: AGT +54 -1: (Ljava/lang/StringBuilder;II)Ljava/lang/StringBuilder; +6 -1: ibm874 +15 -1: newMemberBuffer +42 -1: (Ljava/nio/file/Path;)Ljava/nio/file/Path; +33 -1: Ljava/lang/NumberFormatException; +10 -1: Field.java +67 -1: (JLjava/util/function/Function<-TK;+TU;>;)TU; +4 -1: rows +12 -1: MIN_PRIORITY +25 -1: URI has a query component +41 -1: provider security provider debugging +29 -1: sun/nio/cs/ISO_8859_1$Encoder +26 -1: (Ljava/util/zip/ZipFile;)I +26 -1: (Ljava/util/zip/ZipFile;)J +20 -1: Bad digit at end of +29 -1: Ljava/lang/RuntimePermission; +12 -1: initResolved +9 -1: loadFence +13 -1: fieldAccessor +26 -1: (Ljava/util/zip/ZipFile;)V +36 -1: java/lang/CloneNotSupportedException +19 -1: getBasicConstraints +16 -1: putOrderedObject +26 -1: (Ljava/util/zip/ZipFile;)Z +6 -1: target +50 -1: (Ljava/util/concurrent/CountedCompleter;[I[IIIII)V +16 -1: changeReturnType +13 -1: CAUSE_CAPTION +14 -1: checkExactType +50 -1: sun/util/locale/provider/LocaleServiceProviderPool +47 -1: java/lang/invoke/DirectMethodHandle$Constructor +20 -1: CallerSensitive.java +30 -1: java/security/ProtectionDomain +26 -1: java.launcher.opt.vmselect +4 -1: \tat +42 -1: java/util/ArraysParallelSortHelpers$FJLong +39 -1: (Ljava/lang/String;)[Ljava/lang/String; +19 -1: sun.net.www.content +34 -1: ([III)Ljava/util/stream/IntStream; +20 -1: (Ljava/util/Deque;)V +35 -1: (Ljava/lang/reflect/Constructor;)[B +16 -1: WeakHashMap.java +8 -1: ([III)[I +46 -1: (Ljava/util/Properties;Ljava/io/InputStream;)V +54 -1: (I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +65 -1: (ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/util/HashMap$Node; +27 -1: URI path component is empty +3 -1: -1- +32 -1: Ljava/io/InterruptedIOException; +9 -1: setLocale +7 -1: [^, ;]* +6 -1: format +61 -1: (Ljava/util/function/Supplier;IZ)Ljava/util/stream/IntStream; +20 -1: getRequestProperties +16 -1: reallocateMemory +28 -1: java/lang/IllegalAccessError +5 -1: query +83 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;II)Ljava/lang/invoke/MethodHandle; +7 -1: threadQ +6 -1: STATIC +7 -1: enqueue +21 -1: uninitializedCallSite +3 -1: -2- +26 -1: ()Ljava/util/NavigableSet; +27 -1: getUncaughtExceptionHandler +42 -1: ([Ljava/net/URL;)Ljava/net/URLClassLoader; +30 -1: java/lang/UnsatisfiedLinkError +39 -1: java/util/Collections$ReverseComparator +7 -1: resolve +4 -1: poll +7 -1: (TE;I)V +21 -1: : Unknown launch mode +53 -1: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; +36 -1: sun.classloader.parentDelegationTime +25 -1: java/net/URLStreamHandler +39 -1: (Ljava/lang/Object;J)Ljava/lang/Object; +53 -1: Ljava/util/Map; +51 -1: java/util/ArraysParallelSortHelpers$FJDouble$Sorter +26 -1: getAnnotatedParameterTypes +18 -1: codePointCountImpl +7 -1: threads +12 -1: offsetBefore +29 -1: ()Ljava/util/Collection; +58 -1: (Lsun/invoke/util/Wrapper;)Ljava/lang/invoke/MethodHandle; +17 -1: DMH.invokeSpecial +3 -1: -3- +16 -1: decodeBufferLoop +43 -1: java/util/concurrent/atomic/AtomicReference +16 -1: reduceKeysToLong +27 -1: newIllegalArgumentException +3 -1: ALL +5 -1: cache +5 -1: queue +4 -1: 8bit +3 -1: -4- +35 -1: Ljava/util/Set; +9 -1: MIN_RADIX +26 -1: ZipFileInflaterInputStream +13 -1: MANIFEST_NAME +18 -1: java/util/TimeZone +175 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;Ljava/lang/invoke/MemberName;Ljava/lang/Class;Ljava/lang/invoke/DirectMethodHandle$1;)V +16 -1: getContentLength +11 -1: setDoOutput +22 -1: (Ljava/io/Closeable;)V +13 -1: TimeZone.java +28 -1: sun/misc/ExtensionDependency +6 -1: bindTo +3 -1: -5- +40 -1: ()[Ljava/util/WeakHashMap$Entry; +20 -1: ()Lsun/misc/Cleaner; +9 -1: compareTo +68 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToDoubleTask +11 -1: checkedList +14 -1: (ITK;TV;ZZ)TV; +5 -1: greek +3 -1: jar +21 -1: (Ljava/lang/String;)B +21 -1: (Ljava/lang/String;)C +21 -1: (Ljava/lang/String;)D +5 -1: (JS)V +21 -1: (Ljava/lang/String;)F +13 -1: LETTER_NUMBER +14 -1: isAlphaNumeric +21 -1: (Ljava/lang/String;)I +73 -1: (Ljava/nio/charset/Charset;Ljava/lang/String;Ljava/lang/StringCoding$1;)V +21 -1: (Ljava/lang/String;)J +25 -1: makeExactOrGeneralInvoker +3 -1: -6- +25 -1: java/nio/StringCharBuffer +21 -1: Ljava/util/Hashtable; +8 -1: ENQUEUED +8 -1: finalize +22 -1: DirectLongBufferU.java +21 -1: (Ljava/lang/String;)S +10 -1: localhost: +33 -1: isKnownNotToHaveSpecialAttributes +21 -1: (Ljava/lang/String;)V +45 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;Z)V +21 -1: (Ljava/lang/String;)Z +22 -1: (Ljava/util/Vector;I)V +44 -1: java/nio/charset/UnsupportedCharsetException +23 -1: java/lang/CharacterName +7 -1: checkIO +33 -1: (I)Lsun/misc/URLClassPath$Loader; +90 -1: (Ljava/lang/Class<*>;Ljava/lang/reflect/Constructor<*>;)Ljava/lang/reflect/Constructor<*>; +18 -1: getHeaderFieldDate +9 -1: MIN_VALUE +95 -1: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Ljava/util/Collection; +44 -1: (Ljava/lang/String;Z)Ljava/util/Enumeration; +8 -1: NOVEMBER +4 -1: gcal +17 -1: getConnectTimeout +124 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; +24 -1: INDEXOFSUBLIST_THRESHOLD +16 -1: isJulianLeapYear +21 -1: reduceEntriesToDouble +15 -1: getPrefixLength +17 -1: is not param at +14 -1: inDaylightTime +39 -1: (Ljava/lang/Class;[I)Ljava/lang/Object; +5 -1: force +98 -1: (Ljava/lang/Class;Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z +40 -1: (Lsun/reflect/ConstructorAccessorImpl;)V +27 -1: RuntimeInvisibleAnnotations +17 -1: checkTargetChange +9 -1: skipBytes +4 -1: port +25 -1: sun/nio/cs/UTF_16$Encoder +28 -1: MIN_SUPPLEMENTARY_CODE_POINT +4 -1: node +11 -1: not param: +9 -1: debugInit +6 -1: setURL +14 -1: getMonthLength +23 -1: ()Ljava/nio/ByteBuffer; +17 -1: CALENDAR_JAPANESE +11 -1: access$1400 +16 -1: ()Ljava/net/URI; +29 -1: (IZ)Ljava/lang/StringBuilder; +15 -1: Native Library +30 -1: Invalid lambda deserialization +14 -1: throwException +18 -1: nothing to verify! +23 -1: (Ljava/lang/Object;JF)V +3 -1: ART +16 -1: isExtClassLoader +18 -1: Illegal Capacity: +26 -1: java/util/zip/ZipException +4 -1: /../ +34 -1: ([II)Ljava/util/Spliterator$OfInt; +26 -1: (I)Ljava/util/Enumeration; +60 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType; +43 -1: not a field or nested class, no simple type +12 -1: nextPutIndex +15 -1: getConstructor0 +3 -1: AST +11 -1: fromURIPath +49 -1: (Ljava/util/Collections$UnmodifiableCollection;)V +8 -1: makeImpl +51 -1: (Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$1;)V +32 -1: (Ljava/util/function/Supplier;)V +20 -1: namedFunctionInvoker +37 -1: newGetBooleanIllegalArgumentException +19 -1: (Ljava/io/File;ZI)V +8 -1: NULL_KEY +36 -1: Ljava/lang/reflect/Constructor; +21 -1: (Ljava/lang/Object;)B +21 -1: (Ljava/lang/Object;)C +21 -1: (Ljava/lang/Object;)D +21 -1: (Ljava/lang/Object;)F +30 -1: ()Lsun/util/locale/BaseLocale; +21 -1: (Ljava/lang/Object;)I +21 -1: (Ljava/lang/Object;)J +10 -1: lineNumber +95 -1: (JLjava/util/function/ToDoubleBiFunction<-TK;-TV;>;DLjava/util/function/DoubleBinaryOperator;)D +16 -1: CoderResult.java +44 -1: (Ljava/util/NavigableSet;Ljava/lang/Class;)V +21 -1: (Ljava/lang/Object;)S +13 -1: getNameString +129 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;Ljava/lang/invoke/DirectMethodHandle$1;)V +21 -1: (Ljava/lang/Object;)V +21 -1: (Ljava/lang/Object;)Z +81 -1: Ljava/util/HashMap;>; +49 -1: java/util/concurrent/locks/ReentrantLock$FairSync +11 -1: csisolatin0 +11 -1: csisolatin1 +7 -1: isSpace +10 -1: getDefault +11 -1: csisolatin2 +16 -1: ()Ljava/net/URL; +11 -1: csisolatin4 +14 -1: invokeExact_MT +11 -1: csisolatin5 +28 -1: (Ljava/io/FileInputStream;)V +11 -1: csisolatin9 +8 -1: isLetter +15 -1: getConstructors +21 -1: mainAppContextDefault +29 -1: ()[Ljava/lang/reflect/Method; +23 -1: Ljava/util/WeakHashMap; +12 -1: LF_INVSTATIC +17 -1: DirectBuffer.java +10 -1: newEncoder +10 -1: getVersion +32 -1: java/lang/IllegalAccessException +20 -1: java/util/Collection +61 -1: (Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/Object;)V +19 -1: $deserializeLambda$ +8 -1: removeIf +25 -1: sun/reflect/FieldAccessor +129 -1: ;>(Ljava/util/function/Function<-TT;+TU;>;Ljava/util/Comparator<-TU;>;)Ljava/util/Comparator; +17 -1: parseAbsoluteSpec +37 -1: ([Ljava/util/HashMap$Node;I)V +17 -1: java/util/HashSet +13 -1: spreadInvoker +20 -1: suppressAccessChecks +32 -1: Ljava/lang/InterruptedException; +11 -1: oldMappings +9 -1: lookupTag +16 -1: java/lang/System +5 -1: LFI: +6 -1: IBM737 +9 -1: SHORT_IDS +45 -1: ([IIILjava/util/function/IntBinaryOperator;)V +20 -1: getMetaInfEntryNames +10 -1: isReadOnly +50 -1: ()Ljava/util/SortedSet; +12 -1: java.vm.name +30 -1: java/lang/Class$AnnotationData +61 -1: (ILjava/lang/invoke/LambdaForm;)Ljava/lang/invoke/LambdaForm; +7 -1: address +44 -1: (Ljava/util/function/BiConsumer<-TK;-TV;>;)V +58 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)V +112 -1: (Ljava/lang/Object;TV;Ljava/lang/ref/ReferenceQueue;ILjava/util/WeakHashMap$Entry;)V +14 -1: aliases_KOI8_R +3 -1: AWT +14 -1: aliases_KOI8_U +24 -1: ARRAY_DOUBLE_BASE_OFFSET +23 -1: Ljava/util/jar/JarFile; +91 -1: (Ljava/lang/Class;[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B)V +14 -1: mappingAddress +19 -1: [Ljava/lang/Object; +17 -1: sun/misc/JarIndex +9 -1: image/jpg +49 -1: (Ljava/lang/String;I)Lsun/util/calendar/ZoneInfo; +37 -1: java/lang/invoke/DirectMethodHandle$1 +34 -1: java/util/Collections$SingletonMap +89 -1: (JLjava/util/function/ToIntBiFunction<-TK;-TV;>;ILjava/util/function/IntBinaryOperator;)I +46 -1: (Ljava/util/Comparator;)Ljava/util/Comparator; +11 -1: isTitleCase +38 -1: java/lang/IllegalMonitorStateException +33 -1: java/nio/BufferUnderflowException +28 -1: java/lang/ClassValue$Version +11 -1: printLocale +13 -1: STORE_BARRIER +42 -1: ([ILjava/util/function/IntUnaryOperator;)V +26 -1: sun/util/locale/BaseLocale +29 -1: java/io/ObjectStreamException +41 -1: sun/reflect/UnsafeStaticFieldAccessorImpl +60 -1: ([Ljava/lang/Object;Ljava/util/Iterator;)[Ljava/lang/Object; +30 -1: (Ljava/nio/charset/Charset;)[B +73 -1: ([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process; +3 -1: VST +80 -1: Java(TM) SE Runtime Environment (build 1.8.0-internal-iklam_2013_11_27_21_25-b00 +85 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/net/URLStreamHandler;)V +20 -1: getStackTraceElement +36 -1: java/util/LinkedHashMap$LinkedKeySet +17 -1: getNormalizedYear +15 -1: maxBytesPerChar +16 -1: java/util/Random +34 -1: (I[C)Ljava/lang/invoke/LambdaForm; +11 -1: nbits < 0: +7 -1: H_PCHAR +29 -1: (Ljava/nio/charset/Charset;)I +36 -1: (I[I[C)Ljava/lang/invoke/LambdaForm; +23 -1: java/lang/ClassLoader$1 +23 -1: java/lang/ClassLoader$2 +23 -1: java/lang/ClassLoader$3 +9 -1: sizeTable +36 -1: (Z)Ljava/lang/AbstractStringBuilder; +29 -1: (Ljava/nio/charset/Charset;)V +25 -1: ARRAY_BOOLEAN_INDEX_SCALE +29 -1: (Ljava/nio/charset/Charset;)Z +6 -1: keySet +20 -1: declaredConstructors +25 -1: oracle/jrockit/jfr/Timing +12 -1: sizeIsSticky +6 -1: IBM775 +17 -1: currentTimeMillis +28 -1: java/nio/DirectDoubleBufferS +71 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/invoke/MethodType;B)V +28 -1: java/nio/DirectDoubleBufferU +19 -1: cachedFixedDateJan1 +15 -1: getClassContext +65 -1: (Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V +16 -1: unmodifiableList +10 -1: getDoubleB +82 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/String; +11 -1: getEntryCrc +10 -1: getDoubleL +20 -1: (C)Ljava/lang/Class; +11 -1: Null action +22 -1: java/io/BufferedWriter +67 -1: (Ljava/lang/String;[Ljava/lang/Class<*>;)Ljava/lang/reflect/Method; +22 -1: parseSelectAnnotations +6 -1: rename +20 -1: acquireFieldAccessor +43 -1: (Ljava/util/Vector;[Ljava/lang/Object;III)V +32 -1: Ljava/lang/NullPointerException; +29 -1: (Ljava/lang/ThreadLocal<*>;)V +18 -1: descendingIterator +37 -1: java/util/Collections$SynchronizedSet +24 -1: mark/reset not supported +12 -1: ) > toIndex( +13 -1: <> +10 -1: fastRemove +4 -1: load +31 -1: sun/reflect/ReflectionFactory$1 +39 -1: (Ljava/util/List<*>;)Ljava/lang/Object; +39 -1: Ljava/util/Map; +9 -1: offerLast +31 -1: ()Ljava/lang/invoke/MethodType; +40 -1: Ljava/lang/Object; +17 -1: getObjectVolatile +14 -1: suspendThreads +55 -1: (Ljava/lang/String;ZLjava/util/Set;)Lsun/misc/Resource; +75 -1: (Ljava/util/List<+Ljava/lang/Comparable<-TT;>;>;TT;)I +6 -1: Lookup +20 -1: java/io/OutputStream +41 -1: Could not create application class loader +28 -1: Lsun/misc/JavaUtilJarAccess; +46 -1: java/util/Collections$SynchronizedNavigableSet +8 -1: override +21 -1: threadLocalRandomSeed +10 -1: TEXT_PLAIN +22 -1: ([B)Ljava/lang/String; +29 -1: java/nio/InvalidMarkException +14 -1: Throwable.java +27 -1: newWrongMethodTypeException +6 -1: ptypes +8 -1: bugLevel +62 -1: (ILjava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder; +37 -1: ()Ljava/util/Locale$LocaleNameGetter; +14 -1: getEntryMethod +7 -1: getByte +12 -1: UTF-32BE-BOM +4 -1: lock +34 -1: java/security/AccessControlContext +79 -1: (Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MemberName; +5 -1: DEBUG +5 -1: unbox +17 -1: CLASSPATH_OPTOSFT +4 -1: cbrt +21 -1: LocalizedObjectGetter +21 -1: ProtectionDomain.java +22 -1: ([J)Ljava/util/BitSet; +17 -1: getUnresolvedName +34 -1: (Ljava/util/Map;Ljava/util/Map;I)V +7 -1: cskoi8r +14 -1: getInterfaces0 +48 -1: (Lsun/net/www/MessageHeader;)[Ljava/lang/String; +14 -1: getFileNameMap +16 -1: preserveCombiner +19 -1: getDefaultUseCaches +57 -1: (Ljava/lang/Class;[B[Ljava/lang/Object;)Ljava/lang/Class; +21 -1: (D)Ljava/lang/Double; +15 -1: iso8859_15_fdis +23 -1: java/util/regex/Pattern +6 -1: ibm912 +14 -1: findBuiltinLib +42 -1: java/lang/annotation/AnnotationFormatError +6 -1: ibm914 +6 -1: ibm915 +44 -1: java/nio/charset/IllegalCharsetNameException +22 -1: COMBINING_SPACING_MARK +20 -1: ()Ljava/lang/Thread; +8 -1: readLine +12 -1: (unresolved +65 -1: (Ljava/lang/String;Z)Ljava/util/Enumeration; +41 -1: ([Ljava/lang/String;[Ljava/lang/String;)V +30 -1: java/lang/Class$ReflectionData +8 -1: requests +52 -1: (Ljava/nio/charset/Charset;Lsun/nio/cs/US_ASCII$1;)V +12 -1: ACCESS_WRITE +6 -1: ibm920 +12 -1: CR_ERROR_MIN +6 -1: jarMap +6 -1: ibm923 +15 -1: java/lang/Error +11 -1: VM_SETTINGS +18 -1: name can't be null +7 -1: PRESENT +19 -1: setSecurityManager0 +101 -1: (Ljava/nio/channels/WritableByteChannel;Ljava/nio/charset/CharsetEncoder;I)Lsun/nio/cs/StreamEncoder; +25 -1: ()Ljava/util/jar/JarFile; +26 -1: java/io/ObjectOutputStream +13 -1: no !/ in spec +5 -1: (II)C +12 -1: setPriority0 +30 -1: (Z)[Ljava/lang/reflect/Method; +28 -1: sun/nio/cs/ThreadLocalCoders +5 -1: (II)I +22 -1: java/io/BufferedReader +26 -1: ()Lsun/misc/JavaNetAccess; +10 -1: Asia/Dhaka +14 -1: parallelStream +5 -1: (II)V +5 -1: (II)Z +31 -1: Ljava/lang/reflect/Constructor; +21 -1: ()Ljava/time/Instant; +31 -1: (Ljava/lang/String;III[J[I[IZ)V +8 -1: Volatile +23 -1: isUnicodeIdentifierPart +27 -1: longPrimitiveParameterCount +16 -1: Map is non-empty +24 -1: getLocalizedOutputStream +14 -1: java/lang/Byte +10 -1: staticBase +11 -1: lastElement +17 -1: replaceStaleEntry +17 -1: MAX_LOW_SURROGATE +28 -1: java.launcher.X.macosx.usage +20 -1: registerShutdownHook +16 -1: SECOND_IN_MILLIS +8 -1: Embedded +16 -1: BootstrapMethods +14 -1: numInvocations +79 -1: (Ljava/util/Collection;)Ljava/util/Enumeration; +10 -1: rotateLeft +46 -1: ([Ljava/lang/Object;)Ljava/util/stream/Stream; +6 -1: verify +17 -1: OTHER_PUNCTUATION +26 -1: acquireConstructorAccessor +38 -1: (Ljava/lang/String;I)Ljava/lang/Class; +30 -1: java/net/UnknownContentHandler +20 -1: PREFIX_LENGTH_OFFSET +12 -1: nextGetIndex +14 -1: standardOffset +10 -1: entryNames +15 -1: application/xml +3 -1: BET +39 -1: ([DIII)Ljava/util/Spliterator$OfDouble; +83 -1: (JLjava/util/function/BiFunction;Ljava/util/function/BiFunction;)Ljava/lang/Object; +10 -1: initMethod +47 -1: (Ljava/util/LinkedList$Node;)Ljava/lang/Object; +8 -1: isSealed +12 -1: isAccessible +11 -1: audio/x-wav +46 -1: (Ljava/lang/String;)Ljava/util/jar/Attributes; +24 -1: ()Ljava/io/OutputStream; +15 -1: FIELD_MODIFIERS +30 -1: sun/misc/URLClassPath$Loader$1 +20 -1: recursive invocation +34 -1: (Ljava/lang/String;)Ljava/net/URL; +12 -1: linkNodeLast +34 -1: call site initialization exception +17 -1: casAnnotationType +8 -1: x-ibm874 +7 -1: isUpper +58 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesTask +31 -1: Ill-formed Unicode locale key: +12 -1: defineClass0 +12 -1: defineClass1 +12 -1: defineClass2 +59 -1: Can not call newInstance() on the Class for java.lang.Class +10 -1: codePoints +3 -1: ... +14 -1: readAheadLimit +14 -1: parallelSetAll +41 -1: ([Ljava/lang/Object;I)[Ljava/lang/Object; +148 -1: (Ljava/lang/Throwable$PrintStreamOrWriter;[Ljava/lang/StackTraceElement;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V +10 -1: Deque.java +21 -1: Must be volatile type +7 -1: setForm +58 -1: Ljava/lang/Number;Ljava/lang/Comparable; +47 -1: (Ljava/lang/String;Ljava/security/CodeSource;)V +30 -1: java/io/InterruptedIOException +44 -1: java/util/Collections$SynchronizedCollection +16 -1: Invalid Jar file +32 -1: sun/util/calendar/CalendarSystem +67 -1: (JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate; +19 -1: DEFAULT_BUFFER_SIZE +16 -1: readObjectNoData +16 -1: setJavaNioAccess +73 -1: (Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/Object;)Ljava/lang/Object; +14 -1: copyToIntArray +10 -1: hasWaiters +20 -1: (I)Ljava/lang/Class; +35 -1: all turn on all debugging +14 -1: Invalid host: +26 -1: Lsun/nio/cs/StreamEncoder; +43 -1: sun/misc/JavaSecurityProtectionDomainAccess +11 -1: getNamedCon +8 -1: H_SERVER +27 -1: java/util/function/Consumer +12 -1: isLocalClass +81 -1: (Ljava/util/LinkedHashMap$Entry;Ljava/util/LinkedHashMap$Entry;)V +83 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable; +4 -1: exec +43 -1: java/lang/reflect/InvocationTargetException +35 -1: (Ljava/io/File;Ljava/lang/String;)V +9 -1: modifiers +35 -1: (Ljava/io/File;Ljava/lang/String;)Z +9 -1: Byte.java +12 -1: unknown mode +18 -1: initializeVerifier +24 -1: (Ljava/nio/ByteBuffer;)I +22 -1: ([Ljava/lang/Object;)I +11 -1: correctType +6 -1: escape +52 -1: (Ljava/security/ProtectionDomain;)Ljava/lang/String; +11 -1: annotations +121 -1: (Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; +22 -1: using an instance of +14 -1: getSpeciesData +28 -1: ()Ljava/security/CodeSource; +12 -1: JZENTRY_NAME +24 -1: (Ljava/nio/ByteBuffer;)V +4 -1: ZBSC +22 -1: ([Ljava/lang/Object;)V +7 -1: isParam +165 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +70 -1: (ILjava/util/List;>;)Ljava/lang/invoke/LambdaForm; +24 -1: Ljava/io/FilePermission; +22 -1: ([Ljava/lang/Object;)Z +11 -1: mergeHeader +11 -1: applyAsLong +28 -1: (IJ)Ljava/lang/StringBuffer; +10 -1: arityCheck +52 -1: (ILjava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +13 -1: toUpperCaseEx +9 -1: nextIndex +11 -1: start > end +4 -1: long +6 -1: Static +27 -1: ()Ljava/lang/reflect/Field; +10 -1: bufUpdater +43 -1: averageBytesPerChar exceeds maxBytesPerChar +105 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/BaseLocale$1;)V +23 -1: ARRAY_SHORT_INDEX_SCALE +15 -1: getHeaderFields +36 -1: java/util/HashMap$HashMapSpliterator +10 -1: Guard.java +29 -1: java/util/RandomAccessSubList +6 -1: addAll +7 -1: getTime +16 -1: invokeHandleForm +32 -1: sun/util/locale/LocaleExtensions +16 -1: checkAndLoadMain +19 -1: INTERFACE_MODIFIERS +11 -1: resolveName +20 -1: getContentLengthLong +53 -1: (ICLjava/lang/Object;)Ljava/lang/invoke/MethodHandle; +19 -1: name cannot be null +23 -1: hasReceiverTypeDispatch +12 -1: getExtension +49 -1: Ljava/util/Set; +114 -1: (Ljava/lang/String;[J[I[J[I[Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule;)Lsun/util/calendar/ZoneInfo; +24 -1: NativeSignalHandler.java +58 -1: (Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap; +10 -1: interface +68 -1: (Ljava/lang/String;)Ljava/lang/invoke/BoundMethodHandle$SpeciesData; +15 -1: addShutdownHook +32 -1: java/security/AccessController$1 +10 -1: filterTags +19 -1: [Ljava/lang/Number; +92 -1: (Ljava/util/function/ToLongFunction<-TT;>;)Ljava/util/Comparator; +43 -1: java/util/LinkedHashMap$LinkedEntryIterator +5 -1: utf-8 +11 -1: iso-8859-13 +11 -1: iso-8859-15 +58 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/util/jar/JarFile; +41 -1: CertPathValidator debugging +22 -1: ARRAY_LONG_BASE_OFFSET +57 -1: (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; +13 -1: queuePrintJob +14 -1: Watchable.java +15 -1: jdkMajorVersion +62 -1: (Ljava/lang/String;ZJJ)Ljava/lang/management/MemoryPoolMXBean; +23 -1: twoToTheDoubleScaleDown +22 -1: registerVMNotification +30 -1: ()Lsun/misc/JavaUtilJarAccess; +17 -1: getTargetVolatile +4 -1: exit +13 -1: StringDecoder +12 -1: hasRemaining +9 -1: bigEndian +14 -1: checkMulticast +13 -1: clearProperty +18 -1: ForEachMappingTask +15 -1: Collection.java +55 -1: (Ljava/io/InputStream;)Ljava/security/cert/Certificate; +5 -1: UTF-8 +11 -1: transitions +7 -1: wrapAlt +27 -1: ClassNotFoundException.java +20 -1: UnresolvedPermission +14 -1: charsetForName +9 -1: getParent +18 -1: [Ljava/lang/Short; +24 -1: UnmodifiableNavigableMap +5 -1: xflow +10 -1: interfaces +19 -1: doubleToRawLongBits +73 -1: (Ljava/lang/reflect/Constructor<*>;[Ljava/lang/Object;)Ljava/lang/Object; +10 -1: getInCheck +21 -1: (Ljava/lang/Thread;)V +15 -1: fromIndex < 0: +63 -1: (ITK;TV;Ljava/util/concurrent/ConcurrentHashMap$Node;)V +9 -1: pollFirst +21 -1: (Ljava/lang/Thread;)Z +16 -1: checkProxyMethod +39 -1: generateLambdaFormInterpreterEntryPoint +15 -1: findLoadedClass +6 -1: system +5 -1: ITALY +45 -1: combiner SubjectDomainCombiner debugging +34 -1: NativeConstructorAccessorImpl.java +22 -1: ([C)Ljava/lang/String; +39 -1: (Ljava/lang/String;Ljava/lang/Class;Z)V +18 -1: java/lang/Thread$1 +20 -1: window can't be null +10 -1: Debug.java +17 -1: singletonIterator +53 -1: java/util/concurrent/ConcurrentHashMap$ForEachKeyTask +20 -1: java/security/Policy +13 -1: getDescriptor +32 -1: (I)Ljava/lang/invoke/MethodType; +15 -1: nativeLibraries +27 -1: sun/util/locale/LanguageTag +8 -1: priority +12 -1: IntegerCache +14 -1: connectTimeout +9 -1: namePairs +17 -1: vmAllowSuspension +16 -1: METHOD_MODIFIERS +51 -1: (Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +20 -1: MIN_TREEIFY_CAPACITY +13 -1: getEntryBytes +33 -1: ()Lsun/reflect/ReflectionFactory; +17 -1: getDisplayCountry +13 -1: isWrapperType +5 -1: utf16 +12 -1: parallelSort +27 -1: (Ljava/nio/ByteBuffer;IIZ)V +56 -1: (Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Class;I)Z +9 -1: isDefined +20 -1: sun/misc/FloatConsts +10 -1: putDoubleB +30 -1: java/lang/NoSuchFieldException +27 -1: Value out of range. Value:" +36 -1: sun/reflect/NativeMethodAccessorImpl +7 -1: decoder +38 -1: ([Ljava/lang/invoke/MutableCallSite;)V +10 -1: putDoubleL +68 -1: (Ljava/lang/reflect/Method;)Lsun/reflect/generics/scope/MethodScope; +37 -1: java/lang/invoke/MethodHandles$Lookup +9 -1: Void.java +28 -1: sun/util/locale/BaseLocale$1 +10 -1: stackTrace +7 -1: toClass +11 -1: access$1500 +41 -1: (Ljava/lang/Object;I)Ljava/lang/Class<*>; +148 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;Ljava/lang/Object;JLjava/lang/invoke/DirectMethodHandle$1;)V +22 -1: ARRAY_BYTE_BASE_OFFSET +13 -1: ZipEntry.java +56 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/List; +5 -1: utf32 +16 -1: ISO_646.irv:1991 +5 -1: p-126 +20 -1: sun.net.www.protocol +3 -1: key +20 -1: IMPLEMENTATION_TITLE +93 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Lsun/util/locale/LanguageTag; +66 -1: ([Ljava/lang/Object;[Ljava/lang/Object;IIILjava/util/Comparator;)V +27 -1: java/nio/DirectFloatBufferS +27 -1: java/nio/DirectFloatBufferU +15 -1: JZENTRY_COMMENT +8 -1: casTabAt +10 -1: getVariant +24 -1: Ljava/lang/Thread$State; +35 -1: ()Ljava/lang/AbstractStringBuilder; +114 -1: (Ljava/security/CodeSource;Ljava/security/PermissionCollection;Ljava/lang/ClassLoader;[Ljava/security/Principal;)V +16 -1: getShortVolatile +18 -1: SoftReference.java +3 -1: BST +12 -1: isCastableTo +28 -1: sun.zip.disableMemoryMapping +11 -1: copyOfRange +17 -1: ()Lsun/misc/Perf; +59 -1: (Ljava/lang/String;[Ljava/io/File;Ljava/lang/ClassLoader;)V +27 -1: (Lsun/misc/JavaAWTAccess;)V +8 -1: DECLARED +18 -1: loadedLibraryNames +6 -1: CENNAM +7 -1: encprop +5 -1: ABASE +27 -1: java/util/WeakHashMap$Entry +13 -1: wrapWithPrims +5 -1: UTF32 +29 -1: Ljava/net/URISyntaxException; +6 -1: groups +65 -1: (Ljava/util/Set<+TT;>;)Ljava/util/Set; +32 -1: lambda$comparingByKey$6d558cbf$1 +15 -1: removeElementAt +49 -1: [Ljava/util/concurrent/ConcurrentHashMap$Segment; +32 -1: Sign character in wrong position +6 -1: IBM819 +39 -1: java/security/cert/CertificateException +4 -1: join +30 -1: Ljava/lang/invoke/ForceInline; +14 -1: expandCapacity +19 -1: Ljava/lang/Integer; +11 -1: NUMBER_THAI +10 -1: getExtURLs +9 -1: retainAll +21 -1: (S)Ljava/lang/String; +8 -1: truncate +51 -1: java/util/ArraysParallelSortHelpers$FJObject$Sorter +28 -1: newIndexOutOfBoundsException +26 -1: JavaUtilJarAccessImpl.java +22 -1: (II)Ljava/util/BitSet; +10 -1: getLongAt0 +65 -1: (Ljava/lang/Class;)TA; +26 -1: (Ljava/lang/ThreadLocal;)I +5 -1: (J)[B +27 -1: Ljava/lang/CharacterData00; +18 -1: sun/misc/Cleaner$1 +59 -1: (Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I +114 -1: (JLjava/util/function/ToDoubleFunction;>;DLjava/util/function/DoubleBinaryOperator;)D +28 -1: java/lang/ClassCastException +26 -1: (Ljava/lang/ThreadLocal;)V +27 -1: ()[Ljava/lang/reflect/Type; +13 -1: not invoker: +56 -1: (Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection; +6 -1: before +37 -1: ([DII)Ljava/util/stream/DoubleStream; +9 -1: logicalOr +9 -1: IS_METHOD +12 -1: SPACE_USABLE +12 -1: lastModified +10 -1: setSigners +8 -1: Invokers +7 -1: nCopies +12 -1: utf-32le-bom +7 -1: (IIII)J +17 -1: jdkSpecialVersion +26 -1: ()Ljava/lang/StringBuffer; +17 -1: SearchEntriesTask +14 -1: java/net/Parts +20 -1: Ljava/lang/Runnable; +35 -1: java/util/WeakHashMap$ValueIterator +19 -1: FinalReference.java +7 -1: (IIII)V +23 -1: Ljava/lang/ThreadGroup; +10 -1: nullsFirst +8 -1: setCache +55 -1: (Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;)Z +24 -1: java/util/SimpleTimeZone +6 -1: IBM850 +6 -1: IBM852 +25 -1: sun/net/www/MeteredStream +4 -1: exts +6 -1: IBM855 +16 -1: allocateElements +6 -1: IBM857 +19 -1: setDefaultUseCaches +6 -1: IBM858 +5 -1: slice +9 -1: marklimit +77 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; +32 -1: java/util/Collections$CheckedSet +12 -1: getModifiers +8 -1: protocol +10 -1: getInteger +33 -1: ([J)Ljava/util/stream/LongStream; +6 -1: IBM862 +8 -1: Map.java +35 -1: java/lang/Class$EnclosingMethodInfo +25 -1: (J)Ljava/math/BigInteger; +31 -1: (Ljava/net/URL;Ljava/io/File;)V +6 -1: IBM866 +6 -1: unload +28 -1: sun/invoke/util/VerifyAccess +105 -1: ()Ljava/util/Map;Ljava/lang/annotation/Annotation;>; +25 -1: Resetting to invalid mark +20 -1: java/util/Vector$Itr +5 -1: SHIFT +11 -1: NonfairSync +18 -1: getSecurityManager +34 -1: ()[Ljava/lang/ClassValue$Entry<*>; +28 -1: (J)Ljava/lang/StringBuilder; +28 -1: (Ljava/security/PublicKey;)V +12 -1: getResources +6 -1: IBM874 +27 -1: which Java does not define +36 -1: (Ljava/lang/invoke/MethodTypeForm;)V +48 -1: array length is not legal for long[] or double[] +18 -1: IS_FIELD_OR_METHOD +7 -1: Aliases +17 -1: checkedExceptions +13 -1: getDayOfMonth +51 -1: (Ljava/util/Spliterator;Z)Ljava/util/stream/Stream; +20 -1: java/io/EOFException +26 -1: Enclosing method not found +17 -1: flushLeftoverChar +122 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B)Ljava/lang/reflect/Constructor<*>; +18 -1: buildAnnotatedType +21 -1: setContextClassLoader +22 -1: java/io/UnixFileSystem +20 -1: nonSyncContentEquals +43 -1: java/util/Collections$SynchronizedSortedMap +15 -1: Properties.java +35 -1: com.oracle.usagetracker.config.file +13 -1: java/util/Map +18 -1: setEagerValidation +13 -1: getSetMessage +6 -1: unlock +14 -1: refKindIsField +22 -1: bad field type alias: +17 -1: casAnnotationData +6 -1: AUGUST +106 -1: (Ljava/util/concurrent/CountedCompleter;[Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/util/Comparator;)V +11 -1: monitorExit +17 -1: linkMethodTracing +69 -1: (Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/BaseLocale$1;)V +21 -1: java/lang/ClassLoader +39 -1: PKCS11 KeyStore debugging +10 -1: checkRtype +25 -1: getLocalGregorianCalendar +23 -1: GenericDeclaration.java +12 -1: isViewableAs +22 -1: static_oop_field_count +72 -1: (Ljava/util/function/ToDoubleFunction<-TT;>;)Ljava/util/Comparator; +11 -1: languageKey +6 -1: Class +34 -1: java/util/HashMap$ValueSpliterator +37 -1: (IJ)Ljava/lang/AbstractStringBuilder; +17 -1: privilegedContext +36 -1: java/util/LinkedHashMap$LinkedValues +11 -1: getHostName +10 -1: beginEntry +7 -1: isAlpha +61 -1: (Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/LambdaForm; +10 -1: expandArgs +14 -1: Finalizer.java +14 -1: timeDefinition +28 -1: ()Ljava/util/jar/Attributes; +14 -1: ansi_x3.4-1968 +11 -1: setPriority +23 -1: (C)Ljava/lang/Class<*>; +26 -1: (Ljava/lang/Object;TV;)TV; +70 -1: (Ljava/util/function/BiFunction;Ljava/lang/Object;Ljava/lang/Object;)V +48 -1: ()Lsun/reflect/generics/factory/GenericsFactory; +25 -1: java/lang/invoke/CallSite +8 -1: tzdb.dat +17 -1: containsAllLimits +17 -1: fileNameMapLoaded +6 -1: values +17 -1: setLastAccessTime +12 -1: expandFromVM +50 -1: java/lang/invoke/MethodHandle$PolymorphicSignature +3 -1: .EC +14 -1: access denied +22 -1: java/util/AbstractList +47 -1: (IILjava/lang/String;)Ljava/lang/StringBuilder; +52 -1: ()Lsun/reflect/generics/repository/MethodRepository; +22 -1: (Ljava/lang/String;)[B +57 -1: (Ljava/lang/Object;)Ljava/lang/invoke/DirectMethodHandle; +18 -1: compareAndSwapLong +4 -1: != +6 -1: StdArg +29 -1: (Ljava/security/Permission;)V +22 -1: ([D)Ljava/lang/String; +28 -1: Lsun/reflect/MethodAccessor; +14 -1: ansi_x3.4-1986 +20 -1: getPeakFinalRefCount +29 -1: (Ljava/security/Permission;)Z +5 -1: debug +38 -1: (Ljava/lang/reflect/Constructor<*>;)[B +27 -1: java/util/GregorianCalendar +16 -1: Null replacement +26 -1: ()Ljava/lang/reflect/Type; +28 -1: DIRECTIONALITY_LEFT_TO_RIGHT +102 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/BaseLocale; +15 -1: isConvertibleTo +24 -1: ARRAY_DOUBLE_INDEX_SCALE +16 -1: getComponentType +29 -1: sun/util/locale/LocaleMatcher +11 -1: LOCALECACHE +6 -1: UNWRAP +16 -1: AbstractSet.java +3 -1: CAT +36 -1: java/lang/annotation/RetentionPolicy +14 -1: getParameters0 +8 -1: .Handler +33 -1: Ljava/lang/IllegalStateException; +10 -1: RAW_RETURN +20 -1: java/lang/ClassValue +16 -1: getDisplayString +152 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node; +67 -1: ()Ljava/util/Map; +214 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +33 -1: java/lang/invoke/SerializedLambda +42 -1: ([Ljava/lang/Object;II)[Ljava/lang/Object; +22 -1: java/util/zip/ZipUtils +9 -1: setDaemon +26 -1: java/net/HttpURLConnection +6 -1: mkdirs +20 -1: (Ljava/io/Reader;I)V +28 -1: (IC)Ljava/lang/StringBuffer; +45 -1: ([Ljava/lang/Class<*>;I)[Ljava/lang/Class<*>; +29 -1: java/lang/invoke/MethodHandle +28 -1: sun/misc/CompoundEnumeration +6 -1: setVal +23 -1: INTERNED_ARGUMENT_LIMIT +4 -1: NULL +49 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class;)Z +43 -1: java/util/Collections$UnmodifiableSortedMap +39 -1: (Ljava/lang/Object;Ljava/lang/Object;)I +6 -1: ([JJ)I +19 -1: java/io/PrintWriter +25 -1: ()Ljava/lang/ThreadGroup; +5 -1: (IJ)J +16 -1: onMalformedInput +15 -1: decrementAndGet +11 -1: -2147483648 +6 -1: reduce +12 -1: asCharBuffer +39 -1: (Ljava/lang/Object;Ljava/lang/Object;)V +44 -1: (Ljava/util/SortedSet;)Ljava/util/SortedSet; +9 -1: backtrace +3 3: Bar +47 -1: ()Lsun/misc/JavaSecurityProtectionDomainAccess; +39 -1: (Ljava/lang/Object;Ljava/lang/Object;)Z +5 -1: (IJ)V +6 -1: ([JJ)V +22 -1: ([Ljava/lang/Thread;)I +5 -1: (IJ)Z +7 -1: ([BII)I +79 -1: (Ljava/util/Comparator<-TT;>;)Ljava/util/Comparator; +12 -1: getUnchecked +10 -1: getBaseURL +36 -1: (Ljava/lang/Object;)Ljava/util/List; +53 -1: (Ljava/util/function/Function;)Ljava/util/Comparator; +10 -1: getComment +7 -1: ([BII)V +30 -1: privateGetDeclaredConstructors +58 -1: (Ljava/lang/String;ZILjava/util/Locale;)Ljava/lang/String; +18 -1: unknown era name: +13 -1: invokeSpecial +9 -1: checkLink +16 -1: cspc8codepage437 +6 -1: stream +18 -1: sun/nio/cs/UTF_8$1 +18 -1: contextClassLoader +50 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)V +30 -1: sun/util/calendar/BaseCalendar +11 -1: enumeration +18 -1: key can't be empty +137 -1: (JLjava/util/function/Function;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; +10 -1: getBoolean +5 -1: eetop +49 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/String; +43 -1: sun/reflect/generics/scope/ConstructorScope +13 -1: CANADA_FRENCH +39 -1: Ljava/nio/channels/ReadableByteChannel; +15 -1: java/lang/Float +29 -1: DIRECTIONALITY_OTHER_NEUTRALS +52 -1: (ZLjava/nio/charset/Charset;Ljava/io/OutputStream;)V +8 -1: appendTo +19 -1: PARAGRAPH_SEPARATOR +16 -1: (Unknown Source) +4 -1: tree +38 -1: (I[C)Ljava/lang/AbstractStringBuilder; +14 -1: VerifierStream +48 -1: (Ljava/util/Collection;Ljava/lang/Object;)V +15 -1: releaseInflater +20 -1: getHeaderNamesInList +17 -1: getSystemPackages +8 -1: teardown +6 -1: (BZI)I +10 -1: checkWrite +19 -1: JavaLangAccess.java +31 -1: Ljava/lang/ClassValue$Identity; +50 -1: (Ljava/util/concurrent/CountedCompleter;[S[SIIII)V +24 -1: getDeclaredConstructors0 +3 -1: /.. +3 -1: /./ +16 -1: hashCodeForCache +18 -1: Property settings: +26 -1: Illegal initial capacity: +10 -1: text/plain +61 -1: (Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator; +24 -1: createMemoryManagerMBean +10 -1: ,lastRule= +9 -1: GMT-00:00 +5 -1: mtime +40 -1: (Ljava/lang/String;I)[Ljava/lang/String; +11 -1: (TT;TV;)TV; +154 -1: (Ljava/lang/Class<*>;Ljava/lang/String;[Ljava/lang/Class<*>;Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B[B)Ljava/lang/reflect/Method; +41 -1: (Ljava/util/jar/JarFile;)Ljava/util/List; +43 -1: (JILjava/lang/Object;)Ljava/nio/ByteBuffer; +19 -1: MethodTypeForm.java +21 -1: java/util/jar/JarFile +30 -1: java/lang/Integer$IntegerCache +22 -1: getDisplayVariantArray +6 -1: setAll +13 -1: ClassValueMap +52 -1: (Ljava/security/PublicKey;Ljava/security/Provider;)V +51 -1: java/util/concurrent/ConcurrentHashMap$BaseIterator +59 -1: (Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V +100 -1: (Ljava/util/concurrent/ConcurrentMap;Ljava/util/function/BiFunction;)Ljava/util/function/BiConsumer; +8 -1: default +13 -1: compareAndSet +10 -1: iso8859-13 +9 -1: putShortB +14 -1: skipDelimiters +28 -1: URI has a fragment component +10 -1: iso8859-15 +42 -1: (Ljava/net/Proxy;)Ljava/net/URLConnection; +23 -1: needsPackageAccessCheck +9 -1: putShortL +3 -1: //[ +69 -1: (Ljava/security/AccessControlContext;Ljava/security/DomainCombiner;)V +18 -1: too many arguments +35 -1: ([III)Ljava/util/Spliterator$OfInt; +10 -1: CopiesList +10 -1: iso-8859-1 +9 -1: ([BII[C)I +10 -1: iso-8859-2 +11 -1: returnCount +10 -1: iso-8859-4 +10 -1: iso-8859-5 +8 -1: utf_16be +10 -1: iso-8859-7 +9 -1: isLimited +9 -1: parseByte +10 -1: iso-8859-9 +13 -1: , s.length() +10 -1: matchCerts +14 -1: RECURSIVE_CHAR +11 -1: reduceToInt +11 -1: displayName +9 -1: calendars +64 -1: (Ljava/lang/String;ZLjava/util/jar/JarEntry;)Lsun/misc/Resource; +11 -1: isProtected +78 -1: (Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/SortedMap; +4 -1: trim +20 -1: java/nio/FloatBuffer +17 -1: PreHashedMap.java +74 -1: Ljava/util/concurrent/ConcurrentMap; +22 -1: ([S)Ljava/lang/String; +19 -1: PrintStreamOrWriter +38 -1: java/util/Collections$EmptyEnumeration +22 -1: java/util/LinkedList$1 +13 -1: sunpkcs11.jar +25 -1: java/nio/DirectByteBuffer +96 -1: (ZLjava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +7 -1: isArray +43 -1: (Ljava/lang/String;)Ljava/util/Enumeration; +52 -1: java/lang/invoke/MethodHandleImpl$AsVarargsCollector +59 -1: (Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class<*>; +26 -1: setJavaNetHttpCookieAccess +15 -1: wrongTargetType +57 -1: java/util/concurrent/ConcurrentHashMap$ForEachMappingTask +33 -1: [Ljava/lang/reflect/TypeVariable; +5 -1: load0 +39 -1: (Ljava/lang/String;)Ljava/lang/Boolean; +21 -1: isHeldByCurrentThread +14 -1: outOfBoundsMsg +30 -1: Ljava/lang/ref/Reference$Lock; +11 -1: ISO-8859-13 +84 -1: (Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; +11 -1: ISO-8859-15 +40 -1: (Ljava/net/URL;)Ljava/net/URLConnection; +84 -1: ;>(Ljava/util/Collection<+TT;>;)TT; +38 -1: sun/reflect/generics/scope/MethodScope +5 -1: mutex +11 -1: loaderTypes +8 -1: defaults +22 -1: getActualTypeArguments +41 -1: DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR +4 -1: keys +71 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +94 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle; +113 -1: Ljava/util/AbstractSet;Ljava/util/Set;Ljava/lang/Cloneable;Ljava/io/Serializable; +12 -1: checkConnect +39 -1: (Ljava/lang/String;Ljava/util/Locale;)V +26 -1: ([CII[C)Ljava/lang/String; +12 -1: isDoubleWord +37 -1: configparser JAAS ConfigFile parsing +27 -1: sun/misc/Perf$GetPerfAction +44 -1: (Ljava/util/Collections$UnmodifiableList;I)V +4 -1: acos +26 -1: java/nio/DirectLongBufferS +7 -1: (ITE;)V +14 -1: putIntVolatile +24 -1: setContentHandlerFactory +26 -1: java/nio/DirectLongBufferU +10 -1: fieldCount +11 -1: invokeBasic +50 -1: (Ljava/util/zip/ZipEntry;)Ljava/util/jar/JarEntry; +24 -1: java/util/Locale$Builder +9 -1: setParent +11 -1: asLifoQueue +33 -1: lambda$comparingDouble$8dcf42ea$1 +24 -1: (Ljava/lang/Throwable;)I +35 -1: (Lsun/misc/JavaUtilZipFileAccess;)V +49 -1: (ILjava/lang/Object;)Ljava/util/HashMap$TreeNode; +10 -1: CLASS_PATH +6 -1: tclass +11 -1: getExponent +23 -1: getAnnotatedReturnType0 +18 -1: checkPackageAccess +35 -1: Can not instantiate java.lang.Class +24 -1: (Ljava/lang/Throwable;)V +195 -1: (Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/BoundMethodHandle$SpeciesData;Ljava/lang/invoke/BoundMethodHandle$SpeciesData;)Ljava/lang/invoke/LambdaForm; +17 -1: Empty replacement +3 -1: .SF +14 -1: ByteOrder.java +39 -1: ()Lsun/util/calendar/BaseCalendar$Date; +35 -1: ()[Ljava/security/ProtectionDomain; +12 -1: setElementAt +30 -1: (Ljava/security/CodeSource;Z)Z +45 -1: (Ljava/lang/Class<*>;)Ljava/lang/ClassLoader; +52 -1: (Ljava/nio/charset/Charset;)Ljava/util/zip/ZipCoder; +13 -1: foldArguments +23 -1: java/time/LocalDateTime +30 -1: [Lsun/launcher/LauncherHelper; +16 -1: 0123456789abcdef +60 -1: (Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream; +33 -1: (ILjava/lang/String;IIIIIIIIIII)V +20 -1: DMH.newInvokeSpecial +28 -1: java/nio/charset/CoderResult +33 -1: sun/nio/cs/StandardCharsets$Cache +11 -1: saveConvert +14 -1: ExtClassLoader +12 -1: parentOrNull +20 -1: insertParameterTypes +32 -1: (II)Ljava/util/stream/IntStream; +13 -1: setStackTrace +20 -1: is not an enum type +3 -1: CNT +4 -1: host +85 -1: ([Ljava/lang/Object;Ljava/util/function/IntFunction;)Ljava/util/function/IntConsumer; +11 -1: batchRemove +8 -1: newField +16 5: sun/nio/cs/UTF_8 +104 -1: (Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;)Ljava/lang/invoke/LambdaForm$Name; +8 -1: saturday +35 -1: java/util/ArraysParallelSortHelpers +15 -1: java/util/Queue +40 -1: (Ljava/lang/Class<*>;)Ljava/lang/String; +7 -1: toChars +5 -1: first +17 -1: ArrayDecoder.java +30 -1: ()Lsun/reflect/MethodAccessor; +26 -1: thread group can't be null +13 -1: IllegalName: +32 -1: java/util/Collections$SetFromMap +14 -1: line.separator +17 -1: getDeclaredMethod +10 -1: getMinutes +35 -1: (Lsun/util/locale/BaseLocale$Key;)I +40 -1: ([Ljava/lang/String;)Ljava/lang/Process; +31 -1: Ljava/util/LinkedHashMap$Entry; +13 -1: , str.length +8 -1: getProbe +6 -1: ([DI)I +5 -1: (CI)I +23 -1: saveAndRemoveProperties +6 -1: rehash +3 -1: lcb +31 -1: Ljava/util/Arrays$NaturalOrder; +55 -1: (IILjava/lang/String;)Ljava/lang/AbstractStringBuilder; +10 -1: loadFactor +15 -1: putLongVolatile +34 -1: sun/misc/URLClassPath$FileLoader$1 +12 -1: Europe/Paris +8 -1: DECEMBER +86 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; +22 -1: getImplMethodSignature +38 -1: Malformed enclosing method information +8 -1: maskNull +3 -1: lct +21 -1: CONSTRUCTOR_MODIFIERS +36 -1: ()Lsun/misc/JavaNetHttpCookieAccess; +12 -1: HashIterator +84 -1: (Ljava/lang/Class;Ljava/lang/Class$AnnotationData;Ljava/lang/Class$AnnotationData;)Z +33 -1: java/lang/Character$UnicodeScript +5 -1: toHex +27 -1: java/security/AllPermission +17 -1: appendReplacement +20 -1: SimpleImmutableEntry +18 -1: getRequestProperty +12 -1: compareCerts +44 -1: java/util/ArrayPrefixHelpers$IntCumulateTask +19 -1: makeSpreadArguments +222 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesTask;Ljava/util/function/Function;Ljava/util/function/BiFunction;)V +8 -1: addFirst +6 -1: nextUp +35 -1: (Ljava/net/ContentHandlerFactory;)V +40 -1: (Ljava/lang/String;)Ljava/lang/Class<*>; +23 -1: java/util/LocaleISOData +14 -1: PREPARED_FORMS +6 -1: FJByte +20 -1: getGenericSuperclass +6 -1: offset +16 -1: LocaleUtils.java +12 -1: isUnresolved +18 -1: aliases_ISO_8859_1 +18 -1: aliases_ISO_8859_2 +15 -1: isSurrogatePair +18 -1: aliases_ISO_8859_4 +18 -1: aliases_ISO_8859_5 +6 -1: EXTLEN +18 -1: aliases_ISO_8859_7 +15 -1: Comparator.java +18 -1: aliases_ISO_8859_9 +15 -1: ISO_8859-2:1987 +22 -1: Ljava/util/List<+TE;>; +16 -1: Unknown Category +3 -1: CST +51 -1: Ljava/util/AbstractList; +6 -1: FRIDAY +40 -1: (Ljava/lang/String;ZZ)Ljava/lang/String; +13 -1: isInterrupted +8 -1: utf_16le +89 -1: (BLjava/lang/Class<*>;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; +22 -1: checkInvocationCounter +12 -1: EPOCH_OFFSET +35 -1: (JJILjava/nio/DirectByteBuffer$1;)V +7 -1: canRead +9 -1: getLoader +18 -1: publicConstructors +23 -1: factory already defined +33 -1: java/lang/ref/ReferenceQueue$Null +37 -1: (Ljava/util/List;Ljava/util/Random;)V +25 -1: setPackageAssertionStatus +20 -1: MapReduceEntriesTask +11 -1: OPEN_DELETE +35 -1: (Ljava/util/Set;Ljava/lang/Class;)V +9 -1: rootGroup +10 -1: updateForm +22 -1: JavaUtilJarAccess.java +3 -1: CTT +57 -1: (Lsun/reflect/MethodInfo;)Ljava/lang/reflect/Constructor; +82 -1: (Ljava/util/NavigableSet;)Ljava/util/NavigableSet; +13 -1: getReturnType +34 -1: java/util/HashMap$EntrySpliterator +14 -1: TIME_UNDEFINED +32 -1: com/sun/crypto/provider/AESCrypt +7 -1: H_DIGIT +20 -1: clearAssertionStatus +44 -1: java/lang/invoke/MethodHandleImpl$BindCaller +8 -1: scloader +6 -1: IBM923 +5 -1: read0 +5 -1: read1 +4 -1: true +9 -1: BA_HIDDEN +16 -1: jvmUpdateVersion +36 -1: java/lang/StringCoding$StringDecoder +37 -1: (J)Ljava/nio/file/attribute/FileTime; +3 -1: lib +17 -1: getParameterTypes +15 -1: FinalizerThread +31 -1: ()Lsun/util/calendar/Gregorian; +50 -1: (Ljava/lang/CharSequence;)Ljava/lang/StringBuffer; +13 -1: PROP_SETTINGS +33 -1: java/util/function/BinaryOperator +70 -1: (ILjava/util/List;>;)Ljava/lang/invoke/MethodType; +25 -1: getDefaultRequestProperty +27 -1: (Ljava/util/jar/JarEntry;)V +27 -1: SPLITERATOR_CHARACTERISTICS +18 -1: FieldAccessor.java +10 -1: setComment +62 -1: (Ljava/lang/String;)Ljava/lang/management/MemoryManagerMXBean; +11 -1: array_klass +39 -1: ()Ljava/lang/Class$EnclosingMethodInfo; +67 -1: ([Ljava/lang/ClassValue$Entry<*>;ILjava/lang/ClassValue$Entry<*>;)I +9 -1: (II[CII)I +50 -1: (Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V +20 -1: SPECIFICATION_VENDOR +72 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/net/URL;)Ljava/util/jar/JarFile; +87 -1: (Ljava/lang/ThreadLocal;>;TT;)V +9 -1: isVarArgs +10 -1: setBoolean +12 -1: (TK;TV;TV;)Z +16 -1: findSharedClass0 +5 -1: csize +49 -1: Ljava/security/cert/CertificateEncodingException; +40 -1: java/util/concurrent/locks/ReentrantLock +86 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/lang/String;)Lsun/nio/cs/StreamEncoder; +5 -1: ready +38 -1: Ljava/security/AccessControlException; +28 -1: UnmodifiableRandomAccessList +69 -1: ([TT;Ljava/util/function/BinaryOperator;)V +27 -1: Ljava/lang/invoke/Invokers; +39 -1: java/util/LinkedList$DescendingIterator +11 -1: writeFields +17 -1: classLoaderDepth0 +18 -1: permutedTypesMatch +52 -1: (Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/List; +12 -1: linkToStatic +10 -1: CheckedMap +6 -1: CENOFF +8 -1: lastRule +15 -1: java/lang/Short +39 -1: ()Ljava/lang/Class$ReflectionData; +8 -1: nextDown +14 -1: image/x-pixmap +39 -1: (Ljava/lang/Class;[Ljava/lang/Object;)V +25 -1: defineClassSourceLocation +23 -1: sun/misc/PostVMInitHook +15 -1: could not load +16 -1: allowArraySyntax +90 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +10 -1: putBoolean +11 -1: has params +14 -1: setMaxPriority +10 -1: mayContain +46 -1: java/lang/reflect/MalformedParametersException +10 -1: baseLocale +14 -1: isSubwordOrInt +10 -1: nextDouble +32 -1: java/lang/Character$UnicodeBlock +85 -1: (JLjava/util/function/ToDoubleBiFunction;DLjava/util/function/DoubleBinaryOperator;)D +20 -1: numberOfLeadingZeros +59 -1: (I[Ljava/lang/Class<*>;)[Ljava/lang/invoke/LambdaForm$Name; +7 -1: setSize +29 -1: java/io/FileNotFoundException +9 -1: getString +24 -1: ([CII)Ljava/lang/String; +38 -1: (Ljava/lang/String;Ljava/lang/Class;)V +5 -1: shift +18 -1: getConstructorSlot +41 -1: java/lang/ThreadLocal$SuppliedThreadLocal +16 -1: UNASSIGNED_STACK +20 -1: Malformed class name +12 -1: ofEpochMilli +34 -1: sun/launcher/LauncherHelper$StdArg +33 -1: java/nio/ByteBufferAsShortBufferB +7 -1: convert +21 -1: ()[Ljava/util/Locale; +15 -1: ISO_8859-5:1988 +35 -1: av[0] not instace of MethodHandle: +33 -1: java/nio/ByteBufferAsShortBufferL +5 -1: hypot +16 -1: InputStream.java +13 -1: reinvokerForm +39 -1: JVMTI_THREAD_STATE_WAITING_INDEFINITELY +16 -1: sun/misc/Version +66 -1: (Ljava/lang/Class;)[TT; +11 -1: codePointAt +30 -1: ([Ljava/lang/reflect/Method;)V +9 -1: duplicate +9 -1: interface +5 -1: X.509 +24 -1: SynchronizedNavigableSet +8 -1: us-ascii +17 -1: getUnresolvedType +21 -1: PRIVATE_USE_EXTENSION +4 -1: form +93 -1: (Ljava/util/ArrayPrefixHelpers$LongCumulateTask;Ljava/util/function/LongBinaryOperator;[JII)V +27 -1: sealing violation: package +34 -1: RuntimeVisibleParameterAnnotations +17 -1: LF_INVSTATIC_INIT +14 -1: Gregorian.java +32 -1: java/util/function/UnaryOperator +3 -1: log +3 -1: low +22 -1: sun/misc/JavaNetAccess +9 -1: getLength +21 -1: getRawTypeAnnotations +36 -1: (Ljava/lang/String;)Ljava/lang/Long; +9 -1: getNumber +66 -1: (ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node; +20 -1: (Ljava/lang/Class;)C +89 -1: Ljava/lang/Object;Ljava/util/Map$Entry; +6 -1: ENDSIG +20 -1: (Ljava/lang/Class;)I +20 -1: (Ljava/lang/Class;)J +24 -1: [[Ljava/io/Serializable; +22 -1: serialPersistentFields +7 -1: console +142 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +27 -1: (Ljava/nio/ByteBuffer;ICZ)V +20 -1: (Ljava/lang/Class;)V +40 -1: java/lang/ArrayIndexOutOfBoundsException +6 -1: this$0 +51 -1: (Ljava/lang/invoke/MemberName;[Ljava/lang/Object;)V +18 -1: packageAccessValid +33 -1: ([Ljava/lang/StackTraceElement;)V +8 -1: constant +113 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;IILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class<*>; +8 -1: isMethod +20 -1: (Ljava/lang/Class;)Z +6 -1: ENDSIZ +8 -1: newEntry +57 -1: (Ljava/lang/Object;)Ljava/lang/IndexOutOfBoundsException; +25 -1: (Ljava/util/Comparator;)V +8 -1: isBridge +6 -1: ([BI)I +6 -1: ([BI)J +16 -1: getReferenceKind +26 -1: [Ljava/security/Principal; +71 -1: (Ljava/lang/Class;[Ljava/lang/reflect/Field;)[Ljava/lang/reflect/Field; +32 -1: ()Ljava/lang/ClassValue$Version; +16 -1: SearchValuesTask +17 -1: setCompressedSize +16 -1: DEFAULT_CAPACITY +108 -1: ;>()Ljava/util/Comparator;>; +27 -1: java/util/ComparableTimSort +41 -1: null StackTraceElement in serial stream. +6 -1: ([BI)V +44 -1: (Ljava/util/jar/JarFile;)Lsun/misc/JarIndex; +71 -1: (Ljava/util/jar/JarFile;Ljava/util/Enumeration;)Ljava/util/Enumeration; +52 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class<*>;)Z +36 -1: [Ljava/lang/reflect/TypeVariable<*>; +17 -1: OutputStream.java +8 -1: combiner +15 -1: decodeArrayLoop +19 -1: (Ljava/io/Writer;)V +41 -1: (Ljava/util/List<*>;Ljava/util/List<*>;)I +35 -1: ()[Ljava/security/cert/Certificate; +33 -1: ([I)Ljava/util/Spliterator$OfInt; +9 -1: NF_asType +17 -1: java/io/Closeable +11 -1: updateBytes +12 -1: charsets.jar +18 -1: getDeclaredFields0 +47 -1: (Ljava/lang/Object;I)Ljava/lang/reflect/Member; +60 -1: (Ljava/lang/String;ILjava/lang/String;)Ljava/nio/ByteBuffer; +15 -1: getTotalSeconds +57 -1: (Ljava/util/Collection<+Ljava/util/Map$Entry;>;)Z +4 -1: JULY +10 -1: Exceptions +41 -1: ()Ljava/util/List; +14 -1: ParseUtil.java +13 -1: getJarFileURL +29 -1: setJavaIOFileDescriptorAccess +24 -1: ARRAY_OBJECT_BASE_OFFSET +21 -1: onUnmappableCharacter +53 -1: (Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map; +24 -1: MethodHandleNatives.java +40 -1: java/nio/charset/MalformedInputException +37 -1: [Ljava/lang/reflect/AnnotatedElement; +15 -1: CLASSPATH_CHARS +18 -1: [Ljava/lang/Class; +7 -1: FJFloat +47 -1: (Ljava/util/List;I)V +19 -1: Ljava/lang/Runtime; +23 -1: java/lang/CharacterData +42 -1: (Ljava/lang/Void;Ljava/lang/ClassLoader;)V +76 -1: (Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)V +56 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;B)V +19 -1: java/util/zip/CRC32 +33 -1: ([TT;I)[TT; +22 -1: ([F)Ljava/lang/String; +5 -1: UTF_8 +20 -1: aliases_UTF_32BE_BOM +11 -1: Buffer.java +78 -1: (Ljava/util/Comparator;)Ljava/util/Comparator; +44 -1: (Ljava/lang/String;)Ljava/util/zip/ZipEntry; +9 -1: malformed +4 -1: JUNE +51 -1: (Ljava/util/jar/JarFile;Ljava/util/jar/JarFile$1;)V +6 -1: locale +34 -1: (Ljava/util/function/BiFunction;)V +10 -1: setMinutes +40 -1: (Ljava/lang/reflect/AccessibleObject;Z)V +12 -1: maybeCompile +46 -1: (Ljava/lang/Class;Ljava/lang/reflect/Method;)V +7 -1: getEras +55 -1: ([TT;Ljava/util/Iterator<*>;)[TT; +17 -1: toUnsignedString0 +32 -1: (Ljava/lang/invoke/MethodType;)V +32 -1: (Ljava/lang/invoke/MethodType;)Z +10 -1: Class.java +27 -1: ()Ljava/util/Iterator; +29 -1: WINDOWS_EPOCH_IN_MICROSECONDS +41 -1: (Ljava/io/InputStream;)Ljava/lang/String; +4 -1: prev +24 -1: ()Ljava/util/Properties; +11 -1: awaitBooted +19 -1: generateConstructor +22 -1: sun/misc/SharedSecrets +19 -1: getDateTimeInstance +43 -1: (IIILsun/util/calendar/BaseCalendar$Date;)J +5 -1: setID +11 -1: Locale.java +12 -1: getRootGroup +15 -1: setLastModified +7 -1: trouble +28 -1: (Z)Ljava/lang/StringBuilder; +5 -1: setIO +17 -1: loadClassInternal +23 -1: java/lang/ref/Finalizer +8 -1: EmptySet +16 -1: aliases_UTF_16BE +50 -1: (Ljava/util/NavigableMap;)Ljava/util/NavigableMap; +15 -1: unmodifiableMap +48 -1: (Ljava/lang/Class<*>;)Lsun/reflect/ConstantPool; +15 -1: arrayContentsEq +7 -1: EXT_TAG +31 -1: (Ljava/util/HashMap$TreeNode;)Z +5 -1: cp737 +22 -1: java/util/zip/Checksum +5 -1: names +22 -1: ConcurrentHashMap.java +7 -1: ([J[J)Z +7 -1: WAITING +31 -1: sun.launcher.resources.launcher +14 -1: getThreadGroup +8 -1: PutField +12 -1: hugeCapacity +9 -1: isPackage +72 -1: (Ljava/lang/ThreadLocal<*>;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; +23 7: sun/nio/ch/DirectBuffer +13 -1: Checksum.java +25 -1: (Ljava/nio/ByteBuffer;I)C +51 -1: (Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object; +25 -1: (Ljava/nio/ByteBuffer;I)D +7 -1: treeify +25 -1: (Ljava/nio/ByteBuffer;I)F +5 -1: setIn +25 -1: (Ljava/nio/ByteBuffer;I)I +20 -1: TRACE_METHOD_LINKAGE +25 -1: (Ljava/nio/ByteBuffer;I)J +7 -1: putIntB +22 -1: createGarbageCollector +50 -1: (Ljava/lang/Class;)[TT; +25 -1: (Ljava/nio/ByteBuffer;I)S +7 -1: putIntL +19 -1: (B)Ljava/lang/Byte; +14 -1: Hashtable.java +29 -1: java/lang/ArrayStoreException +11 -1: all_allowed +16 -1: getLastRawOffset +7 -1: inReady +36 -1: java/lang/ThreadLocal$ThreadLocalMap +40 -1: (ILjava/lang/String;Ljava/lang/String;)V +23 -1: Ljava/lang/ThreadLocal; +16 -1: classValueOrNull +62 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/MethodHandle; +23 -1: preparedFieldLambdaForm +22 -1: (Z)Ljava/lang/Boolean; +14 -1: ThreadLocalMap +27 -1: java/lang/StackTraceElement +13 -1: getEntryCSize +19 -1: java.security.debug +53 -1: (Ljava/util/Collection<*>;Ljava/util/Collection<*>;)Z +6 -1: LOCLEN +40 -1: Ljava/lang/Class; +6 -1: (JJB)V +66 -1: Ljava/util/Hashtable; +31 -1: [[Ljava/lang/StackTraceElement; +9 -1: putStatic +16 -1: Asia/Ho_Chi_Minh +15 -1: getDisplayNames +13 -1: convertToAbbr +23 -1: Method not implemented. +15 -1: isCCLOverridden +14 -1: doubleCapacity +137 -1: (Ljava/lang/Class<*>;ZLjava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Class<*>;)Ljava/util/List; +219 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysTask;Ljava/util/function/Function;Ljava/util/function/BiFunction;)V +7 -1: native +29 -1: (Ljava/lang/reflect/Field;Z)V +18 -1: Ljava/util/Locale; +31 -1: Ljava/util/concurrent/TimeUnit; +16 -1: threadsSuspended +7 -1: ([III)V +20 -1: setMaxDelimCodePoint +18 -1: contentClassPrefix +13 -1: mappingOffset +10 -1: toIndex = +47 -1: (Ljava/lang/CharSequence;)Ljava/io/PrintStream; +12 -1: booleanValue +13 -1: putMapEntries +17 -1: defaultBundleName +50 -1: (Ljava/util/concurrent/CountedCompleter;[B[BIIII)V +10 -1: executable +20 -1: java/time/ZoneOffset +28 -1: java/lang/ref/FinalReference +11 -1: newTreeNode +7 -1: lookup2 +10 -1: TableStack +59 -1: Ljava/util/concurrent/ConcurrentHashMap$ValuesView; +11 -1: getAccessor +9 -1: available +18 -1: java/io/FileReader +34 -1: java/security/ProtectionDomain$3$1 +16 -1: integer overflow +11 -1: internTable +28 -1: Ljava/util/HashMap$TreeNode; +19 -1: | invocationCounter +12 -1: findResource +9 -1: isLoaded0 +5 -1: cp775 +24 -1: DIRECTIONALITY_UNDEFINED +9 -1: isInvalid +7 -1: lookupN +35 -1: (Lsun/reflect/MethodAccessorImpl;)V +6 -1: ENDSUB +4 -1: to +59 -1: ([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object; +10 -1: meta-index +6 -1: INDENT +9 -1: WEDNESDAY +40 -1: ()Ljava/lang/annotation/RetentionPolicy; +14 -1: getUsableSpace +7 -1: TUESDAY +51 -1: (Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle; +12 -1: getSubjectDN +21 -1: Ljava/io/InputStream; +25 -1: (IC)Ljava/nio/CharBuffer; +52 -1: (Ljava/nio/CharBuffer;)Ljava/util/function/Supplier; +17 -1: ()[Ljava/net/URL; +6 -1: search +10 -1: Main-Class +8 -1: ([CIIC)I +16 -1: Certificate.java +14 -1: spreadInvokers +22 -1: sun/nio/cs/ISO_8859_15 +6 -1: accept +18 -1: ReflectAccess.java +13 -1: java/nio/Bits +14 -1: linkToCallSite +46 -1: Ljava/nio/charset/UnsupportedCharsetException; +8 -1: ([CIIC)V +9 -1: (TT;TV;)V +26 -1: java/lang/OutOfMemoryError +34 -1: policy loading and granting +76 -1: (Ljava/nio/CharBuffer;ILjava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult; +13 -1: x-windows-949 +21 -1: Ljava/io/PrintStream; +9 -1: initNames +12 -1: testAnyFlags +65 -1: (Ljava/lang/reflect/Method;)Ljava/lang/invoke/DirectMethodHandle; +34 -1: (Ljava/util/List;)Ljava/util/List; +10 -1: CacheEntry +10 -1: hasAllPerm +26 -1: java/nio/charset/Charset$1 +26 -1: java/nio/charset/Charset$2 +19 -1: ()Ljava/util/Stack; +26 -1: java/nio/charset/Charset$3 +62 -1: (Ljava/lang/String;)Lsun/util/calendar/LocalGregorianCalendar; +23 -1: ARRAY_FLOAT_INDEX_SCALE +23 -1: (Ljava/lang/Object;IS)V +13 -1: x-windows-950 +31 -1: Ljava/util/Hashtable$Entry<**>; +87 -1: Ljava/util/WeakHashMap;>; +9 -1: permClass +37 -1: (Ljava/security/ProtectionDomain$3;)V +99 -1: Lsun/reflect/generics/repository/AbstractRepository; +37 -1: ()Ljava/util/function/BinaryOperator; +64 -1: java/util/Collections$UnmodifiableNavigableMap$EmptyNavigableMap +91 -1: (Ljava/util/ArrayPrefixHelpers$IntCumulateTask;Ljava/util/function/IntBinaryOperator;[III)V +6 -1: getCrc +25 -1: ByteArrayInputStream.java +9 -1: SYNTHETIC +52 -1: Ljava/lang/ref/PhantomReference; +246 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToDoubleTask;Ljava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)V +38 -1: java/lang/Throwable$WrappedPrintStream +21 -1: Illegal load factor: +43 -1: Ljava/util/Deque; +3 -1: map +6 -1: expand +6 -1: access +3 -1: max +33 -1: impliesCreateAccessControlContext +3 -1: may +53 -1: java/util/concurrent/ConcurrentHashMap$ReduceKeysTask +91 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; +60 -1: attempt to add a Permission to a readonly Permissions object +21 -1: canonicalizeExtension +11 -1: copyValueOf +25 -1: (IJ)Ljava/nio/LongBuffer; +112 -1: (JLjava/util/function/Function<-TV;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; +11 -1: DeqIterator +11 -1: SpeciesData +8 -1: getCause +16 -1: aliases_UTF_16LE +51 -1: (TT;TV;Ljava/util/function/BinaryOperator;)TV; +25 -1: (JF)Ljava/nio/ByteBuffer; +16 -1: sun/misc/IOUtils +32 -1: Ljava/util/Locale$FilteringMode; +6 -1: .class +13 -1: getPermission +13 -1: startsWithLOC +8 -1: Identity +23 -1: ([BII)Ljava/lang/Class; +15 -1: putByteVolatile +36 -1: (Ljava/util/Deque;)Ljava/util/Queue; +22 -1: (Ljava/lang/Object;S)V +47 -1: java/util/concurrent/ConcurrentHashMap$BulkTask +4 -1: n = +9 -1: (ITE;)TE; +5 -1: zeroD +18 -1: formatUnsignedLong +29 -1: default display locale = +23 -1: java/io/File$PathStatus +5 -1: zeroF +20 -1: Ljava/util/Set; +20 -1: (Ljava/util/List;I)V +5 -1: zeroI +5 -1: zeroJ +7 -1: context +39 -1: Ljava/nio/channels/WritableByteChannel; +5 -1: zeroL +34 -1: Lsun/util/calendar/CalendarSystem; +24 -1: JVMTI_THREAD_STATE_ALIVE +18 -1: (Ljava/util/Set;)V +18 -1: (Ljava/util/Set;)Z +42 -1: (TT;Ljava/lang/ref/ReferenceQueue<-TT;>;)V +7 -1: entries +30 -1: (Ljava/util/WeakHashMap;IIII)V +15 -1: csisolatingreek +38 -1: ([Ljava/lang/Class;)Ljava/lang/Object; +12 -1: isMalformed3 +12 -1: isMalformed4 +5 -1: FJInt +23 -1: java/util/LinkedHashMap +20 -1: malformedInputAction +12 -1: Charset.java +5 -1: LLL_L +42 -1: (Ljava/util/Collection;)Ljava/lang/Object; +22 -1: makeMethodHandleInvoke +3 -1: mdt +7 -1: unicode +12 -1: newInstance0 +10 -1: checkCerts +34 -1: java/util/WeakHashMap$HashIterator +23 -1: (Ljava/lang/Object;JI)I +9 -1: hexDigits +13 -1: javaToDosTime +24 -1: (I)Ljava/nio/LongBuffer; +6 -1: A_DATA +12 -1: deepToString +23 -1: (Ljava/lang/Object;JI)V +91 -1: (JLjava/util/function/ToLongBiFunction<-TK;-TV;>;JLjava/util/function/LongBinaryOperator;)J +23 -1: bad spread array length +11 -1: readTimeout +14 -1: toAbsolutePath +8 -1: isFinite +19 -1: currentLoadedClass0 +3 -1: \xef\xbf\xbd +23 -1: (Ljava/nio/file/Path;)I +8 -1: handlers +21 -1: (Ljava/util/List;II)V +89 -1: (Lsun/misc/URLClassPath$Loader;Ljava/lang/String;Ljava/net/URL;Ljava/net/URLConnection;)V +8 -1: OVERFLOW +8 -1: newTable +8 -1: THURSDAY +6 -1: notify +12 -1: initialValue +35 -1: (I)Ljava/util/LinkedList$Node; +18 -1: AsVarargsCollector +26 -1: (Lsun/misc/JavaIOAccess;)V +18 -1: ()Ljava/lang/Void; +23 -1: (Ljava/nio/file/Path;)Z +16 -1: MINUTE_IN_MILLIS +67 -1: (Ljava/lang/Class;[Ljava/lang/Class;Z)Ljava/lang/invoke/MethodType; +18 -1: Ljava/util/Vector; +70 -1: (Ljava/lang/reflect/Constructor;[Ljava/lang/Object;)Ljava/lang/Object; +40 -1: (Ljava/lang/Object;ILjava/lang/Object;)V +25 -1: UnresolvedPermission.java +14 -1: ReduceKeysTask +21 -1: ()[Ljava/lang/Object; +129 -1: Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; +16 -1: ClassLoader.java +46 -1: Ljava/util/Comparators$NaturalOrderComparator; +17 -1: compareAndSwapInt +22 -1: packageDefinitionValid +41 -1: ([Ljava/lang/Object;[Ljava/lang/Object;)Z +162 -1: (Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List; +16 -1: sun.zip.zipFiles +17 -1: java_runtime_name +31 -1: (Ljava/lang/ClassValue$Entry;)V +31 -1: (Ljava/lang/ClassValue$Entry;)Z +30 -1: (TT;)TT; +39 -1: JavaSecurityProtectionDomainAccess.java +24 -1: (I)Ljava/lang/Throwable; +7 -1: FJShort +9 -1: putFloatB +19 -1: checkedNavigableSet +25 -1: java/lang/invoke/Invokers +18 -1: setIfModifiedSince +14 -1: parameterTypes +41 -1: (Ljava/lang/Object;Ljava/lang/Runnable;)V +9 -1: putFloatL +11 -1: getTypeCode +5 -1: (ZZ)I +24 -1: java/lang/ProcessBuilder +9 -1: UNDERFLOW +21 -1: VolatileCallSite.java +24 -1: (C)Ljava/nio/CharBuffer; +55 -1: java/util/concurrent/ConcurrentHashMap$ForEachValueTask +26 -1: (Ljava/lang/String;[CII)[B +18 -1: reduceKeysToDouble +5 -1: (ZZ)Z +23 -1: setCallSiteTargetNormal +3 -1: min +4 -1: ceil +62 -1: (Ljava/lang/String;)Ljava/util/LinkedList; +29 -1: (Ljava/util/AbstractList;II)V +32 -1: Ljava/lang/Class$AnnotationData; +21 -1: createFileExclusively +64 -1: (Ljava/lang/ref/SoftReference;I)Ljava/lang/Class$ReflectionData; +26 -1: java/lang/Short$ShortCache +54 -1: (Ljava/net/URL;Ljava/io/File;)Ljava/net/URLConnection; +29 -1: Lsun/nio/cs/Surrogate$Parser; +58 -1: (Ljava/lang/Class;)Lsun/reflect/annotation/AnnotationType; +8 -1: findForm +53 -1: Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet; +39 -1: (Lsun/misc/Perf;Ljava/nio/ByteBuffer;)V +16 -1: mergePermissions +11 -1: totalMemory +53 -1: java/lang/invoke/DirectMethodHandle$EnsureInitialized +139 -1: Ljava/util/AbstractMap;Ljava/util/concurrent/ConcurrentMap;Ljava/io/Serializable; +29 -1: java/util/HashMap$KeyIterator +20 -1: STACK_TRACE_SENTINEL +5 -1: order +18 -1: java/lang/Runnable +8 -1: GetField +13 -1: Empty command +7 -1: CONTROL +9 -1: blockedOn +12 -1: testAllFlags +11 -1: getInflater +16 -1: threadTerminated +44 -1: (Ljava/lang/ThreadGroup;Ljava/lang/String;)V +20 -1: java.runtime.version +8 -1: peekLast +23 -1: java/util/ArrayList$Itr +21 -1: (Ljava/util/Locale;)V +13 -1: isOptimizable +8 -1: FairSync +7 -1: CHINESE +15 -1: initHelpMessage +30 -1: ()Ljava/util/HashMap$TreeNode; +29 -1: Ljava/lang/SecurityException; +7 -1: charset +35 -1: sun/security/util/SecurityConstants +19 -1: sun.nio.cs.bugLevel +8 2: Foo.java +49 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;)V +12 -1: EntrySetView +37 -1: (Lsun/misc/JavaNetHttpCookieAccess;)V +35 -1: Ljava/util/Hashtable$Entry; +20 -1: NF_constructorMethod +8 -1: getMonth +38 -1: (Ljava/util/Iterator;Ljava/util/Map;)V +14 -1: getIntVolatile +6 -1: [name= +8 -1: oop_size +20 -1: Can't load library: +30 -1: ()Ljava/util/Spliterator; +33 -1: Lsun/reflect/ConstructorAccessor; +61 -1: Ljava/lang/Number;Ljava/lang/Comparable; +15 -1: printVmSettings +33 -1: stack include stack trace +45 -1: ([Ljava/lang/Object;I)Ljava/util/Spliterator; +37 -1: sun/reflect/generics/scope/ClassScope +36 -1: java/io/UnsupportedEncodingException +24 -1: (J)Ljava/nio/LongBuffer; +11 -1: addressSize +15 -1: ByteBuffer.java +62 -1: (Ljava/lang/String;)Lsun/reflect/generics/tree/ClassSignature; +9 -1: (TT;TT;)I +25 -1: java/io/DefaultFileSystem +15 -1: BaseLocale.java +14 -1: BitSetIterator +17 -1: AbstractList.java +57 -1: Ljava/lang/ref/WeakReference;>; +178 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +9 -1: arguments +26 -1: java/util/Locale$LocaleKey +9 -1: setLength +29 -1: sun/nio/cs/ISO_8859_1$Decoder +9 -1: zipfs.jar +24 -1: Ljava/util/zip/ZipCoder; +14 -1: , new state = +93 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;IIIJLjava/util/concurrent/ConcurrentHashMap;)V +39 -1: java/security/PrivilegedExceptionAction +9 -1: dnsns.jar +20 -1: iteratorBinarySearch +14 -1: initializePath +22 -1: DefaultFileSystem.java +17 -1: Ljava/util/Deque; +8 -1: DEFLATED +11 -1: Can't load +9 -1: ArrayList +21 -1: negativeZeroFloatBits +41 -1: (Ljava/lang/String;ILjava/util/Locale;)[C +14 -1: ANSI_X3.4-1968 +39 -1: sun/reflect/annotation/AnnotationType$1 +3 -1: mod +62 -1: Ljava/nio/Buffer;Ljava/lang/Comparable; +29 -1: interpretWithArgumentsTracing +6 -1: getDay +47 -1: sun/reflect/generics/repository/ClassRepository +19 -1: refKindDoesDispatch +20 -1: getAnnotationsByType +14 -1: needsExpansion +18 -1: lastIndexOfSubList +26 -1: JavaUtilZipFileAccess.java +59 -1: (Ljava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder; +12 -1: ptypesOffset +8 -1: hashcode +18 -1: ([Ljava/net/URL;)V +8 -1: iso-ir-6 +7 -1: jzentry +52 -1: only dump output if specified codebase +31 -1: lambda$comparingLong$6043328a$1 +5 -1: MARCH +14 -1: ANSI_X3.4-1986 +14 -1: isMalformed3_2 +7 -1: IS_TYPE +68 -1: Ljava/lang/Object;Ljava/lang/Comparable; +30 -1: protocol doesn't support input +17 -1: getExtClassLoader +14 -1: setProxiedHost +73 -1: ()Ljava/util/Map;>; +16 -1: traceInterpreter +17 -1: (Ljava/net/URL;)I +5 -1: expm1 +18 -1: createInheritedMap +66 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedEntryTask +17 -1: getTimeOfDayValue +15 -1: zeroLengthArray +20 -1: invalid permission: +6 -1: REPORT +15 -1: isNumericString +78 -1: (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter; +6 -1: (TV;)Z +25 -1: Lsun/misc/JavaLangAccess; +29 -1: (I)Ljava/lang/reflect/Method; +17 -1: (Ljava/net/URL;)V +34 -1: ()Ljava/lang/Class$ReflectionData; +50 -1: java.lang.invoke.MethodHandle.TRACE_METHOD_LINKAGE +10 -1: copyWith: +17 -1: (Ljava/net/URL;)Z +32 -1: ()Ljava/util/stream/Stream; +22 -1: quickCheckMemberAccess +29 -1: ()Lsun/net/www/MessageHeader; +19 -1: getAssignedCombiner +8 -1: ([JIIJ)I +17 -1: formatUnsignedInt +68 -1: Ljava/util/AbstractMap; +34 -1: java/nio/ByteBufferAsDoubleBufferB +32 -1: ([I)Ljava/util/stream/IntStream; +9 -1: init_lock +18 -1: must be resolved: +42 -1: ()Ljava/nio/channels/spi/SelectorProvider; +8 -1: ([JIIJ)V +33 -1: IncompatibleClassChangeError.java +34 -1: java/nio/ByteBufferAsDoubleBufferL +31 -1: ()Ljava/util/function/Function; +43 -1: Ljava/lang/Enum; +17 -1: availableCharsets +49 -1: java/util/ArraysParallelSortHelpers$FJChar$Sorter +22 -1: permission= +22 -1: getAnnotatedSuperclass +20 -1: isObjectPublicMethod +15 -1: Attempt to get +10 -1: createLong +14 -1: HASH_INCREMENT +32 -1: sun/management/ManagementFactory +13 -1: separatorChar +15 -1: bad field type +8 -1: november +27 -1: (F)Ljava/lang/StringBuffer; +3 -1: EAT +3 -1: mst +54 -1: (Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method; +18 -1: Ljava/lang/Object; +7 -1: ;:&=+$, +12 -1: Handler.java +7 -1: isDirty +127 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT; +14 -1: asTypeUncached +5 -1: split +200 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;Ljava/lang/reflect/Type;Lsun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget;)Ljava/lang/reflect/AnnotatedType; +47 -1: java.lang.invoke.MethodHandle.TRACE_INTERPRETER +22 -1: sun/invoke/empty/Empty +66 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/Map; +18 -1: jvm_update_version +32 -1: (Ljava/util/Map;)Ljava/util/Map; +14 -1: cacheLoadLimit +8 -1: javaHome +52 -1: (Ljava/lang/reflect/Field;)Ljava/lang/reflect/Field; +20 -1: [[Ljava/lang/Object; +19 -1: isJavaLetterOrDigit +11 -1: loadLibrary +32 -1: java/io/StreamCorruptedException +14 -1: setAccessible0 +27 -1: sun/nio/cs/UTF_16LE$Encoder +60 -1: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream; +8 -1: segments +10 -1: UTF_8.java +3 -1: ECT +5 -1: cp813 +5 -1: cp819 +61 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I +5 -1: Cache +4 -1: sinh +32 -1: java/util/function/ToIntFunction +10 -1: setFactory +24 -1: Illegal mappings count: +16 -1: fileToEncodedURL +38 -1: Ljava/lang/annotation/RetentionPolicy; +27 -1: Ljava/net/SocketPermission; +46 -1: (Ljava/lang/CharSequence;I)[Ljava/lang/String; +11 -1: cardinality +13 -1: getMonthValue +64 -1: (Ljava/lang/invoke/MethodType;II)Ljava/lang/invoke/MethodHandle; +6 -1: ENDTOT +12 -1: getBytesUTF8 +9 -1: cacheLoad +13 -1: packageAccess +14 -1: sharedToString +5 -1: merge +29 -1: parameter type cannot be void +27 -1: makePreparedFieldLambdaForm +40 -1: Couldn't find 3-letter country code for +166 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/lang/ClassLoader;)V +19 -1: (Ljava/util/Map;Z)V +13 -1: setExecutable +17 -1: objectFieldOffset +57 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +128 -1: (Ljava/lang/Class<*>;ZLjava/lang/String;Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Ljava/util/List; +61 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToIntTask +6 -1: asType +25 -1: java/io/ObjectStreamField +15 -1: jvmMajorVersion +124 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/lang/Object; +23 -1: (Ljava/lang/Class<*>;)C +6 -1: andNot +15 -1: getResponseCode +59 -1: (Ljava/lang/StringBuffer;)Ljava/lang/AbstractStringBuilder; +23 -1: (Ljava/lang/Class<*>;)I +7 -1: seeAllp +44 -1: (Ljava/lang/ClassLoader;[Ljava/lang/Class;)V +13 -1: loadFromCache +35 -1: sun/nio/cs/HistoricallyNamedCharset +38 -1: (Ljava/lang/Class;[Ljava/lang/Class;)V +19 -1: INVOKER_METHOD_TYPE +16 -1: putShortVolatile +12 -1: Asia/Karachi +8 -1: cyrillic +12 -1: getISO2Table +23 -1: (Ljava/lang/Class<*>;)V +3 -1: 1.4 +15 -1: LongBuffer.java +6 -1: (IFZ)V +23 -1: (Ljava/lang/Class<*>;)Z +10 -1: initOutput +9 -1: CELLSBUSY +39 -1: java/security/PrivilegedActionException +31 -1: sun/util/calendar/CalendarUtils +202 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;[Ljava/lang/reflect/Type;Lsun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget;)[Ljava/lang/reflect/AnnotatedType; +20 -1: Ljava/lang/Class<*>; +5 -1: cp850 +25 -1: (JI)Ljava/nio/ByteBuffer; +5 -1: cp852 +24 -1: Invalid parameter name " +39 -1: ([CII)Ljava/lang/AbstractStringBuilder; +5 -1: cp855 +11 -1: Deallocator +5 -1: cp857 +5 -1: cp858 +7 -1: ([SI)[S +37 -1: ([C)Ljava/lang/AbstractStringBuilder; +27 -1: java/lang/SecurityException +82 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)V +38 -1: (Ljava/lang/String;)Ljava/lang/String; +7 -1: connect +7 -1: isEmpty +11 -1: replaceNode +19 -1: SuppliedThreadLocal +12 -1: asFixedArity +12 -1: fromIndex = +19 -1: createMemoryManager +9 -1: List.java +8 -1: FEBRUARY +21 -1: UnicodeLittleUnmarked +6 -1: a null +30 -1: ()Ljava/util/Spliterator; +5 -1: cp862 +17 -1: ZoneInfoFile.java +5 -1: cp866 +8 -1: BulkTask +53 -1: java/util/concurrent/locks/AbstractQueuedSynchronizer +20 -1: FileInputStream.java +12 -1: java.vm.info +10 -1: newDecoder +5 -1: (JB)V +8 -1: filePath +17 -1: spreadArrayChecks +44 -1: ([Ljava/lang/Object;Ljava/util/Comparator;)V +33 -1: java/util/Collections$AsLIFOQueue +32 -1: Ljava/util/LinkedList$Node; +5 -1: cp874 +78 -1: (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream; +39 -1: (JLjava/util/function/Consumer<-TK;>;)V +15 -1: appendCodePoint +20 -1: primitiveReturnCount +54 -1: only dump output if specified permission +20 -1: getGenericInterfaces +41 -1: ([Ljava/lang/reflect/AccessibleObject;Z)V +17 -1: nUnstartedThreads +33 -1: (Ljava/lang/invoke/MemberName;Z)V +24 -1: ARRAY_OBJECT_INDEX_SCALE +40 -1: (Ljava/lang/String;ILjava/util/Locale;)I +17 -1: java/io/Flushable +22 -1: newConstructorAccessor +26 -1: sun/misc/JavaUtilJarAccess +6 -1: booted +10 -1: setDoInput +36 -1: (Ljava/lang/Class;)[Ljava/lang/Enum; +19 -1: java/lang/Character +52 -1: ([Ljava/net/URL;Ljava/net/URLStreamHandlerFactory;)V +24 -1: (Ljava/nio/LongBuffer;)I +16 -1: start > length() +28 -1: (I)Ljava/lang/CharacterData; +5 -1: val$c +61 -1: (Ljava/lang/Throwable;Ljava/lang/String;[Ljava/lang/Object;)V +13 -1: resolveOrNull +9 -1: L_ESCAPED +27 -1: MapReduceValuesToDoubleTask +15 -1: getPreparedForm +33 -1: (I)[Ljava/util/WeakHashMap$Entry; +54 -1: ()Ljava/util/stream/Stream<+Ljava/util/zip/ZipEntry;>; +16 -1: bad method type +5 -1: val$s +17 -1: Null charset name +36 -1: java/lang/invoke/LambdaForm$Compiled +24 -1: (Ljava/util/SortedMap;)V +19 -1: java/time/LocalTime +29 -1: not invocable, no method type +21 -1: recalculateWordsInUse +6 -1: val$id +39 -1: sun/security/util/ManifestEntryVerifier +60 -1: ([Ljava/lang/Class<*>;I)Ljava/lang/reflect/Constructor; +45 -1: java/util/ArrayPrefixHelpers$LongCumulateTask +5 -1: OfInt +11 -1: environment +60 -1: ([Ljava/lang/Class<*>;[B)[[Ljava/lang/annotation/Annotation; +7 -1: (JJJZ)V +10 -1: BufferPool +6 -1: isUTF8 +12 -1: threadLocals +35 -1: (Ljava/lang/String;)[Ljava/net/URL; +21 -1: Ljava/nio/LongBuffer; +15 -1: copyConstructor +25 -1: setCallSiteTargetVolatile +15 -1: getNumericValue +26 -1: Ljava/security/CodeSource; +18 -1: Null output stream +14 -1: cloneWithIndex +23 -1: LOCAL_LISTEN_PERMISSION +6 -1: (TT;)I +46 -1: (Ljava/security/PublicKey;Ljava/lang/String;)V +6 -1: setCrc +26 -1: java/io/FilterOutputStream +10 -1: access$000 +10 -1: access$001 +10 -1: access$002 +6 -1: (TT;)V +78 -1: ([TU;IILjava/lang/Class<+[TT;>;)[TT; +41 -1: java/util/concurrent/atomic/AtomicInteger +8 -1: renameTo +40 -1: (Ljava/lang/Class<*>;)Ljava/lang/Object; +17 -1: getRawAnnotations +29 -1: java/lang/VirtualMachineError +37 -1: java/lang/management/MemoryPoolMXBean +25 -1: (II)Ljava/util/List; +6 -1: utf_16 +23 -1: (Ljava/lang/String;[B)V +19 -1: MIN_ARRAY_SORT_GRAN +25 -1: array length is not legal +45 -1: java/util/concurrent/locks/ReentrantLock$Sync +36 -1: Ljava/security/AccessControlContext; +48 -1: sun/reflect/generics/repository/MethodRepository +24 -1: MethodHandleStatics.java +24 -1: addThreadDumpForMonitors +64 -1: (Ljava/util/Set;)Ljava/util/Set; +58 -1: (Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/Object;)Z +37 -1: (III)Lsun/util/calendar/CalendarDate; +9 -1: createURI +15 -1: unreserveMemory +52 -1: (Lsun/reflect/MethodInfo;)Ljava/lang/reflect/Method; +66 -1: (Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +51 -1: (Ljava/lang/reflect/Constructor;)Ljava/lang/String; +23 -1: inheritableThreadLocals +63 -1: ()Ljava/util/Map; +16 -1: setContentLength +16 -1: LOWERCASE_LETTER +4 -1: size +25 -1: java.launcher.opt.hotspot +19 -1: buildAnnotatedTypes +26 -1: JAVAFX_LAUNCHER_CLASS_NAME +11 -1: getAliasMap +19 -1: CheckedNavigableSet +15 -1: getAbsolutePath +11 -1: doubleValue +6 -1: utf_32 +22 -1: IMPLEMENTATION_VERSION +3 -1: ne1 +11 -1: contentType +8 -1: canWrite +11 -1: Object.java +14 -1: America/Denver +8 -1: fileName +13 -1: allPermDomain +27 -1: ()Ljava/util/Iterator; +31 -1: (Lsun/reflect/MethodAccessor;)V +11 -1: asTypeCache +13 -1: lineSeparator +9 -1: JarLoader +15 -1: replacementNode +18 -1: getContentEncoding +12 -1: invoke_LLL_L +22 -1: ()Ljava/util/TimeZone; +17 -1: Reference Handler +33 -1: java/lang/invoke/MethodHandleImpl +47 -1: ()Ljava/util/concurrent/ConcurrentHashMap$Node; +12 -1: invoke_LLL_V +8 -1: form << +23 -1: (Ljava/lang/Object;JJ)J +15 -1: isHighSurrogate +31 -1: (Ljava/util/Collection<+TV;>;)Z +36 -1: ([Ljava/util/HashMap$Node;)V +23 -1: (Ljava/lang/Object;JJ)V +12 -1: utf_32be_bom +40 -1: sun/util/calendar/LocalGregorianCalendar +27 -1: [Ljava/security/CodeSigner; +15 -1: afterNodeAccess +13 -1: nextThreadNum +18 -1: INTERNED_ARGUMENTS +11 -1: getMillisOf +18 -1: offsetByCodePoints +11 -1: writeObject +48 -1: (Ljava/util/Locale$Category;Ljava/util/Locale;)V +3 -1: nfe +41 -1: (Ljava/util/Properties;Ljava/io/Reader;)V +50 -1: (Ljava/util/concurrent/CountedCompleter;[C[CIIII)V +15 -1: implFlushBuffer +33 -1: (I)[Ljava/lang/invoke/MemberName; +12 -1: Unicode.java +17 -1: DMH.invokeVirtual +5 -1: setup +51 -1: (Ljava/util/Collection;[Ljava/lang/reflect/Field;)V +3 -1: EST +7 -1: TREEBIN +7 -1: getFile +10 -1: isLeapYear +18 -1: LinkedHashIterator +14 -1: DISPLAY_SCRIPT +25 -1: privateGetDeclaredMethods +68 -1: (Ljava/util/function/Function;Ljava/lang/Object;Ljava/lang/Object;)I +22 -1: ()Ljava/util/Iterator; +21 -1: sun/management/Sensor +15 -1: getAvailableIDs +51 -1: Lsun/util/PreHashedMap; +8 -1: elot_928 +6 -1: LATIN0 +45 -1: ([Ljava/lang/Object;II[Ljava/lang/Object;II)V +10 -1: [Unlocked] +15 -1: internArguments +6 -1: LATIN9 +33 -1: (II)Ljava/lang/invoke/MethodType; +12 -1: Version.java +17 -1: setConnectTimeout +75 -1: (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; +13 -1: highSurrogate +12 -1: Africa/Cairo +21 -1: synchronizedSortedMap +21 -1: in java.library.path +45 -1: sun/reflect/generics/tree/FormalTypeParameter +24 -1: UncaughtExceptionHandler +14 -1: previousOrSame +24 -1: java/security/Permission +9 -1: x-ISCII91 +5 -1: L_HEX +35 -1: java/lang/invoke/DirectMethodHandle +35 -1: java/util/ArrayDeque$DeqSpliterator +14 -1: java/util/List +11 -1: toLowerCase +24 -1: java/nio/charset/Charset +10 -1: MIN_NORMAL +110 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +13 -1: regionMatches +17 -1: newMethodAccessor +26 -1: (Ljava/net/InetAddress;B)V +68 -1: (Ljava/util/zip/ZipFile;Ljava/lang/String;J)Ljava/util/zip/ZipEntry; +22 -1: ()Ljava/io/FileSystem; +19 -1: primitiveSimpleName +5 -1: MOVED +9 -1: STATE_RED +13 -1: linkToSpecial +19 -1: AnnotationType.java +20 -1: (II)Ljava/util/List; +252 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToDoubleTask;Ljava/util/function/ToDoubleBiFunction;DLjava/util/function/DoubleBinaryOperator;)V +12 -1: callSiteForm +22 -1: isSiblingBindingBefore +62 -1: ([TT;IITT;Ljava/util/Comparator<-TT;>;)I +15 -1: buildEmptyNames +11 -1: Thread.java +30 -1: Ljava/lang/ref/Reference; +35 -1: sun/reflect/MethodAccessorGenerator +152 -1: (Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector; +5 -1: total +242 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToLongTask;Ljava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)V +27 -1: javax/security/auth/Subject +43 -1: JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER +17 -1: getSignerCertPath +15 -1: registerNatives +21 -1: sun/reflect/FieldInfo +54 -1: (Ljava/nio/charset/Charset;Lsun/nio/cs/ISO_8859_1$1;)V +17 -1: unwrapWithNoPrims +17 -1: instanceof Long: +20 -1: hasRealParameterData +23 -1: ()Ljava/time/LocalTime; +14 -1: getAnnotations +8 -1: optimize +7 -1: setChar +11 -1: OFFSET_MASK +4 -1: TYPE +177 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/BiFunction;Ljava/util/concurrent/atomic/AtomicReference;)V +18 -1: removeShutdownHook +27 -1: ()Ljava/security/Principal; +29 -1: JAVAFX_APPLICATION_CLASS_NAME +6 -1: digits +37 -1: [Ljava/lang/reflect/Constructor; +45 -1: ()Ljava/lang/Thread$UncaughtExceptionHandler; +7 -1: tryLock +19 -1: java/net/Proxy$Type +21 -1: setJavaSecurityAccess +13 -1: tieBreakOrder +3 -1: no +16 -1: Australia/Sydney +13 -1: DAY_IN_MILLIS +19 -1: ()Ljava/nio/Buffer; +12 -1: Integer.java +14 -1: isBmpCodePoint +6 -1: daemon +23 -1: Lsun/misc/JavaIOAccess; +106 -1: (JLjava/util/function/BiFunction<-TK;-TV;+TU;>;Ljava/util/function/Consumer<-TU;>;)V +10 -1: getFloatAt +15 -1: content/unknown +52 -1: ()Ljava/util/Enumeration<+Ljava/util/zip/ZipEntry;>; +123 -1: (Ljava/lang/Class<*>;Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z +4 -1: nsme +12 -1: prefixLength +9 -1: flagsMods +95 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MemberName; +62 -1: (Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/LambdaForm; +16 -1: Illegal mode: 0x +24 -1: java/io/FileOutputStream +41 -1: [Pp][Ee][Rr][Mm][Ii][Ss][Ss][Ii][Oo][Nn]= +24 -1: java/security/CodeSource +16 -1: DUMP_CLASS_FILES +25 -1: ([C)Ljava/nio/CharBuffer; +12 -1: bindArgument +50 -1: Ljava/lang/ref/FinalReference; +21 -1: unmodifiableSortedMap +10 -1: jarHandler +73 -1: (Ljava/lang/Class;[Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method; +67 -1: ()Ljava/util/Map; +15 -1: threadSeqNumber +18 -1: AutoCloseable.java +9 -1: holdsLock +25 -1: (Ljava/lang/Object;JJJJ)V +7 -1: (IJII)I +15 -1: copyToLongArray +58 -1: Ljava/util/HashMap; +84 -1: (Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; +32 -1: getExecutableTypeAnnotationBytes +17 -1: streamHandlerLock +35 -1: java/lang/IndexOutOfBoundsException +15 -1: moveRootToFront +28 -1: ()Ljava/nio/file/FileSystem; +14 -1: content-length +61 -1: (Ljava/lang/invoke/CallSite;Ljava/lang/invoke/MethodHandle;)V +7 -1: csASCII +18 -1: staticIsConsistent +21 -1: sharedToGenericString +8 -1: linkLast +21 -1: isUnicodeExtensionKey +7 -1: readInt +7 -1: compile +32 -1: ()Ljava/lang/reflect/Executable; +4 -1: Big5 +20 -1: Ljava/util/Set; +18 -1: ExpiringCache.java +44 -1: (Ljava/lang/String;[BII)Ljava/lang/Class<*>; +18 -1: LinkedHashMap.java +32 -1: Ljava/lang/UnsatisfiedLinkError; +13 -1: parameterType +28 -1: (ID)Ljava/lang/StringBuffer; +15 -1: synchronizedSet +9 -1: implClose +6 -1: member +14 -1: MH_INVOKE_MODS +21 -1: forOutputStreamWriter +37 -1: Lsun/misc/JavaIOFileDescriptorAccess; +28 -1: java/lang/ProcessEnvironment +17 -1: setNormalizedYear +14 -1: isMalformed4_2 +14 -1: isMalformed4_3 +38 -1: (Ljava/lang/Object;)Ljava/lang/String; +16 -1: getJavaAWTAccess +12 -1: isPrivileged +30 -1: java/util/Collections$EmptyMap +17 -1: LinkedKeyIterator +7 -1: vmcount +27 -1: java/lang/ref/WeakReference +5 -1: march +13 -1: addOldMapping +58 -1: (Ljava/lang/Object;Ljava/lang/Runnable;)Lsun/misc/Cleaner; +56 -1: (ILjava/lang/String;)[Ljava/lang/invoke/LambdaForm$Name; +65 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToLongTask +55 -1: (Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object; +17 -1: getEnclosingClass +35 -1: (I)Lsun/util/calendar/BaseCalendar; +13 -1: binarySearch0 +25 -1: ([J)Ljava/nio/LongBuffer; +19 -1: java/util/Map$Entry +22 -1: java/util/HashMap$Node +26 -1: sun/reflect/MethodAccessor +8 -1: LASTYEAR +7 -1: disable +36 -1: sun/launcher/LauncherHelper$FXHelper +6 -1: toPath +10 -1: shortValue +6 -1: remove +59 -1: ([Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process; +55 -1: java/util/concurrent/ConcurrentHashMap$ValueSpliterator +64 -1: (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/Collection; +15 -1: asPrimitiveType +16 -1: PrintStream.java +10 -1: image/jpeg +22 -1: specificToStringHeader +7 -1: class " +38 -1: java/util/Collections$CheckedSortedMap +19 -1: SUPPRESSED_SENTINEL +16 -1: getEnumConstants +54 -1: (ILjava/lang/CharSequence;II)Ljava/lang/StringBuilder; +36 -1: Ljava/lang/Class; +13 -1: toThreadState +38 -1: (Ljava/lang/Class;)Ljava/lang/Package; +24 -1: (C)Ljava/lang/Character; +19 -1: UNTREEIFY_THRESHOLD +4 -1: NCPU +23 -1: ()Ljava/lang/Exception; +42 -1: (ITK;TV;Ljava/util/HashMap$Node;)V +15 -1: nothingToVerify +15 -1: setInitialValue +15 -1: getTimeInMillis +12 -1: getDoubleAt0 +18 -1: parameterTypeCache +86 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey; +49 -1: java/util/concurrent/ConcurrentHashMap$ValuesView +13 -1: +7 -1: exitVM. +34 -1: Ljava/lang/ClassNotFoundException; +68 -1: (Ljava/util/Map;Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; +28 -1: getCalendarDateFromFixedDate +28 -1: UnsafeFieldAccessorImpl.java +27 -1: java/lang/RuntimePermission +74 -1: Ljava/lang/Object;Ljava/lang/Comparable; +62 -1: ()Ljava/util/Iterator; +13 -1: LanguageRange +239 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesToIntTask;Ljava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)V +37 -1: DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE +62 -1: (Ljava/lang/invoke/MethodType;II)Ljava/lang/invoke/MethodType; +16 -1: DMH.invokeStatic +11 -1: (TK;TV;)TV; +7 -1: ([FI)[F +14 -1: newPerfCounter +35 -1: ([JI)Ljava/util/Spliterator$OfLong; +30 -1: java/util/AbstractList$ListItr +5 -1: cp912 +5 -1: cp914 +45 -1: (Ljava/io/BufferedWriter;Ljava/lang/String;)V +6 -1: LOCNAM +8 -1: launcher +5 -1: cp915 +14 -1: standardString +26 -1: ()Ljava/lang/Thread$State; +10 -1: L_ALPHANUM +8 -1: (C[CII)I +9 -1: SEPTEMBER +20 -1: java/text/DateFormat +38 -1: Ljava/lang/CloneNotSupportedException; +5 -1: cp920 +23 -1: getConstructorSignature +16 -1: ReferenceHandler +19 -1: America/Puerto_Rico +5 -1: cp923 +10 -1: typeString +30 -1: Self-suppression not permitted +25 -1: (Ljava/io/OutputStream;)V +9 -1: implReset +12 -1: fullAddCount +34 -1: java/lang/invoke/LambdaForm$Hidden +25 -1: ()Lsun/misc/JavaIOAccess; +9 -1: Math.java +9 -1: getAndSet +7 -1: failure +14 -1: LINE_SEPARATOR +6 -1: parent +30 -1: java/lang/BootstrapMethodError +8 -1: indexMap +9 -1: ALL_KINDS +23 -1: desiredAssertionStatus0 +39 -1: (ILjava/lang/Object;)Ljava/lang/Object; +22 -1: RuntimePermission.java +21 -1: getContextClassLoader +14 -1: VARARGS_INVOKE +8 -1: zoneinfo +130 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;ILjava/lang/invoke/DirectMethodHandle$1;)V +18 -1: java/lang/Readable +11 -1: containsAll +11 -1: newPosition +57 -1: sun/reflect/InstantiationExceptionConstructorAccessorImpl +13 -1: REVERSE_ORDER +29 -1: Required array size too large +6 -1: sunday +44 -1: ()Ljava/util/Set; +10 -1: toIntExact +33 -1: ([BIILjava/nio/charset/Charset;)V +14 -1: indexOfSubList +15 -1: tryAcquireNanos +31 -1: java/lang/InvalidClassException +22 -1: SecureClassLoader.java +12 -1: proxiedHosts +7 -1: ([CII)I +11 -1: toHexString +30 -1: sun/util/calendar/ZoneInfoFile +31 -1: Ljava/util/jar/Attributes$Name; +10 -1: L_USERINFO +25 -1: (IB)Ljava/nio/ByteBuffer; +11 -1: parseDouble +7 -1: ([CII)V +13 -1: Asia/Shanghai +5 -1: [...] +57 -1: ([Ljava/lang/Class;[B)[[Ljava/lang/annotation/Annotation; +19 -1: java/nio/LongBuffer +15 -1: getCertificates +9 -1: comparing +83 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;IILjava/lang/String;[B)V +43 -1: Ljava/util/concurrent/atomic/AtomicInteger; +23 -1: toFieldDescriptorString +20 -1: Lsun/misc/MetaIndex; +37 -1: java/util/Collections$UnmodifiableSet +5 -1: (JC)V +37 -1: nanosecond timeout value out of range +26 -1: AbstractStringBuilder.java +43 -1: java/lang/invoke/DirectMethodHandle$Special +49 -1: ([Ljava/nio/file/LinkOption;)Ljava/nio/file/Path; +15 -1: currentPosition +14 -1: java/net/Proxy +13 -1: asConstructor +8 -1: userInfo +14 -1: parseClassPath +15 -1: legacyMergeSort +34 -1: java/security/UnresolvedPermission +97 -1: Lsun/util/locale/LocaleObjectCache; +9 -1: freeEntry +19 -1: delimiterCodePoints +34 -1: Should be non-empty if initialized +23 -1: (I)Ljava/lang/Class<*>; +11 -1: Reader.java +26 -1: checkClassLoaderPermission +27 -1: java/nio/DirectShortBufferS +95 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction; +27 -1: java/nio/DirectShortBufferU +20 -1: ()[Ljava/lang/Class; +56 -1: ()[Ljava/util/concurrent/ConcurrentHashMap$Node; +19 -1: sun/nio/cs/UTF_16BE +24 -1: java/util/AbstractList$1 +10 -1: ([CIIIII)V +60 -1: Ljava/lang/Object;Ljava/lang/Comparable; +37 -1: (Ljava/lang/invoke/LambdaForm$Name;)S +9 -1: putDouble +52 -1: ([Ljava/security/CodeSource;)Ljava/util/Enumeration; +37 -1: (Ljava/lang/invoke/LambdaForm$Name;)Z +22 -1: ()[Ljava/lang/Package; +41 -1: java/lang/CharSequence$1CodePointIterator +13 -1: auditSubclass +24 -1: Ljava/util/jar/JarEntry; +20 -1: findMethodHandleType +15 -1: MAX_BUFFER_SIZE +19 -1: FilePermission.java +18 -1: WrappedPrintStream +36 -1: (D)Ljava/lang/AbstractStringBuilder; +11 -1: unfinalized +10 -1: getFileURL +37 -1: (Ljava/io/FileFilter;)[Ljava/io/File; +54 -1: (Ljava/nio/ByteBuffer;I)Ljava/nio/charset/CoderResult; +7 -1: ([ZI)[Z +64 -1: (Ljava/security/CodeSource;)Ljava/security/PermissionCollection; +6 -1: PUBLIC +83 -1: (Ljava/util/jar/JarFile;Ljava/net/URL;Ljava/lang/String;)Ljava/security/CodeSource; +17 -1: lockInterruptibly +67 -1: ([Ljava/util/Hashtable$Entry;Ljava/lang/Object;Ljava/lang/Object;)V +42 -1: java/util/ArraysParallelSortHelpers$FJChar +21 -1: defaultCharBufferSize +14 -1: unalignedKnown +23 -1: ()Ljava/net/Proxy$Type; +4 -1: TZDB +14 -1: CharacterCache +13 -1: lengthOfMonth +13 -1: hasExtensions +23 -1: Prefix string too short +15 -1: Executable.java +10 -1: forEachKey +6 -1: getEra +13 -1: appendEncoded +21 -1: java/util/AbstractMap +10 -1: access$100 +10 -1: access$102 +30 -1: javafx.application.Application +46 -1: (Ljava/lang/Thread$UncaughtExceptionHandler;)V +43 -1: Ljava/lang/invoke/LambdaForm$NamedFunction; +101 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)Ljava/lang/reflect/Field; +9 -1: WILD_CHAR +21 -1: SynchronizedSortedSet +28 -1: (Ljava/util/Collection<*>;)Z +29 -1: (I[C)Ljava/lang/StringBuffer; +65 -1: (Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method; +7 -1: putByte +6 -1: H_MARK +49 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/Object; +98 -1: ([Ljava/lang/ClassValue$Entry<*>;ILjava/lang/ClassValue$Entry<*>;Z)Ljava/lang/ClassValue$Entry<*>; +23 -1: array is not of length +52 -1: (Ljava/util/List;TT;TT;)Z +41 -1: Ljava/util/Collections$EmptyListIterator; +8 -1: +11 -1: updateCheck +29 -1: getBootClassPathEntryForClass +27 -1: sun/nio/cs/US_ASCII$Encoder +10 -1: bindCaller +18 -1: Ljava/util/BitSet; +10 -1: checkRange +77 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;Ljava/lang/Void;)V +7 -1: Classes +6 -1: store0 +23 -1: java/lang/Thread$Caches +25 -1: Ljava/lang/CharacterData; +7 -1: (JI[C)V +49 -1: (Ljava/util/LinkedList;Ljava/util/LinkedList$1;)V +16 -1: getGcInfoBuilder +12 -1: counterCells +14 -1: memoryLimitSet +7 -1: , nojit +9 -1: sharpsMap +7 -1: october +13 -1: isProxiedHost +9 -1: rawOffset +18 -1: toJavaFormatString +19 -1: sun.boot.class.path +60 -1: (ILjava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder; +11 -1: spliterator +13 -1: contentLength +18 -1: unixTimeToFileTime +31 -1: Lsun/reflect/LangReflectAccess; +16 -1: while Java has +79 -1: (JLjava/util/function/ToIntBiFunction;ILjava/util/function/IntBinaryOperator;)I +12 -1: timeEndOfDay +17 -1: getCustomTimeZone +25 -1: Ljava/lang/ref/Reference; +20 -1: ()Ljava/util/Locale; +64 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;Z)V +13 -1: MAX_JVM_ARITY +72 -1: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/invoke/MethodType; +11 -1: AsLIFOQueue +84 -1: (Ljava/util/List;Ljava/lang/Object;)Ljava/util/List; +12 -1: mappingCount +29 -1: (Ljava/io/FileOutputStream;)V +50 -1: (Ljava/util/List<-TT;>;TT;)V +23 -1: Category cannot be NULL +10 -1: normalized +5 -1: CLASS +28 -1: (IZ)Ljava/lang/StringBuffer; +18 -1: java/lang/System$1 +18 -1: java/lang/System$2 +9 -1: getResult +44 -1: ()Ljava/util/Collection; +8 -1: isNative +59 -1: Ljava/lang/Number;Ljava/lang/Comparable; +24 -1: [Ljava/lang/ThreadGroup; +24 -1: (B)Ljava/nio/ByteBuffer; +4 -1: READ +44 -1: (Ljava/io/FilePermission;)Ljava/lang/String; +93 -1: Ljava/util/Collections$SynchronizedCollection;Ljava/util/Set; +12 -1: compileClass +12 -1: isProxyClass +20 -1: isSystemDomainLoader +74 -1: (Ljava/util/List;Ljava/util/Comparator<-TT;>;)V +7 -1: getMask +72 -1: (Ljava/lang/ClassLoader;Ljava/lang/SecurityManager;Ljava/lang/String;I)V +20 -1: removeLastOccurrence +64 -1: (Ljava/lang/reflect/Field;)Ljava/lang/invoke/DirectMethodHandle; +57 -1: ()Ljava/util/Map;>; +11 -1: parkBlocker +40 -1: (Lsun/misc/JarIndex;Ljava/lang/String;)V +33 -1: [Ljava/security/ProtectionDomain; +14 -1: setContentType +14 -1: getEnumeration +18 -1: ProtectionDomain +76 -1: (Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar$Date; +16 -1: setRequestMethod +52 -1: (Ljava/util/List;Ljava/lang/Object;)Ljava/util/List; +32 -1: Lsun/util/calendar/BaseCalendar; +52 -1: (Ljava/net/URL;Ljava/lang/String;)Ljava/lang/String; +5 -1: .:@[] +7 -1: addLast +21 -1: AnnotatedElement.java +10 -1: defaultVal +16 -1: getCanonicalPath +17 -1: protection_domain +9 -1: strictfp +19 -1: sun/nio/cs/UTF_16LE +9 -1: readBytes +18 -1: removeStaleEntries +46 -1: java/util/Collections$UnmodifiableNavigableSet +5 -1: cpath +14 -1: COPY_THRESHOLD +8 -1: permsMap +8 -1: japanese +33 -1: java/nio/charset/StandardCharsets +47 -1: Lsun/reflect/DelegatingConstructorAccessorImpl; +19 -1: NF_checkGenericType +40 -1: java/util/Collections$UnmodifiableList$1 +4 -1: TERM +48 -1: The following can be used with stack and domain: +27 -1: ([BII)Ljava/nio/ByteBuffer; +40 -1: Ljava/util/Vector;>; +5 -1: digit +7 -1: isFinal +39 -1: (Ljava/lang/String;Ljava/lang/String;)I +26 -1: memberDeclaringClassOrNull +10 -1: ([CI[BII)I +38 -1: (Ljava/lang/Class;I)Ljava/lang/Object; +15 -1: isValidProtocol +17 -1: (this Collection) +11 -1: getTreeNode +16 -1: ThreadLocal.java +23 -1: java/nio/HeapLongBuffer +39 -1: (Ljava/lang/String;Ljava/lang/String;)V +12 -1: getNextEntry +39 -1: (Ljava/lang/String;Ljava/lang/String;)Z +28 -1: (C)Lsun/invoke/util/Wrapper; +9 -1: readFloat +21 -1: overrideFieldAccessor +16 -1: fillInStackTrace +16 -1: getDeclaredField +5 -1: deflt +8 -1: nextChar +10 -1: primCounts +22 -1: getAnnotatedInterfaces +26 -1: ()Ljava/util/zip/Inflater; +73 -1: (JLjava/util/function/BiFunction<-TK;-TV;+TU;>;)TU; +16 -1: traceMethodCalls +10 -1: sun.nio.cs +7 -1: marshal +9 -1: ftypeKind +77 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Class;)Ljava/lang/invoke/MemberName; +11 -1: sun/misc/VM +14 -1: GuardWithCatch +40 -1: (Ljava/lang/Object;)Ljava/util/Iterator; +13 -1: subtractExact +42 -1: (Ljava/lang/Object;ILjava/lang/Object;II)V +10 -1: isInfinite +18 -1: sun.util.calendar. +14 -1: java/lang/Math +16 -1: java/lang/String +10 -1: encodePath +14 -1: compactAndTrim +11 -1: getVariants +4 -1: from +47 -1: (Ljava/lang/ThreadLocal<*>;Ljava/lang/Object;)V +35 -1: serializeAgentPropertiesToByteArray +16 -1: computeIfPresent +9 -1: EMPTY_MAP +28 -1: java/lang/InstantiationError +68 -1: (Ljava/util/Comparator;Ljava/util/Comparator;)Ljava/util/Comparator; +14 -1: getDisplayName +14 -1: limitedContext +23 -1: usagetracker.properties +52 -1: java/util/concurrent/locks/ReentrantLock$NonfairSync +7 -1: public +17 -1: srcBegin > srcEnd +48 -1: (ILjava/util/List;)Ljava/lang/invoke/MethodType; +21 -1: java/lang/ThreadDeath +9 -1: gregorian +111 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/HashMap$TreeNode; +52 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;III)V +12 -1: generateFile +20 -1: appendParameterTypes +22 -1: sun/misc/FileURLMapper +13 -1: defaultDomain +25 -1: (I)Ljava/time/ZoneOffset; +21 -1: getBooleanAttributes0 +39 -1: (Ljava/lang/String;)Lsun/misc/Resource; +43 -1: Ljava/lang/Thread$UncaughtExceptionHandler; +23 -1: getTypeAnnotationBytes0 +8 -1: ELOT_928 +32 -1: sun/nio/cs/FastCharsetProvider$1 +34 -1: Ljava/nio/BufferOverflowException; +14 -1: AppClassLoader +10 -1: protected +12 -1: isAnnotation +16 -1: PerfCounter.java +51 -1: Ljava/util/Map; +160 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +11 -1: setLeapYear +16 -1: parseContextSpec +16 -1: setFieldAccessor +8 -1: writeInt +16 -1: java/lang/Number +33 -1: java/util/AbstractMap$SimpleEntry +9 -1: nextTable +8 -1: getQuery +14 -1: putOrderedLong +93 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +52 -1: (Ljava/lang/String;)Lsun/reflect/generics/tree/Tree; +85 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V +9 -1: singleton +9 -1: destroyed +15 -1: iso_8859-2:1987 +12 -1: comparingInt +29 -1: [Ljava/lang/OutOfMemoryError; +39 -1: (Ljava/lang/String;Ljava/lang/Object;)V +27 -1: ([Ljava/util/Enumeration;)V +36 -1: Ljava/nio/charset/CodingErrorAction; +16 -1: getCanonicalName +41 -1: (Ljava/nio/LongBuffer;)Ljava/util/BitSet; +15 -1: DISPLAY_COUNTRY +32 -1: getFunctionalInterfaceMethodName +66 -1: (Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V +24 -1: getUnresolvedPermissions +66 -1: ([Ljava/lang/ClassValue$Entry<*>;I)Ljava/lang/ClassValue$Entry<*>; +41 -1: ()Lsun/reflect/annotation/AnnotationType; +7 -1: afIndex +7 -1: csascii +20 -1: ()Ljava/util/Vector; +16 -1: EntrySpliterator +53 -1: (Ljava/lang/Throwable;I)Ljava/lang/StackTraceElement; +81 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle; +20 -1: classAssertionStatus +7 -1: EXECUTE +21 -1: ()Ljava/lang/Runtime; +6 -1: cesu-8 +7 -1: offset +23 -1: Ljava/lang/SafeVarargs; +34 -1: (Ljava/util/LinkedHashMap$Entry;)V +8 -1: entryFor +8 -1: getCache +46 -1: (Ljava/lang/Object;I)Ljava/lang/reflect/Field; +4 -1: skip +8 -1: (II[CI)V +4 -1: vart +12 -1: InnerClasses +68 -1: (Ljava/util/Map;Ljava/lang/Class;[Ljava/lang/String;)Ljava/util/Map; +19 -1: currentClassLoader0 +34 -1: getDefaultUncaughtExceptionHandler +11 -1: String.java +117 -1: (Ljava/lang/ThreadLocal<*>;ILjava/lang/ThreadLocal$ThreadLocalMap$Entry;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; +7 -1: january +31 -1: (ILjava/lang/String;IIIIIIIII)V +24 -1: Lsun/misc/JavaAWTAccess; +5 -1: .path +15 -1: [Ljava/io/File; +11 -1: Writer.java +8 -1: , Size: +159 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/Function;Ljava/util/function/Consumer;)V +32 -1: java/lang/invoke/LambdaForm$Name +51 -1: (Ljava/util/ArrayList;Ljava/util/AbstractList;III)V +7 -1: getZone +14 -1: JIS_X0212-1990 +21 -1: (Ljava/util/Set<*>;)Z +149 -1: (Lsun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter;Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object; +21 -1: Illegal Load factor: +35 -1: ()Ljava/lang/invoke/MethodTypeForm; +22 -1: ([Z)Ljava/lang/String; +7 -1: setName +48 -1: (TT;Ljava/lang/String;)TT; +9 -1: INTERFACE +22 -1: ARRAY_CHAR_INDEX_SCALE +19 -1: java/nio/ByteBuffer +23 -1: Ljava/io/ExpiringCache; +7 -1: streams +44 -1: java/lang/invoke/DirectMethodHandle$Accessor +36 -1: ([Ljava/security/ProtectionDomain;)V +16 -1: afterNodeRemoval +9 -1: prevIndex +49 -1: java/util/concurrent/ConcurrentHashMap$KeySetView +22 -1: getEnumConstantsShared +17 -1: java/lang/Integer +12 -1: getRawOffset +36 -1: ()Ljava/nio/file/attribute/FileTime; +7 -1: offsets +10 -1: ] throw => +3 -1: [[B +10 -1: hostsEqual +18 -1: compareComparables +35 -1: sun/reflect/ConstructorAccessorImpl +8 -1: december +36 -1: Invalid binary time-zone data: TZDB: +24 -1: synchronizedNavigableMap +72 -1: sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter +19 -1: parseCustomTimeZone +88 -1: (Ljava/lang/Class<*>;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; +9 -1: findClass +6 -1: OBJECT +3 -1: GBK +110 -1: (JLjava/util/function/ToLongFunction;>;JLjava/util/function/LongBinaryOperator;)J +6 -1: UTF_16 +17 -1: +13 -1: lookupCharset +28 -1: ConstructorAccessorImpl.java +62 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask +30 -1: Ljava/lang/ClassCastException; +56 -1: ()Ljava/util/Spliterator;>; +11 -1: invokerType +23 -1: java/lang/StringBuilder +12 -1: deleteCharAt +11 -1: CR_OVERFLOW +14 -1: toExternalForm +3 -1: out +34 -1: Ljava/net/URLStreamHandlerFactory; +15 -1: encodeArrayLoop +30 -1: ()Ljava/util/Enumeration; +27 -1: java/io/SyncFailedException +10 -1: checkedSet +16 -1: checkedSortedSet +22 -1: java/util/zip/ZipEntry +43 -1: java/util/LinkedHashMap$LinkedValueIterator +22 -1: UnmodifiableCollection +32 -1: java/nio/ByteBufferAsCharBufferB +11 -1: blockerLock +27 -1: checkExtensionsDependencies +11 -1: fromIndex: +32 -1: java/nio/ByteBufferAsCharBufferL +6 -1: UTF_32 +30 -1: java/util/Hashtable$Enumerator +92 -1: (Ljava/util/Map<+TK;+TV;>;)Ljava/util/Map; +4 -1: tail +5 -1: (BB)C +16 -1: isValidSignature +9 -1: addMillis +9 -1: peekFirst +86 -1: (Ljava/util/Set;Ljava/lang/Class;)Ljava/util/Set; +5 -1: (BB)I +15 -1: jvmMicroVersion +28 -1: [Ljava/util/Hashtable$Entry; +15 -1: iso_8859-5:1988 +14 -1: HOUR_IN_MILLIS +67 -1: (Ljava/util/PrimitiveIterator$OfInt;I)Ljava/util/Spliterator$OfInt; +5 -1: (BB)S +21 -1: UnmodifiableSortedMap +79 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap;)V +56 -1: Ljava/util/Stack; +5 -1: (BB)Z +10 -1: treeifyBin +8 -1: isOpaque +27 -1: java.launcher.ergo.message1 +27 -1: java.launcher.ergo.message2 +101 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Cloneable;Ljava/lang/Comparable; +31 -1: (Ljava/io/ObjectOutputStream;)V +3 -1: GET +13 -1: matchLocation +13 -1: WrappedMember +63 -1: NoSuchMethodException:\n could not find proper constructor for +14 -1: gssloginconfig +70 -1: (Ljava/util/LinkedList$Node;TE;Ljava/util/LinkedList$Node;)V +57 -1: (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; +11 -1: toByteArray +49 -1: java/util/ArraysParallelSortHelpers$FJByte$Sorter +13 -1: no protocol: +940 -1: aaaarababkaeaveafafrakakaamamhanargararaasasmavavaayaymazazebabakbebelbgbulbhbihbibisbmbambnbenbobodbrbrebsboscacatcechechchacocoscrcrecscescuchucvchvcycymdadandedeudvdivdzdzoeeeweelellenengeoepoesspaetesteueusfafasfffulfifinfjfijfofaofrfrafyfrygaglegdglaglglggngrngugujgvglvhahauhehebhihinhohmohrhrvhthathuhunhyhyehzheriainaidindieileigiboiiiiiikipkinindioidoisislititaiuikuiwhebjajpnjiyidjvjavkakatkgkonkikikkjkuakkkazklkalkmkhmknkankokorkrkaukskaskukurkvkomkwcorkykirlalatlbltzlgluglilimlnlinlolaoltlitlulublvlavmgmlgmhmahmimrimkmkdmlmalmnmonmomolmrmarmsmsamtmltmymyananaunbnobndndenenepngndonlnldnnnnononornrnblnvnavnynyaocociojojiomormororiososspapanpipliplpolpspusptporququermrohrnrunroronrurusrwkinsasanscsrdsdsndsesmesgsagsisinskslkslslvsmsmosnsnasosomsqsqisrsrpsssswstsotsusunsvsweswswatatamteteltgtgkththatitirtktuktltgltntsntotontrturtstsotttattwtwitytahuguigukukrururduzuzbvevenvivievovolwawlnwowolxhxhoyiyidyoyorzazhazhzhozuzul +42 -1: java/util/LinkedHashMap$LinkedHashIterator +39 -1: java/util/ArrayDeque$DescendingIterator +15 -1: MODIFIER_LETTER +21 -1: (Lsun/misc/Cleaner;)Z +12 -1: PACKAGE_NAME +14 -1: getMappedValue +10 -1: interrupt0 +8 -1: LF_LIMIT +17 -1: getDeclaringClass +42 -1: (ZILjava/lang/String;)Ljava/lang/Class<*>; +57 -1: (Ljava/lang/management/ThreadInfo;[Ljava/lang/Object;[I)V +15 -1: java/nio/Bits$1 +61 -1: (Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class; +28 -1: java/lang/ref/ReferenceQueue +33 -1: [Ljava/security/cert/Certificate; +44 -1: (Ljava/util/Hashtable;I)Ljava/util/Iterator; +24 -1: java/security/CodeSigner +19 -1: Non-positive length +24 -1: [Ljava/util/Enumeration; +38 -1: ()Ljava/security/PermissionCollection; +16 -1: checkGenericType +56 -1: java/util/concurrent/ConcurrentHashMap$ReduceEntriesTask +7 -1: getYear +5 -1: atime +19 -1: Ljava/util/HashMap; +125 -1: (JLjava/util/function/Function;+TU;>;Ljava/util/function/Consumer<-TU;>;)V +22 -1: STOP_THREAD_PERMISSION +46 -1: (Ljava/util/Enumeration;)Ljava/util/ArrayList; +16 -1: getPathSeparator +10 -1: getMembers +8 -1: getIntAt +26 -1: java/io/File$TempDirectory +48 -1: java/lang/invoke/MethodHandleImpl$GuardWithCatch +25 -1: CaseInsensitiveComparator +8 -1: pollLast +21 -1: GET_POLICY_PERMISSION +23 -1: uninitialized call site +75 -1: (Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator; +9 -1: directory +51 -1: (JLjava/util/function/BiFunction<-TV;-TV;+TV;>;)TV; +41 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;)V +42 -1: (Ljava/lang/Throwable;Ljava/lang/String;)V +26 -1: (FLjava/lang/Appendable;)V +5 -1: stop0 +9 -1: substring +64 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V +5 -1: (JD)V +9 -1: getShortB +10 -1: nextOrSame +24 -1: [ interpretWithArguments +6 -1: GB2312 +32 -1: java/nio/BufferOverflowException +23 -1: sun/nio/cs/ArrayEncoder +4 -1: tanh +9 -1: getShortL +55 -1: (JLjava/util/function/BiFunction;)Ljava/util/Map$Entry; +10 -1: getMessage +12 -1: findTreeNode +38 -1: DIRECTIONALITY_COMMON_NUMBER_SEPARATOR +23 -1: [Ljava/lang/Comparable; +17 -1: getCallSiteTarget +55 -1: (Ljava/nio/ByteBuffer;II)Ljava/nio/charset/CoderResult; +19 -1: java/util/ArrayList +17 -1: java/io/DataInput +13 -1: getPrincipals +52 -1: (TE;)Ljava/util/Iterator; +44 -1: sun/reflect/generics/tree/ClassTypeSignature +6 -1: loaded +20 -1: ()Ljava/lang/Object; +36 -1: Ljava/util/concurrent/ConcurrentMap; +13 -1: classValueMap +33 -1: java/lang/SystemClassLoaderAction +6 -1: loader +31 -1: java/lang/annotation/Annotation +5 -1: colon +11 -1: Vector.java +24 -1: CharacterDataLatin1.java +12 -1: setUseCaches +22 -1: getTypeAnnotationBytes +9 -1: readShort +24 -1: longPrimitiveReturnCount +5 -1: get16 +34 -1: setDefaultUncaughtExceptionHandler +17 -1: cachedInputStream +29 -1: java/util/LinkedHashMap$Entry +17 -1: java/lang/Boolean +50 -1: ()[Lsun/reflect/generics/tree/FormalTypeParameter; +14 -1: AnnotationData +21 -1: Ljava/net/Proxy$Type; +13 -1: invokeVirtual +14 -1: Parameter.java +21 -1: getDayOfWeekDateAfter +92 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +56 -1: (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +46 -1: sun/util/locale/provider/LocaleProviderAdapter +29 -1: Ljava/lang/StackTraceElement; +47 -1: (TK;Ljava/util/function/Function<-TK;+TV;>;)TV; +32 -1: enableContextClassLoaderOverride +68 -1: (Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder; +51 -1: Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +9 -1: addAndGet +5 -1: store +7 -1: ([JII)V +15 -1: signatureReturn +18 -1: NF_reinvokerTarget +22 -1: ()Ljava/nio/file/Path; +25 -1: (C)Ljava/lang/Appendable; +7 -1: expires +18 -1: initializeInvokers +19 -1: application/java-vm +13 -1: stopOrSuspend +13 -1: rawOffsetDiff +6 -1: (JJZ)V +9 -1: findValue +5 -1: get32 +10 -1: asSubclass +6 -1: forJRE +3 -1: GMT +7 -1: delete0 +69 -1: ([Ljava/security/cert/Certificate;[Ljava/security/cert/Certificate;)Z +75 -1: (Ljava/util/LinkedList$Node;Ljava/lang/Object;Ljava/util/LinkedList$Node;)V +6 -1: setEra +24 -1: ()Ljava/util/Comparator; +10 -1: access$200 +10 -1: access$202 +20 -1: retrieveDisplayNames +3 -1: pae +24 -1: java/lang/Byte$ByteCache +7 -1: VM.java +9 -1: TRANSIENT +6 -1: setErr +16 -1: jdkUpdateVersion +10 -1: isResolved +35 -1: sun/misc/JavaIOFileDescriptorAccess +4 -1: char +13 -1: Readable.java +19 -1: UnixFileSystem.java +43 -1: (Ljava/lang/ThreadLocal;)Ljava/lang/Object; +40 -1: (Ljava/lang/String;[Ljava/lang/String;)V +7 -1: profile +11 -1: , version: +25 -1: PermissionCollection.java +13 -1: setNormalized +10 -1: access$210 +24 -1: (Ljava/lang/String;IJZ)J +19 -1: isAnnotationPresent +85 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; +19 -1: DMH.invokeInterface +157 -1: Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/Collection;Ljava/io/Serializable; +94 -1: Ljava/util/Collections$UnmodifiableCollection;Ljava/util/List; +41 -1: java/lang/StringIndexOutOfBoundsException +29 -1: java/net/UnknownHostException +11 -1: (BBBBBBBB)J +4 -1: iioe +12 -1: (TK;TV;Z)TV; +5 -1: ERROR +31 -1: (Ljava/io/File;Ljava/io/File;)I +32 -1: [Ljava/lang/invoke/MethodHandle; +27 -1: lambda$comparing$77a9974f$1 +13 -1: toLowerCaseEx +61 -1: (Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MemberName;)V +66 -1: (ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/HashMap$TreeNode; +43 -1: java/util/concurrent/ConcurrentHashMap$Node +23 -1: latestUserDefinedLoader +24 -1: buildAnnotatedSuperclass +19 -1: compareToIgnoreCase +31 -1: (Ljava/io/File;Ljava/io/File;)Z +40 -1: (I[C)[Ljava/lang/invoke/LambdaForm$Name; +16 -1: ROTATE_THRESHOLD +18 -1: getClassAtIfLoaded +37 -1: java/lang/IllegalThreadStateException +5 -1: get64 +12 -1: writeReplace +14 -1: DAYS_PER_CYCLE +4 -1: _get +6 -1: nChars +26 -1: ()Ljava/net/SocketAddress; +27 -1: setUncaughtExceptionHandler +6 -1: jzfile +42 -1: All subclasses should override this method +3 2: Foo +56 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +136 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;[Ljava/security/Permission;)TT; +3 -1: pdt +44 -1: sun/util/locale/LocaleObjectCache$CacheEntry +20 -1: java/util/Comparator +9 -1: suspended +11 -1: removeEntry +10 -1: SPACE_FREE +12 -1: processQueue +9 -1: java.home +5 -1: valid +23 -1: printEnclosedStackTrace +4 -1: push +5 -1: guard +23 -1: javaNetHttpCookieAccess +36 -1: (Ljava/security/cert/Certificate;)[B +9 -1: isWrapped +12 -1: CharIterator +26 -1: sun.io.useCanonPrefixCache +42 -1: (Lsun/misc/Cleaner;Ljava/lang/Throwable;)V +7 -1: prepare +8 -1: parseInt +13 -1: Invokers.java +63 -1: (Ljava/net/URLClassLoader;)Ljava/security/AccessControlContext; +18 -1: defaultWriteObject +5 -1: class +15 -1: EnclosingMethod +23 -1: ([BI)Ljava/lang/String; +16 -1: rangeCheckForAdd +11 -1: getTimeImpl +15 -1: arrayIndexScale +5 -1: scalb +5 -1: scale +45 -1: (Ljava/lang/String;J)Ljava/util/zip/ZipEntry; +8 -1: ([FIIF)I +16 -1: runAllFinalizers +27 -1: ()Lsun/net/ProgressMonitor; +15 -1: MemberName.java +27 -1: [Ljava/lang/reflect/Member; +6 -1: length +14 -1: genericInvoker +8 -1: ([FIIF)V +34 -1: Ljava/nio/file/attribute/FileTime; +6 -1: number +70 -1: (Ljava/lang/StringBuilder;Ljava/lang/String;)Ljava/lang/StringBuilder; +12 -1: printLocales +38 -1: java/lang/invoke/MethodHandleStatics$1 +8 -1: private +20 -1: invalid actions mask +10 -1: not found +13 -1: parseClassSig +22 -1: getAllAvailableLocales +175 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/Function;Ljava/util/concurrent/atomic/AtomicReference;)V +8 -1: ([BII)[B +35 -1: (Ljava/util/HashMap$Node;)V +132 -1: (Ljava/lang/Thread;ILjava/lang/Object;Ljava/lang/Thread;JJJJ[Ljava/lang/StackTraceElement;[Ljava/lang/Object;[I[Ljava/lang/Object;)V +8 -1: ([BII)[C +20 -1: DECIMAL_DIGIT_NUMBER +40 -1: (Ljava/lang/String;[Ljava/lang/Object;)Z +7 -1: ([CCI)I +64 -1: (TV;)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +8 -1: aliasMap +8 -1: checkfpx +44 -1: java/util/Comparators$NaturalOrderComparator +48 -1: (Ljava/lang/ClassLoader;)Ljava/lang/ClassLoader; +12 -1: Name is null +10 -1: invoke_L_L +8 -1: URL.java +51 -1: (JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime; +25 -1: Lsun/invoke/util/Wrapper; +19 -1: LauncherHelper.java +10 -1: invoke_L_V +5 -1: index +30 -1: sun/security/x509/X509CertImpl +8 -1: addClass +46 -1: (I)Ljava/lang/invoke/LambdaForm$NamedFunction; +20 -1: refKindIsConstructor +10 -1: getFieldAt +5 -1: log10 +13 -1: GetPerfAction +15 -1: isLetterOrDigit +27 -1: hasCheckedSpecialAttributes +25 -1: MapReduceEntriesToIntTask +17 -1: probeHomeLocation +9 -1: image/png +19 -1: checkSpreadArgument +12 -1: LinkedKeySet +13 -1: removeMapping +39 -1: sun/security/util/SecurityConstants$AWT +9 -1: MAX_RADIX +28 -1: (F)Ljava/lang/StringBuilder; +11 -1: ([C[B[I[I)Z +36 -1: (Ljava/lang/Class;)Ljava/lang/Class; +32 -1: java/lang/invoke/MagicLambdaImpl +6 -1: monday +16 -1: closeClassLoader +41 -1: (Ljava/util/concurrent/locks/Condition;)I +8 -1: reversed +27 -1: sun/util/calendar/Gregorian +49 -1: (Lsun/nio/cs/FastCharsetProvider;)Ljava/util/Map; +42 -1: (Ljava/lang/String;Ljava/lang/Throwable;)V +18 -1: java/util/Calendar +8 -1: vmtarget +17 -1: TREEIFY_THRESHOLD +41 -1: (Ljava/util/concurrent/locks/Condition;)Z +9 -1: deadChild +8 -1: EntrySet +5 -1: log1p +58 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/util/HashMap;)V +9 -1: pageCount +14 -1: slotToArgTable +24 -1: toMethodDescriptorString +25 -1: ([B)Ljava/nio/ByteBuffer; +21 -1: twoToTheDoubleScaleUp +32 -1: sun/misc/URLClassPath$FileLoader +40 -1: (Ljava/util/List;Z)V +6 -1: cache1 +6 -1: cache2 +27 -1: Ljava/net/URLStreamHandler; +20 -1: Detect premature EOF +94 -1: (Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)Lsun/nio/cs/StreamEncoder; +12 -1: NF_checkBase +20 -1: (Ljava/nio/Buffer;)V +45 -1: Ljava/util/Vector; +4 -1: Sync +12 -1: H_UNRESERVED +32 -1: (Ljava/util/Map;)Ljava/util/Set; +32 -1: (Ljava/util/Map$Entry;)Z +25 -1: java/util/Locale$Category +8 -1: receiver +9 -1: MAX_VALUE +4 -1: .RSA +25 -1: Ljava/net/URLClassLoader; +15 -1: Terminator.java +26 -1: (Ljava/lang/String;TV;)TV; +4 -1: null +76 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V +9 -1: checkCast +39 -1: ()Ljava/lang/AssertionStatusDirectives; +15 -1: declaredMethods +5 -1: clazz +21 -1: Retention policy: +20 -1: spreadArgElementType +9 -1: WORD_MASK +27 -1: ([IILjava/io/InputStream;)I +11 -1: getMethodAt +31 -1: (Ljava/net/URL;Ljava/net/URL;)Z +13 -1: getLocaleName +14 -1: isEnumConstant +41 -1: (Ljava/lang/String;)Ljava/nio/CharBuffer; +16 -1: newInvokeSpecial +26 -1: (Ljava/nio/ByteBuffer;IS)V +22 -1: sun/misc/JavaNioAccess +184 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/security/AccessControlContext; +96 -1: (Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +5 -1: ([S)I +30 -1: java/security/AccessController +37 -1: sun/misc/Launcher$SharedArchiveLoader +4 -1: pack +5 -1: ([S)V +51 -1: failure before throwing exception, dump stack +10 -1: dayOfMonth +6 -1: CENSIG +28 -1: java/util/function/Predicate +26 -1: Malformed \\uxxxx encoding. +9 -1: initIndex +11 -1: invoke_LL_L +23 -1: ConcurrentWeakInternSet +14 -1: java/lang/Void +42 -1: java/lang/String$CaseInsensitiveComparator +38 -1: Ljava/lang/invoke/LambdaForm$Compiled; +34 -1: java/util/Collections$SingletonSet +142 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/invoke/CallSite; +35 -1: too many bootstrap method arguments +17 -1: maxDelimCodePoint +13 -1: previousIndex +3 -1: pop +6 -1: CENSIZ +7 -1: ([Z[Z)Z +11 -1: invoke_LL_V +3 -1: pos +33 -1: java/nio/file/WatchEvent$Modifier +3 -1: pow +12 -1: nextClearBit +15 -1: Dictionary.java +27 -1: sun/reflect/CallerSensitive +13 -1: signatureType +10 -1: dstSavings +13 -1: UnicodeLittle +16 -1: America/New_York +82 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale; +25 -1: referenceKindIsConsistent +62 -1: Ljava/nio/Buffer;Ljava/lang/Comparable; +4 -1: INTS +11 -1: LOAD_FACTOR +40 -1: sun/reflect/DelegatingMethodAccessorImpl +16 -1: accumulateAndGet +21 -1: (B)Ljava/lang/String; +6 -1: UNSAFE +13 -1: resolveOrFail +21 -1: MapReduceMappingsTask +5 -1: arity +77 -1: (Ljava/io/FileDescriptor;ZZLjava/lang/Object;)Ljava/nio/channels/FileChannel; +5 -1: value +61 -1: Ljava/util/concurrent/ConcurrentHashMap$EntrySetView; +6 -1: forJar +52 -1: Ljava/lang/ref/Reference; +21 -1: CREATE_ACC_PERMISSION +28 -1: sun/misc/NativeSignalHandler +11 -1: defineClass +5 -1: match +93 -1: (Ljava/util/zip/ZipFile;Ljava/util/zip/ZipFile$ZipFileInputStream;Ljava/util/zip/Inflater;I)V +11 -1: Double.java +30 -1: America/Argentina/Buenos_Aires +8 -1: previous +37 -1: (Ljava/io/Writer;Ljava/lang/String;)V +9 -1: Synthetic +18 -1: isVMAnonymousClass +62 -1: ([Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I +22 -1: (JI)Ljava/lang/String; +49 -1: (Ljava/lang/CharSequence;II)Ljava/io/PrintStream; +52 -1: ([Ljava/lang/Thread;)[[Ljava/lang/StackTraceElement; +12 -1: setDayOfWeek +11 -1: getManifest +30 -1: java/util/Locale$FilteringMode +54 -1: (Ljava/lang/String;)Lsun/util/calendar/CalendarSystem; +12 -1: nextHashCode +19 -1: ()Ljava/io/Console; +42 -1: AccessControlContext invoking the Combiner +19 -1: shouldBeInitialized +17 -1: invocationCounter +21 -1: IMPLEMENTATION_VENDOR +7 -1: chararr +60 -1: (Ljava/lang/String;)Ljava/util/Iterator; +11 -1: asCollector +52 -1: (ILjava/lang/CharSequence;)Ljava/lang/StringBuilder; +9 -1: exception +22 -1: newInstanceCallerCache +20 -1: nativeLibraryContext +24 -1: MODIFY_THREAD_PERMISSION +4 -1: WRAP +19 -1: Method name is null +32 -1: sun/invoke/util/ValueConversions +7 -1: APP_TAG +24 -1: (Ljava/util/Hashtable;)I +23 -1: METHOD_FORMAL_PARAMETER +18 -1: inflationThreshold +24 -1: java/io/DeleteOnExitHook +3 -1: pst +13 -1: BITS_PER_WORD +25 -1: getConstructorAnnotations +17 -1: CheckedCollection +24 -1: (Ljava/util/Hashtable;)V +7 -1: inClass +5 -1: getFD +8 -1: readLong +19 -1: aliases_ISO_8859_13 +19 -1: invokeWithArguments +19 -1: aliases_ISO_8859_15 +42 -1: ()Ljava/util/concurrent/ConcurrentHashMap; +8 -1: expandTo +23 -1: java/text/MessageFormat +8 -1: classID0 +11 -1: replaceWith +21 -1: Invalid port number : +65 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)V +19 -1: isGregorianLeapYear +16 -1: asSpreaderChecks +11 -1: withInitial +10 -1: X-UTF-32BE +57 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +12 -1: wrong type: +57 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z +17 -1: sun/misc/Resource +14 -1: getReadTimeout +8 -1: safeTrim +38 -1: DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING +14 -1: isElementIndex +23 -1: FilterOutputStream.java +6 -1: (IJI)V +3 -1: put +57 -1: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; +43 -1: Expecting an absolute path of the library: +8 -1: checkRef +53 -1: (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; +74 -1: (Ljava/lang/Class<*>;[Ljava/lang/reflect/Field;)[Ljava/lang/reflect/Field; +11 -1: user.script +10 -1: H_ALPHANUM +17 -1: getCalendarSystem +48 -1: Ljava/util/concurrent/ConcurrentHashMap; +17 -1: EnsureInitialized +82 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;Ljava/lang/Object;)V +243 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceMappingsToIntTask;Ljava/util/function/ToIntBiFunction;ILjava/util/function/IntBinaryOperator;)V +26 -1: getAnnotatedExceptionTypes +10 -1: validIndex +6 -1: ([CC)I +8 -1: overflow +5 -1: getID +93 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)Lsun/nio/cs/StreamDecoder; +22 -1: java/util/StringJoiner +9 -1: putFields +18 -1: USE_SHARED_ARCHIVE +8 -1: thursday +8 -1: nanoTime +59 -1: (Lsun/reflect/annotation/AnnotationType;Ljava/lang/Class;)V +69 -1: (Ljava/nio/charset/CoderResult$Cache;I)Ljava/nio/charset/CoderResult; +36 -1: (J)Ljava/lang/AbstractStringBuilder; +16 -1: java/util/Arrays +6 -1: ([CC)V +25 -1: registerAsParallelCapable +4 -1: slot +24 -1: java/net/URLConnection$1 +6 -1: koi8-r +19 -1: should be of type +46 -1: java/util/concurrent/ConcurrentHashMap$TreeBin +6 -1: koi8-u +34 -1: data type scale not a power of two +53 -1: Ljava/util/Map; +21 -1: AccessibleObject.java +53 -1: ()Ljava/util/NavigableSet; +88 -1: (Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List; +17 -1: getAnnotationType +36 -1: Ljava/util/HashMap$TreeNode; +14 -1: declaringClass +10 -1: read,write +5 -1: getId +10 -1: BIG_ENDIAN +20 -1: PolymorphicSignature +16 -1: comparingByValue +67 -1: (ILjava/lang/invoke/MethodType;)[Ljava/lang/invoke/LambdaForm$Name; +19 -1: java/util/Hashtable +20 -1: getUnicodeLocaleKeys +27 -1: ()Ljava/util/LinkedHashMap; +51 -1: (Ljava/lang/CharSequence;)Ljava/lang/StringBuilder; +30 -1: java/util/HashMap$HashIterator +22 -1: (IZ)Ljava/lang/String; +5 -1: yield +34 -1: java/lang/Throwable$SentinelHolder +62 -1: (Ljava/lang/invoke/MethodType;ZI)Ljava/lang/invoke/LambdaForm; +5 -1: (FD)F +17 -1: java/util/SubList +24 -1: (Ljava/io/PrintStream;)V +7 -1: LF.zero +25 -1: java/util/StringTokenizer +15 -1: ISO8859_15_FDIS +11 -1: powerOfTwoD +11 -1: powerOfTwoF +22 -1: WeakHashMapSpliterator +15 -1: refKindIsGetter +12 -1: setRawOffset +11 -1: setProperty +23 -1: (Ljava/lang/Object;IB)V +45 -1: (ILjava/lang/Object;)Ljava/util/HashMap$Node; +13 -1: applyAsDouble +83 -1: (Lsun/misc/URLClassPath$FileLoader;Ljava/lang/String;Ljava/net/URL;Ljava/io/File;)V +19 -1: MethodAccessor.java +9 -1: WALL_TIME +7 -1: INVOKES +13 -1: java.ext.dirs +9 -1: getStatic +56 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String; +42 -1: (Ljava/util/function/UnaryOperator;)V +27 -1: java/lang/Class$MethodArray +10 -1: H_USERINFO +19 -1: PostVMInitHook.java +7 -1: running +32 -1: Warning: passing argument as-is +13 -1: EntryIterator +22 -1: NF_checkSpreadArgument +46 -1: ([DLjava/util/function/IntToDoubleFunction;I)V +7 -1: . +13 -1: mappingLength +20 -1: implOnMalformedInput +53 -1: (Ljava/lang/String;ILjava/lang/reflect/Executable;I)V +26 -1: cannot make variable arity +18 -1: SharedSecrets.java +27 -1: (Ljava/io/InputStream;IZ)[B +9 -1: Asia/Gaza +55 -1: Ljava/util/Map;>; +5 -1: NTLM +19 -1: defaultCenturyStart +18 -1: addElapsedTimeFrom +38 -1: (Lsun/misc/Cleaner;)Lsun/misc/Cleaner; +44 -1: (Ljava/io/OutputStream;ZLjava/lang/String;)V +22 -1: (Ljava/lang/Object;B)V +6 1: [LBar; +7 -1: classes +23 -1: java/net/URLClassLoader +17 -1: sun/misc/Launcher +163 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)[Ljava/util/concurrent/ConcurrentHashMap$Node; +12 -1: updateAndGet +90 -1: (Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V +9 -1: increment +27 -1: (Ljava/lang/CharSequence;)V +16 -1: Ljava/io/Reader; +27 -1: java/io/PushbackInputStream +6 -1: (JFZ)V +17 -1: getAppClassLoader +35 -1: sun/reflect/generics/tree/Signature +9 -1: elementAt +27 -1: (Ljava/lang/CharSequence;)Z +10 -1: readDouble +37 -1: ([B)Ljava/nio/charset/CharsetEncoder; +46 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V +4 -1: park +36 -1: java/lang/NegativeArraySizeException +49 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Z +121 -1: ;>(Ljava/util/function/Function<-TT;+TU;>;)Ljava/util/Comparator; +101 -1: (Ljava/lang/annotation/Annotation;Ljava/lang/annotation/Annotation;)Ljava/lang/annotation/Annotation; +12 -1: .$|()[{^?*+\\ +6 -1: manRef +3 -1: 437 +15 -1: newStringUnsafe +15 -1: constantPoolOop +10 -1: getPackage +24 -1: FastCharsetProvider.java +18 -1: getAnnotationBytes +187 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class<*>;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;[Ljava/security/Permission;)Ljava/security/AccessControlContext; +33 -1: Cannot suppress a null exception. +27 -1: sun/nio/cs/StandardCharsets +33 -1: (BB)Ljava/lang/invoke/MemberName; +61 -1: ([Ljava/lang/ClassValue$Entry;ILjava/lang/ClassValue$Entry;)I +10 -1: X-UTF-32LE +5 -1: toMap +89 -1: (Ljava/lang/Class<*>;Ljava/util/List;>;)Ljava/lang/invoke/MethodType; +46 -1: ([Ljava/lang/Object;IILjava/util/Comparator;)V +66 -1: ([Ljava/lang/reflect/Constructor;)[Ljava/lang/reflect/Constructor; +22 -1: ()Ljava/nio/ByteOrder; +20 -1: isMethodHandleInvoke +25 -1: sun/net/www/URLConnection +89 -1: Ljava/util/concurrent/ConcurrentHashMap; +49 -1: (Ljava/nio/charset/Charset;FFLjava/lang/String;)V +17 -1: MIN_LOW_SURROGATE +23 -1: AbstractCollection.java +19 -1: (Ljava/util/Date;)I +19 -1: (Ljava/util/Date;)J +12 -1: cldrdata.jar +4 -1: path +77 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;IILjava/lang/String;[B)V +6 -1: MS1250 +37 -1: setJavaSecurityProtectionDomainAccess +11 -1: isDelimiter +5 -1: char0 +6 -1: MS1251 +5 -1: char1 +16 -1: getJavaNetAccess +6 -1: MS1252 +6 -1: MS1253 +6 -1: MS1254 +51 -1: (Ljava/lang/Class;)Ljava/security/ProtectionDomain; +6 -1: MS1257 +93 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class<*>; +10 -1: access$300 +5 -1: (JZ)C +19 -1: (Ljava/util/Date;)Z +5 -1: (JZ)D +26 -1: java/lang/Character$Subset +10 -1: access$302 +5 -1: (JZ)F +9 -1: emptyList +5 -1: (JZ)I +5 -1: (JZ)J +23 -1: (Ljava/lang/Runnable;)V +27 -1: java/lang/invoke/MemberName +29 -1: ()Ljava/util/Comparator; +18 -1: retrieveDirectives +7 -1: ([F[F)Z +40 -1: (Lsun/misc/URLClassPath;Ljava/net/URL;)V +5 -1: (JZ)S +40 -1: (Ljava/util/function/IntUnaryOperator;)I +5 -1: (JZ)V +16 -1: parseAnnotations +21 -1: (C)Ljava/lang/String; +73 -1: (TK;TV;)Ljava/util/Map; +15 -1: charset encoder +17 -1: getDomainCombiner +9 -1: EmptyList +15 -1: java.vm.version +19 -1: getResourceAsStream +94 -1: Ljava/lang/ThreadLocal;>; +26 -1: java/util/HashMap$TreeNode +22 -1: (Ljava/util/HashMap;)V +23 -1: sun/misc/URLClassPath$1 +65 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;)Ljava/net/URLClassLoader; +20 -1: Hashtable Enumerator +23 -1: sun/misc/URLClassPath$2 +10 -1: Array.java +8 -1: FT_LIMIT +24 -1: ()[Ljava/lang/Throwable; +23 -1: sun/misc/URLClassPath$3 +14 -1: java/io/Writer +5 -1: chars +76 -1: ()Ljava/util/NavigableMap; +6 -1: final +5 -1: error +34 -1: java/lang/ApplicationShutdownHooks +29 -1: Lsun/launcher/LauncherHelper; +30 -1: ()Ljava/util/Enumeration; +47 -1: (Ljava/util/List;)Ljava/lang/invoke/MethodType; +9 -1: scriptKey +5 -1: BYTES +12 -1: getException +69 -1: (Ljava/lang/Class<*>;Ljava/lang/Object;)Ljava/lang/invoke/MethodType; +14 -1: Illegal Load: +189 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$ReduceValuesTask;Ljava/util/function/BiFunction;)V +66 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToLongTask +29 -1: getJavaIOFileDescriptorAccess +11 -1: toCodePoint +15 -1: setCreationTime +18 -1: NULL_CAUSE_MESSAGE +8 -1: elements +32 -1: ()Ljava/nio/charset/CoderResult; +8 -1: utf-32be +7 -1: addDate +4 -1: Cast +23 -1: sun/misc/JavaLangAccess +8 -1: 0{1,12}$ +27 -1: (Ljava/util/ArrayList;III)V +11 -1: lastIndexOf +14 -1: getCodeSources +53 -1: (Lsun/util/calendar/CalendarDate;Ljava/lang/String;)V +17 -1: cachedConstructor +7 -1: forName +74 -1: (Ljava/util/function/ToLongFunction;Ljava/lang/Object;Ljava/lang/Object;)I +47 -1: (Ljava/lang/Object;)Lsun/reflect/FieldAccessor; +8 -1: getDebug +18 -1: currentClassLoader +49 -1: Illegal leading minus sign on unsigned string %s. +20 -1: toLowerCaseCharArray +38 -1: java/util/concurrent/ConcurrentHashMap +8 -1: isHidden +92 -1: (Ljava/lang/Thread;ILjava/lang/Object;Ljava/lang/Thread;JJJJ[Ljava/lang/StackTraceElement;)V +29 -1: java/lang/ArithmeticException +26 -1: (Ljava/io/OutputStream;Z)V +66 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/RuntimeException; +38 -1: Ljava/util/Map; +16 -1: getFindClassTime +34 -1: ([J)Ljava/util/Spliterator$OfLong; +24 -1: UnmodifiableNavigableSet +32 -1: java/lang/ClassNotFoundException +3 -1: \\n +6 -1: SEALED +14 -1: Flushable.java +3 -1: HST +24 -1: (Ljava/lang/Object;JII)Z +13 -1: toSecondOfDay +16 -1: thenComparingInt +26 -1: java/lang/NoSuchFieldError +18 -1: java/util/Locale$1 +25 -1: [Ljava/util/HashMap$Node; +75 -1: ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +11 -1: x-mswin-936 +32 -1: java/lang/management/MemoryUsage +25 -1: (JS)Ljava/nio/ByteBuffer; +25 -1: java/lang/ref/Finalizer$1 +25 -1: java/lang/ref/Finalizer$2 +21 -1: (Ljava/util/BitSet;)V +25 -1: java/lang/ref/Finalizer$3 +83 -1: (Ljava/util/Collection<+TT;>;Ljava/util/Comparator<-TT;>;)TT; +24 -1: sun/nio/ch/Interruptible +21 -1: (Ljava/util/BitSet;)Z +72 -1: ([Ljava/security/ProtectionDomain;Ljava/security/AccessControlContext;)V +54 -1: Ljava/util/AbstractSet;>; +34 -1: getConstructorParameterAnnotations +4 -1: name +92 -1: ;>Ljava/lang/Object;Ljava/lang/Comparable;Ljava/io/Serializable; +11 -1: FORM_OFFSET +13 -1: getAliasTable +5 -1: (DD)D +23 -1: reflectionFactoryAccess +221 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceValuesTask;Ljava/util/function/Function;Ljava/util/function/BiFunction;)V +59 -1: (Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path; +6 -1: DELETE +10 -1: returnType +5 -1: (DD)I +51 -1: ()Lsun/reflect/generics/repository/FieldRepository; +8 -1: delegate +12 -1: OTHER_LETTER +18 -1: getTransitionIndex +3 -1: HUP +10 -1: (IIII[CI)V +10 -1: ISO_8859-1 +17 -1: ArrayEncoder.java +10 -1: ISO_8859-2 +34 -1: java/lang/reflect/AnnotatedElement +10 -1: ISO_8859-4 +27 -1: sun/nio/cs/UTF_16LE$Decoder +10 -1: ISO_8859-5 +13 -1: prefetchWrite +9 -1: getFloatB +10 -1: ISO_8859-7 +37 -1: (I)Ljava/lang/invoke/LambdaForm$Name; +10 -1: ISO_8859-9 +10 -1: getActions +11 -1: negateExact +10 -1: isAbstract +9 -1: getFloatL +29 -1: java/lang/ClassValue$Identity +14 -1: java/io/Reader +8 -1: getOwner +24 -1: java/lang/AssertionError +17 -1: MethodHandle.java +19 -1: classRedefinedCount +10 -1: cachedYear +15 -1: getAndIncrement +26 -1: java.protocol.handler.pkgs +14 -1: cleanSomeSlots +27 -1: java/util/Spliterator$OfInt +31 -1: getRawExecutableTypeAnnotations +20 -1: ensureInitialization +7 -1: os.arch +57 -1: (Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V +21 -1: UNSAFE_COPY_THRESHOLD +20 -1: toUnsignedBigInteger +82 -1: (Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection; +15 -1: Reflection.java +12 -1: decryptBlock +3 -1: \\r +8 -1: newArray +8 -1: Category +36 -1: java/lang/reflect/GenericDeclaration +22 -1: (Ljava/lang/String;Z)V +8 -1: suspend0 +10 -1: getSigners +22 -1: (Ljava/lang/String;Z)Z +31 -1: Unable to create temporary file +117 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; +17 -1: channelsAvailable +9 -1: Date.java +13 -1: toIndex < 0: +18 -1: mark > position: ( +11 -1: loadConvert +4 -1: july +42 -1: (Ljava/math/BigInteger;)Ljava/lang/String; +6 -1: enable +47 -1: (Ljava/util/zip/ZipEntry;)Ljava/io/InputStream; +6 -1: unpack +13 -1: setDayOfMonth +19 -1: name can't be empty +16 -1: getExtensionKeys +15 -1: getAndDecrement +36 -1: Ljava/lang/ClassValue$ClassValueMap; +38 -1: (Ljava/lang/Class;Ljava/lang/String;)V +11 -1: csISOlatin0 +9 -1: retention +23 -1: system protocol handler +9 -1: nullsLast +15 -1: refKindIsStatic +3 -1: (\n +48 -1: sun/launcher/LauncherHelper$ResourceBundleHolder +29 -1: ()Ljava/util/LinkedList; +11 -1: csISOlatin9 +31 -1: ([CII)Ljava/lang/StringBuilder; +29 -1: (II)Ljava/lang/StringBuilder; +7 -1: pdcache +4 -1: june +12 -1: ;/?:@&=+$,[] +141 -1: ([Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;)[Ljava/lang/invoke/LambdaForm$Name; +32 -1: ()[Ljava/util/WeakHashMap$Entry; +110 -1: (Ljava/lang/Class<*>;ILjava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; +81 -1: (Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z +46 -1: String value %s exceeds range of unsigned int. +6 -1: close0 +6 -1: (JDZ)V +160 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/reflect/GenericDeclaration;Ljava/lang/reflect/Type;Ljava/lang/reflect/AnnotatedElement; +12 -1: LinkedValues +24 -1: java/nio/HeapCharBufferR +23 -1: jvmVersionInfoAvailable +16 -1: classLoaderDepth +33 -1: (Lsun/nio/ch/DirectBuffer;IIIII)V +32 -1: java/nio/file/attribute/FileTime +50 -1: java/util/concurrent/ConcurrentHashMap$CounterCell +73 -1: (Lsun/misc/URLClassPath$JarLoader;Lsun/misc/JarIndex;)Lsun/misc/JarIndex; +60 -1: (Ljava/net/URL;Ljava/lang/String;)Ljava/security/CodeSource; +25 -1: Ljava/lang/ref/Finalizer; +12 -1: utf-32be-bom +40 -1: (Ljava/lang/String;ILjava/lang/Object;)V +9 -1: THROW_UCS +23 -1: java/util/AbstractMap$1 +23 -1: java/util/AbstractMap$2 +10 -1: x-utf-32be +4 -1: (S)B +60 -1: (Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/LambdaForm; +20 -1: ResourceBundleHolder +4 -1: (S)I +13 -1: getSuppressed +17 -1: jdk_micro_version +4 -1: (S)J +9 -1: isNumeric +10 -1: variantKey +8 -1: utf-32le +47 -1: java/util/concurrent/ConcurrentHashMap$MapEntry +25 -1: ()Ljava/lang/Class<-TT;>; +6 -1: closed +4 -1: (S)S +15 -1: setStandardTime +10 -1: ShortCache +4 -1: (S)V +40 -1: sun/net/www/MessageHeader$HeaderIterator +17 -1: jdk_major_version +8 -1: FXHelper +6 -1: CENTIM +19 -1: java/security/Guard +46 -1: java.lang.invoke.MethodHandle.DUMP_CLASS_FILES +4 -1: ENUM +27 -1: Ljava/lang/SecurityManager; +39 -1: ([Ljava/lang/Class;[Ljava/lang/Class;)Z +11 -1: getFieldAt0 +12 -1: user.variant +28 -1: (Ljava/io/DataInputStream;)V +44 -1: ([JLjava/util/function/LongBinaryOperator;)V +7 -1: getRoot +3 -1: + +16 -1: identityHashCode +25 -1: java/security/Permissions +16 -1: Ljava/net/Proxy; +23 -1: java/io/ExpiringCache$1 +5 -1: more +10 -1: formatList +49 -1: (Ljava/lang/String;)Lsun/launcher/LauncherHelper; +29 -1: Relative path in absolute URI +11 -1: checkMapped +8 -1: Checksum +8 -1: " Radix: +9 -1: getAndAdd +9 -1: implReady +16 -1: SynchronizedList +30 -1: [Ljava/lang/StackTraceElement; +5 -1: right +13 -1: UTF_16BE.java +4 -1: HEAD +11 -1: isInvocable +6 -1: ENDCOM +15 -1: getPropertiesEx +6 -1: Unsafe +7 -1: IBM-819 +37 -1: : 0 <= i2 && i2 < names.length: 0 <= +19 -1: filterAndAddHeaders +22 -1: nativeParkEventPointer +18 -1: checkPositionIndex +13 -1: invalid url: +25 -1: out of range from input +9 -1: loadClass +12 -1: encodingName +9 -1: x-JIS0208 +38 -1: (Ljava/lang/Class;Ljava/lang/Object;)Z +28 -1: (I)Ljava/lang/reflect/Field; +17 -1: getJvmVersionInfo +6 -1: LIJFDV +21 -1: (D)Ljava/lang/String; +7 -1: oomeMsg +30 -1: java/io/InvalidObjectException +25 -1: java/io/FilterInputStream +32 -1: Ljava/net/ContentHandlerFactory; +13 -1: toUnsignedInt +17 -1: reconstitutionPut +37 -1: (Ljava/lang/Object;)Ljava/lang/Class; +14 -1: getContentType +43 -1: java/util/Collections$SynchronizedSortedSet +24 -1: (II)Ljava/nio/file/Path; +25 -1: JAVAFX_APPLICATION_MARKER +29 -1: (IC)Ljava/lang/StringBuilder; +13 -1: java/util/Set +10 -1: clearError +64 -1: (Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle; +25 -1: java/io/FileInputStream$1 +8 -1: getFirst +36 -1: (Lsun/reflect/ConstructorAccessor;)V +84 -1: (Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/NavigableMap; +42 -1: (Ljava/lang/CharSequence;)Ljava/io/Writer; +52 -1: ([Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +6 -1: (IFI)V +62 -1: Ljava/lang/Object;Ljava/util/Queue; +17 -1: getHeaderFieldInt +16 -1: CheckedSortedMap +39 -1: (ZILjava/lang/String;)Ljava/lang/Class; +10 -1: getterName +10 -1: Asia/Tokyo +4 -1: Node +7 -1: rotate1 +13 -1: Stream closed +7 -1: rotate2 +9 -1: checkExec +17 -1: NF_checkExactType +18 -1: ReverseComparator2 +18 -1: arrayElementGetter +97 -1: (Ljava/util/ArrayPrefixHelpers$DoubleCumulateTask;Ljava/util/function/DoubleBinaryOperator;[DII)V +9 -1: iso8859-1 +9 -1: iso8859-2 +9 -1: iso8859-4 +9 -1: iso8859-5 +9 -1: iso8859-7 +16 -1: getPermissions +9 -1: iso8859-9 +9 -1: fromClass +17 -1: with modifiers " +8 -1: isBooted +24 -1: getCommonPoolParallelism +10 -1: initialize +47 -1: (TT;)Ljava/util/Set; +17 -1: checkElementIndex +14 -1: openConnection +47 -1: (Ljava/lang/Thread;Lsun/nio/ch/Interruptible;)V +12 -1: isAuthorized +17 -1: ReduceEntriesTask +7 -1: command +24 -1: ArithmeticException.java +24 -1: ensureOpenOrZipException +67 -1: (Lsun/util/calendar/CalendarDate;I)Lsun/util/calendar/CalendarDate; +39 -1: Ljava/lang/invoke/MethodHandles$Lookup; +31 -1: Enclosing constructor not found +34 -1: ()Lsun/util/calendar/BaseCalendar; +25 -1: (JLjava/lang/Object;JJJ)V +12 -1: > toIndex: +22 -1: LocaleObjectCache.java +19 -1: sun/misc/Launcher$1 +31 -1: java/util/HashMap$EntryIterator +8 -1: contains +60 -1: Ljava/lang/Object; +53 -1: (I[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +19 -1: java/io/PrintStream +42 -1: java/lang/Math$RandomNumberGeneratorHolder +100 -1: (I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +14 -1: getCapturedArg +14 -1: getCodeSigners +20 -1: mark() not supported +56 -1: (Lsun/misc/URLClassPath;I)Lsun/misc/URLClassPath$Loader; +20 -1: java/lang/StrictMath +14 -1: annotationType +3 -1: IET +4 -1: lang +13 -1: JarEntry.java +9 -1: ([CIIII)I +9 -1: canEncode +5 -1: extra +30 -1: java/lang/ref/ReferenceQueue$1 +37 -1: java/nio/channels/ReadableByteChannel +73 -1: (Ljava/util/Map$Entry;)Z +24 -1: java/io/BufferedReader$1 +10 -1: x-utf-32le +16 -1: methodDescriptor +25 -1: (IJ)Ljava/nio/ByteBuffer; +18 -1: getSystemResources +46 -1: (Ljava/lang/String;I)Ljava/util/regex/Pattern; +46 -1: (Ljava/net/URL;)Lsun/misc/URLClassPath$Loader; +20 -1: calendars.properties +25 -1: implOnUnmappableCharacter +12 -1: signers_name +40 -1: (ZILjava/util/Locale;)Ljava/lang/String; +8 -1: (TE;)TE; +50 -1: ()Lsun/util/locale/provider/LocaleProviderAdapter; +11 -1: key is null +7 -1: encrypt +21 -1: millisUntilExpiration +55 -1: Unable to parse property sun.reflect.inflationThreshold +9 -1: checkExit +5 -1: SHORT +43 -1: java/util/Collections$UnmodifiableSortedSet +10 -1: ISO8859_15 +16 -1: verifyParameters +24 -1: buildAnnotatedInterfaces +15 -1: refKindIsSetter +45 -1: (JLjava/util/function/BiConsumer<-TK;-TV;>;)V +23 -1: (Ljava/lang/Object;IC)V +90 -1: (Ljava/lang/ClassValue$Entry;)Ljava/lang/ClassValue$Entry; +30 -1: (Ljava/net/URL;)Ljava/net/URI; +60 -1: (BLjava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;)V +43 -1: (Ljava/util/Collection;Ljava/lang/Object;)I +44 -1: (Ljava/net/URLConnection;)Ljava/lang/Object; +17 -1: Stream not marked +11 -1: targetCheck +127 -1: (Ljava/lang/Class<*>;ILjava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; +11 -1: debugString +112 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +43 -1: (Ljava/util/Collection;Ljava/lang/Object;)V +15 -1: NF_staticOffset +22 -1: CASE_INSENSITIVE_ORDER +6 -1: unpark +29 -1: (Ljava/lang/CharSequence;II)I +59 -1: Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +19 -1: defaultFormatLocale +7 -1: combine +58 -1: (Ljava/util/Locale$LocaleKey;)Lsun/util/locale/BaseLocale; +29 -1: (Ljava/lang/CharSequence;II)V +35 -1: sun/util/calendar/BaseCalendar$Date +57 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +75 -1: ([Ljava/lang/reflect/Member;[Ljava/lang/String;)[Ljava/lang/reflect/Member; +15 -1: MethodType_init +5 -1: (JF)V +20 -1: AUTOSELECT_FILTERING +12 -1: invokeStatic +18 -1: readFileDescriptor +22 -1: java/lang/Terminator$1 +72 -1: (Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object; +17 -1: EMPTY_STACK_TRACE +13 -1: isSamePackage +32 -1: ()Ljava/security/DomainCombiner; +10 -1: decodeLoop +30 -1: DIRECTIONALITY_EUROPEAN_NUMBER +112 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String; +33 -1: (Ljava/util/function/Predicate;)Z +35 -1: logincontext login context results +17 -1: sun/nio/cs/UTF_16 +13 -1: SingletonList +5 -1: end= +7 -1: getURLs +17 -1: traceInstructions +22 -1: generateCustomizedCode +9 -1: NO_CHANGE +11 -1: Number.java +49 -1: (ITT;)Ljava/util/List; +19 -1: checkSpecifyHandler +8 -1: setValue +30 -1: (Ljava/net/URL;)Ljava/net/URL; +22 -1: (Ljava/lang/Object;C)V +19 -1: Negative capacity: +24 -1: ArrayStoreException.java +52 -1: (Ljava/lang/StringBuffer;II)Ljava/lang/StringBuffer; +14 -1: linkMethodImpl +42 -1: java/util/InvalidPropertiesFormatException +4 -1: last +19 -1: getLocalizedMessage +65 -1: (Ljava/text/MessageFormat;[Ljava/lang/String;)[Ljava/lang/String; +61 -1: Ljava/lang/Object;Ljava/util/Enumeration; +40 -1: (I[CII)Ljava/lang/AbstractStringBuilder; +27 -1: java.launcher.opt.datamodel +29 -1: (Ljava/lang/reflect/Method;)V +19 -1: SPECIFICATION_TITLE +123 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;ILjava/lang/Class;)Lsun/reflect/SerializationConstructorAccessorImpl; +32 -1: (I[CII)Ljava/lang/StringBuilder; +29 -1: (Ljava/lang/reflect/Method;)Z +23 -1: (Z[B)Ljava/lang/String; +27 -1: sun/nio/cs/Surrogate$Parser +32 -1: (Ljavax/security/auth/Subject;)Z +29 -1: ()Ljava/lang/invoke/Invokers; +7 -1: getPool +7 -1: textOut +12 -1: getEntryTime +14 -1: classModifiers +47 -1: (Ljava/util/Locale$Category;)Ljava/util/Locale; +32 -1: getInheritedAccessControlContext +4 -1: rcbt +37 -1: (Ljava/lang/Class<*>;Ljava/io/File;)Z +25 -1: AccessControlContext.java +22 -1: FileURLConnection.java +12 -1: NaturalOrder +34 -1: sun/util/calendar/CalendarSystem$1 +94 -1: ([Ljava/lang/reflect/Method;Ljava/lang/String;[Ljava/lang/Class<*>;)Ljava/lang/reflect/Method; +17 -1: No enum constant +7 -1: ([DII)V +8 -1: register +23 -1: FINAL_QUOTE_PUNCTUATION +27 -1: ACCESS_CLIPBOARD_PERMISSION +15 -1: verifyConstants +20 -1: (Ljava/io/Writer;I)V +45 -1: (Ljava/lang/String;)Ljava/lang/reflect/Field; +24 -1: linkMethodHandleConstant +43 -1: (Ljava/io/OutputStream;Ljava/lang/String;)V +125 -1: (Ljava/util/Comparator<-TV;>;)Ljava/util/Comparator;>; +14 -1: ALL_PERMISSION +12 -1: createObject +10 -1: CRC32.java +14 -1: reservedMemory +22 -1: ensureCapacityInternal +11 -1: FormatData_ +9 -1: maxMemory +27 -1: (I)Ljava/util/ListIterator; +8 -1: UTF-16BE +27 -1: AbstractSequentialList.java +10 -1: access$400 +16 -1: Locale settings: +10 -1: access$402 +12 -1: HashSet.java +24 -1: java/lang/Long$LongCache +30 -1: [Ljava/lang/reflect/Parameter; +11 -1: single_step +45 -1: (Ljava/lang/String;)Lsun/security/util/Debug; +97 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)Ljava/lang/invoke/SimpleMethodHandle; +16 -1: indexOfBangSlash +7 -1: region= +26 -1: ([BII)Ljava/lang/Class<*>; +8 -1: bitCount +3 -1: INT +67 -1: ([TT;Ljava/util/function/IntFunction<+TT;>;)V +35 -1: newGetFloatIllegalArgumentException +11 -1: ([DII[DII)V +22 -1: makePreparedLambdaForm +3 -1: < +35 -1: sun/management/GarbageCollectorImpl +4 -1: (*)* +7 -1: getPort +18 -1: java/io/FileSystem +7 -1: getNode +38 -1: (Ljava/lang/Object;I)Ljava/lang/Class; +36 -1: $SwitchMap$java$util$Locale$Category +18 -1: securityCheckCache +5 -1: cdate +10 -1: childValue +19 -1: getMainClassFromJar +70 -1: ;>(Ljava/lang/Class;Ljava/lang/String;)TT; +20 -1: unsuspendSomeThreads +29 -1: sun.classloader.findClassTime +11 -1: plusSeconds +3 -1: = +4 -1: Lock +7 -1: regions +38 -1: ()Ljava/lang/reflect/Constructor; +25 -1: parseParameterAnnotations +20 -1: getSystemGMTOffsetID +33 -1: [Cc][Oo][Dd][Ee][Bb][Aa][Ss][Ee]= +37 -1: (Ljava/lang/String;I)Ljava/lang/Byte; +10 -1: permission +78 -1: (Ljava/lang/reflect/Constructor;)Lsun/reflect/generics/scope/ConstructorScope; +28 -1: (Lsun/misc/JavaLangAccess;)V +26 -1: GET_CLASSLOADER_PERMISSION +24 -1: (J)Ljava/nio/ByteBuffer; +20 -1: getUnresolvedActions +49 -1: (I[BIILsun/security/util/ManifestEntryVerifier;)V +5 -1: (ZJ)V +14 -1: isClassOnlyJar +35 -1: ()[Ljava/util/HashMap$Node; +23 -1: ()Ljava/util/SortedMap; +29 -1: HistoricallyNamedCharset.java +30 -1: no leading reference parameter +8 -1: csCESU-8 +3 -1: > +13 -1: invoke_LLLL_L +109 -1: (Ljava/util/NavigableMap;)Ljava/util/NavigableMap; +13 -1: invoke_LLLL_V +46 -1: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field; +5 -1: offer +12 -1: isoLanguages +61 -1: (Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V +44 -1: sun/reflect/BootstrapConstructorAccessorImpl +12 -1: BaseIterator +58 -1: (IZ[Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/String; +23 -1: initializeOSEnvironment +62 -1: ([Ljava/security/cert/Certificate;)[Ljava/security/CodeSigner; +3 -1: >> +13 -1: searchEntries +7 -1: setDate +3 -1: red +3 -1: ref +10 -1: EMPTY_LIST +3 -1: rem +78 -1: Ljava/util/AbstractCollection;Ljava/util/List; +9 -1: scanToken +6 -1: greek8 +9 -1: basicType +12 -1: getFromClass +43 -1: averageCharsPerByte exceeds maxCharsPerByte +8 -1: isDaemon +7 -1: nonNull +17 -1: Invalid default: +45 -1: (Lsun/misc/URLClassPath;Ljava/lang/String;Z)V +18 -1: java/lang/String$1 +11 -1: copyMethods +15 -1: sun/misc/Signal +5 -1: float +18 -1: StreamDecoder.java +19 -1: no such constructor +14 -1: bad arity for +14 -1: divideUnsigned +10 -1: CODING_END +3 -1: IST +14 -1: HeaderIterator +9 -1: september +20 -1: makeVarargsCollector +6 -1: L_PATH +45 -1: (Ljava/lang/String;)Ljava/io/File$PathStatus; +24 -1: URI scheme is not "file" +85 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class<*>;)V +27 -1: java/util/function/Supplier +17 -1: checkedCollection +8 -1: MapEntry +81 -1: (Ljava/lang/invoke/MethodHandle;ILjava/util/List;)Ljava/lang/invoke/MethodHandle; +34 -1: java/security/ProtectionDomain$Key +14 -1: List length = +39 -1: ([Ljava/lang/Object;)Ljava/lang/String; +87 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object; +7 -1: unparse +28 -1: jarFileHasClassPathAttribute +40 -1: (Lsun/misc/JavaIOFileDescriptorAccess;)V +30 -1: (Ljava/lang/reflect/Field;ZZ)V +22 -1: GetPropertyAction.java +8 -1: RUNNABLE +10 -1: exprString +13 -1: getAnnotation +19 -1: class can't be null +22 -1: defaultAssertionStatus +8 -1: getName0 +16 -1: quoteReplacement +15 -1: getMemberVMInfo +42 -1: (Ljava/lang/Class<*>;)Ljava/lang/Class<*>; +16 -1: cachedLambdaForm +16 -1: addFinalRefCount +12 -1: getMethodAt0 +8 -1: ([ZII)[Z +44 -1: (Ljava/lang/Object;TV;Ljava/lang/Object;)TV; +4 -1: [TT; +29 -1: Ljava/lang/invoke/LambdaForm; +28 -1: java/util/DualPivotQuicksort +61 -1: ()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +17 -1: registerDirectory +8 -1: jarFiles +69 -1: (Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String; +54 -1: [Ljava/util/concurrent/ConcurrentHashMap$Node; +15 -1: getDefaultValue +39 -1: sun/util/calendar/ZoneInfoFile$Checksum +20 -1: DISABLE_JAR_CHECKING +12 -1: CONTENT_TYPE +46 -1: array type not assignable to trailing argument +60 -1: ([TT;II)Ljava/util/stream/Stream; +47 -1: java.lang.invoke.MethodHandle.COMPILE_THRESHOLD +9 -1: toInstant +152 -1: (Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/NavigableMap; +7 -1: L_ALPHA +29 -1: java/lang/AbstractMethodError +29 -1: java/util/jar/Attributes$Name +15 -1: LOCALE_SETTINGS +19 -1: (J)Ljava/lang/Long; +4 -1: jar: +17 -1: ensureInitialized +13 -1: LAST_MODIFIED +40 -1: ([Ljava/lang/String;)[Ljava/lang/String; +7 -1: shuffle +70 -1: (Lsun/util/locale/LanguageTag;)Lsun/util/locale/InternalLocaleBuilder; +19 -1: isPackageAccessible +17 -1: compileToBytecode +11 -1: getPackages +237 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToIntTask;Ljava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)V +53 -1: java/util/concurrent/ConcurrentHashMap$KeySpliterator +26 -1: setURLStreamHandlerFactory +47 -1: access print all checkPermission results +22 -1: sun/reflect/MethodInfo +75 -1: (Ljava/lang/String;ZLjava/util/Set;)Lsun/misc/Resource; +6 -1: KOI8-R +14 -1: Character.java +5 -1: (SS)I +8 -1: unshared +73 -1: (Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; +19 -1: replacementTreeNode +10 -1: BA_REGULAR +8 -1: UTF-16LE +44 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)V +22 -1: InputStreamReader.java +17 -1: getInvocationType +23 -1: getDeclaredConstructors +48 -1: [Lsun/reflect/generics/tree/FormalTypeParameter; +67 -1: (Ljava/util/Comparator;Ljava/util/Map$Entry;Ljava/util/Map$Entry;)I +6 -1: koi8_r +14 -1: ofTotalSeconds +16 -1: content-encoding +6 -1: koi8_u +10 -1: getEncoded +6 -1: ()[TT; +43 -1: ([ILjava/util/function/IntUnaryOperator;I)V +18 -1: getSecurityContext +13 -1: LF_GEN_LINKER +78 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class;)Ljava/lang/invoke/MemberName; +49 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;II)V +19 -1: LinkedEntryIterator +23 -1: Warning: JIT compiler " +7 -1: static +100 -1: (Ljava/lang/Class;ZLjava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Ljava/util/List; +79 -1: (Ljava/util/Collection<+TT;>;)Ljava/util/Collection; +10 -1: iso-ir-100 +10 -1: iso-ir-101 +13 -1: toUpperString +31 -1: ()Ljava/util/Spliterator$OfInt; +43 -1: Ljava/lang/StringIndexOutOfBoundsException; +19 -1: Lsun/misc/JarIndex; +7 -1: Version +90 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class; +10 -1: getHandler +45 -1: (ILjava/lang/Object;)Ljava/lang/StringBuffer; +28 -1: getDeclaredAnnotationsByType +46 -1: ([Ljava/lang/Class;Ljava/lang/StringBuilder;)V +53 -1: ()Ljava/util/Enumeration; +15 -1: addAllNonStatic +10 -1: iso-ir-110 +14 -1: Using VM: +17 -1: casReflectionData +26 -1: (Lsun/util/PreHashedMap;)I +24 -1: removeByNameAndSignature +4 -1: OS X +85 -1: (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Z +16 -1: JarEntryIterator +38 -1: Ljava/lang/Class; +37 -1: Ljava/lang/Class; +28 -1: ([Ljava/util/HashMap$Node;)V +34 -1: java/lang/reflect/GenericArrayType +14 -1: annotationData +26 -1: (Lsun/util/PreHashedMap;)V +22 -1: checkPackageDefinition +30 -1: ACCUMULATED_DAYS_IN_MONTH_LEAP +12 -1: lowestOneBit +64 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)V +16 -1: asReadOnlyBuffer +11 -1: getRealName +17 -1: StringCoding.java +10 -1: iso-ir-126 +11 -1: isSurrogate +8 -1: setError +138 -1: (Ljava/util/function/Function<-TT;+TU;>;Ljava/util/Comparator<-TU;>;)Ljava/util/Comparator; +8 -1: (TK;)TK; +4 -1: java +136 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)TT; +36 -1: ()Lsun/util/locale/LocaleExtensions; +12 -1: doubleStream +28 -1: ()Ljava/util/SimpleTimeZone; +7 -1: :@&=+$, +94 -1: Ljava/lang/ThreadLocal;>; +64 -1: (Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; +19 -1: getSystemTimeZoneID +18 -1: ReentrantLock.java +8 -1: emptyMap +16 -1: getSavedProperty +249 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToDoubleTask;Ljava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)V +14 -1: KeySpliterator +13 -1: findResources +14 -1: forWrapperType +8 -1: floorMod +12 -1: isoCountries +10 -1: CheckedSet +21 -1: AbstractCalendar.java +12 -1: IS_INVOCABLE +45 -1: (Ljava/lang/Class;)Lsun/reflect/ConstantPool; +19 -1: checkSecurityAccess +13 -1: Invalid index +28 -1: STACK_TRACE_ELEMENT_SENTINEL +88 -1: (ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode; +130 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +14 -1: aliases_IBM437 +10 -1: iso-ir-144 +10 -1: iso-ir-148 +35 -1: ()Ljava/nio/charset/CharsetDecoder; +95 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +16 -1: UnmodifiableList +40 -1: ()Ljava/util/concurrent/locks/Condition; +9 -1: Path.java +80 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/util/Map; +36 -1: Ljava/lang/Class; +124 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;)Ljava/lang/Object; +20 -1: privateGetParameters +24 -1: sun/nio/cs/StreamDecoder +12 -1: getFreeSpace +8 -1: US-ASCII +22 -1: negativeZeroDoubleBits +9 -1: putObject +13 -1: linkToVirtual +35 -1: Ljava/lang/Class; +15 -1: detectedCharset +26 -1: java/lang/reflect/Modifier +22 -1: JAVAFX_LAUNCH_MODE_JAR +32 -1: java/net/URLStreamHandlerFactory +7 -1: IBM-923 +80 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/String; +13 -1: TRANSFERINDEX +34 -1: (Lsun/nio/cs/StandardCharsets$1;)V +23 -1: ()Ljava/io/InputStream; +16 -1: ()Ljava/io/File; +41 -1: (Ljava/lang/String;)Ljava/nio/ByteBuffer; +22 -1: sun/reflect/Reflection +23 -1: java/lang/AutoCloseable +25 -1: BootstrapMethodError.java +19 -1: EnclosingMethodInfo +13 -1: transferIndex +18 -1: java/lang/Compiler +4 -1: zero +29 -1: java/util/Arrays$NaturalOrder +9 -1: language= +37 -1: Ljava/util/ArrayList; +73 -1: ()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject; +16 -1: balanceInsertion +82 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V +11 -1: asIntBuffer +27 -1: (Ljava/util/LinkedList;II)V +13 -1: ofEpochSecond +19 -1: sunjce_provider.jar +21 -1: (F)Ljava/lang/String; +32 -1: >> does not contain binding << +21 -1: declaredPublicMethods +5 -1: FIELD +17 -1: getPrimitiveClass +127 -1: (Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;Ljava/lang/Class;Ljava/lang/String;)V +21 -1: replaceParameterTypes +73 -1: Ljava/util/Map;Ljava/security/PermissionCollection;>; +21 -1: (Ljava/lang/Double;)I +5 -1: floor +4 -1: halt +14 -1: newConstructor +48 -1: (Ljava/util/function/BiFunction<-TK;-TV;+TV;>;)V +17 -1: packageAccessLock +15 -1: America/Phoenix +19 -1: Incoming arguments: +11 -1: V_Monotonic +14 -1: decrementExact +15 -1: updatePositions +14 -1: toLocaleString +12 -1: appendEscape +7 -1: DISPLAY +27 -1: sun/nio/cs/US_ASCII$Decoder +13 -1: LITTLE_ENDIAN +6 -1: isNull +13 -1: TempDirectory +6 -1: LM_JAR +39 -1: JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT +10 -1: isCompiled +36 -1: (Ljava/lang/AbstractStringBuilder;)Z +3 -1: run +17 -1: START_PUNCTUATION +33 -1: Ljava/util/Stack; +49 -1: (Ljava/lang/String;)Ljava/lang/invoke/LambdaForm; +28 -1: java/security/DomainCombiner +53 -1: (Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId; +81 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)[Ljava/lang/reflect/AnnotatedType; +43 -1: java/lang/management/GarbageCollectorMXBean +11 -1: toTitleCase +12 -1: getHoldCount +4 -1: ()[B +4 -1: ()[C +4 -1: ()[J +20 -1: (Ljava/io/File;IZZ)Z +18 -1: fileTimeToUnixTime +23 -1: java/nio/HeapCharBuffer +30 -1: Ljava/lang/ref/ReferenceQueue; +6 -1: rt.jar +69 -1: (Ljava/util/function/ToIntFunction<-TT;>;)Ljava/util/Comparator; +21 -1: java/lang/ThreadLocal +25 -1: Ljava/lang/reflect/Field; +44 -1: (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V +93 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/MethodHandle; +22 -1: getDayOfWeekDateBefore +37 -1: [Lsun/reflect/generics/tree/TypeTree; +83 -1: (Ljava/util/Map;)Ljava/util/Set; +10 -1: readFields +42 -1: (Ljava/net/URL;)Ljava/security/CodeSource; +44 -1: (Ljava/lang/String;IIJ)Ljava/nio/ByteBuffer; +27 -1: Ljava/util/Collection; +13 -1: checkResource +7 -1: rename0 +51 -1: (C)Ljava/lang/invoke/BoundMethodHandle$SpeciesData; +47 -1: sun/reflect/generics/repository/FieldRepository +11 -1: readBoolean +134 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)V +13 -1: getZoneOffset +17 -1: getJdkVersionInfo +21 -1: sun/misc/MessageUtils +23 -1: defaultAllowArraySyntax +31 -1: java/util/concurrent/locks/Lock +24 -1: java/lang/reflect/Method +7 -1: toUpper +17 -1: sun/misc/Signal$1 +51 -1: (JLjava/util/function/BiFunction<-TK;-TK;+TK;>;)TK; +28 -1: (Ljava/lang/ref/Reference;)Z +8 -1: nthreads +26 -1: MapReduceEntriesToLongTask +27 -1: (Ljava/util/NavigableSet;)V +10 -1: savedProps +25 -1: Lsun/security/util/Debug; +12 -1: CR_MALFORMED +13 -1: com.sun.proxy +17 -1: CharSequence.java +24 -1: (ILjava/lang/String;II)Z +13 -1: findNextValue +108 -1: ;V:Ljava/lang/Object;>()Ljava/util/Comparator;>; +5 -1: (FF)F +9 -1: typeClass +5 -1: (FF)I +11 -1: segmentMask +7 -1: (JJJJ)V +14 -1: aliases_CESU_8 +85 -1: (Ljava/lang/Class;Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/DirectMethodHandle; +15 -1: getCalendarDate +21 -1: getDeclaredAnnotation +8 -1: ([BIIB)I +15 -1: stripExtensions +14 -1: getISO3Country +5 -1: short +47 -1: String value %s exceeds range of unsigned long. +34 -1: ()Ljava/security/ProtectionDomain; +8 -1: ([BIIB)V +23 -1: (Ljava/lang/Object;ID)V +47 -1: (Ljava/lang/String;Ljava/nio/charset/Charset;)V +29 -1: RuntimeVisibleTypeAnnotations +24 -1: (Ljava/io/InputStream;)V +39 -1: (Ljava/lang/Class;Ljava/lang/String;Z)V +16 -1: convertPrimitive +8 -1: (TK;)TV; +24 -1: (Ljava/io/InputStream;)Z +6 -1: start +243 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceEntriesToLongTask;Ljava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)V +9 -1: asSpecial +20 -1: java/text/Normalizer +17 -1: DAYS_0000_TO_1970 +9 -1: toCharset +20 -1: REPLACEALL_THRESHOLD +20 -1: sun/net/util/URLUtil +16 -1: findLoadedClass0 +14 -1: localedata.jar +6 -1: Parser +6 -1: start0 +4 -1: hash +83 -1: (Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +29 -1: Ljava/lang/invoke/MemberName; +8 -1: BOOT_TAG +22 -1: MH_LINKER_ARG_APPENDED +14 -1: comparingByKey +47 -1: ([Ljava/lang/String;)Ljava/lang/ProcessBuilder; +6 -1: start= +18 -1: StringBuilder.java +7 -1: getLong +12 -1: copyElements +16 -1: highResFrequency +11 -1: toGMTString +10 -1: ISO_8859_1 +10 -1: ISO_8859_2 +6 -1: result +10 -1: ISO_8859_4 +10 -1: ISO_8859_5 +10 -1: ISO_8859_7 +15 -1: unmodifiableSet +10 -1: ISO_8859_9 +25 -1: NoClassDefFoundError.java +42 -1: (Ljava/lang/String;)Ljava/util/LinkedList; +14 -1: parallelPrefix +22 -1: ARRAY_LONG_INDEX_SCALE +6 -1: resume +36 -1: Ljava/lang/invoke/LambdaForm$Hidden; +50 -1: java/util/Collections$UnmodifiableRandomAccessList +130 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/Consumer;)V +6 -1: getInt +13 -1: getCachedYear +21 -1: CONNECTOR_PUNCTUATION +73 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;ILjava/lang/Class;)V +24 -1: [Lsun/util/calendar/Era; +22 -1: (Ljava/lang/Object;D)V +74 -1: (Ljava/security/AccessControlContext;)Ljava/security/AccessControlContext; +109 -1: (Ljava/lang/Class<*>;Ljava/lang/Class$AnnotationData;Ljava/lang/Class$AnnotationData;)Z +6 -1: ([CZ)V +74 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; +19 -1: TRADITIONAL_CHINESE +125 -1: (Ljava/lang/Throwable$PrintStreamOrWriter;[Ljava/lang/StackTraceElement;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V +18 -1: unknown protocol: +57 -1: (Ljava/lang/reflect/Method;Lsun/reflect/MethodAccessor;)V +13 -1: writeComments +9 -1: Negotiate +14 -1: Closeable.java +10 -1: asSpreader +122 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey; +17 -1: jvm_minor_version +9 -1: getDouble +25 -1: Ljava/io/File$PathStatus; +19 -1: averageCharsPerByte +22 -1: getConstructorAccessor +61 -1: (Ljava/lang/String;)Ljava/lang/management/MemoryManagerMBean; +45 -1: (Ljava/lang/String;)Ljava/util/regex/Pattern; +25 -1: (JC)Ljava/nio/ByteBuffer; +20 -1: exclusiveOwnerThread +85 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)V +17 -1: getExtensionValue +14 -1: getLoadAverage +17 -1: GET_PD_PERMISSION +6 -1: METHOD +23 -1: sun/nio/cs/ISO_8859_1$1 +23 -1: (I[Ljava/lang/Object;)I +4 1: zzz1 +13 -1: createWrapper +4 1: zzz2 +4 1: zzz3 +33 -1: greater than Character.MAX_RADIX +37 -1: DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE +6 -1: BRIDGE +20 -1: canonicalizeLanguage +13 -1: setPermission +46 -1: (Ljava/io/OutputStream;)Ljava/io/OutputStream; +3 -1: 646 +14 -1: java/lang/Long +55 -1: java/util/concurrent/ConcurrentHashMap$SearchValuesTask +38 -1: (IC)Ljava/lang/invoke/LambdaForm$Name; +37 -1: (Ljava/lang/Class;)Ljava/lang/String; +17 -1: javaUtilJarAccess +23 -1: registerMethodsToFilter +34 -1: (Ljava/nio/charset/Charset;[CII)[B +11 -1: % VERSION 2 +37 -1: ([DI)Ljava/util/Spliterator$OfDouble; +16 -1: Stack Size: +52 -1: (Ljava/lang/Class;)Ljava/lang/annotation/Annotation; +17 -1: putDoubleVolatile +10 -1: access$500 +10 -1: access$502 +28 -1: malformed input around byte +13 -1: LF_INVSPECIAL +32 -1: Non-positive averageCharsPerByte +14 -1: NF_fieldOffset +10 -1: access$508 +48 -1: (TT;)Ljava/util/List; +17 -1: defaultReadObject +17 -1: java/util/TimSort +13 -1: resolveClass0 +92 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +20 -1: setLangReflectAccess +30 -1: java/lang/reflect/TypeVariable +56 -1: ([TT;)Ljava/util/Spliterator; +8 -1: VOLATILE +10 -1: Big5-HKSCS +23 -1: (Ljava/util/Locale$1;)V +15 -1: ISO_8859-1:1987 +14 -1: no such method +10 -1: null value +8 -1: checkURL +22 -1: ARRAY_BYTE_INDEX_SCALE +27 -1: (Ljava/lang/ClassLoader;Z)V +22 -1: java/lang/reflect/Type +25 -1: java/net/JarURLConnection +36 -1: java/util/WeakHashMap$KeySpliterator +26 -1: ()Lsun/misc/JavaAWTAccess; +50 -1: (I[Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +9 -1: toDegrees +12 -1: lowSurrogate +19 -1: getEnclosingMethod0 +7 -1: bytearr +35 -1: (Ljava/util/List;Ljava/util/List;)I +25 -1: [Ljava/lang/reflect/Type; +34 -1: javaSecurityProtectionDomainAccess +21 -1: java.launcher.X.usage +37 -1: sun/util/locale/InternalLocaleBuilder +33 -1: ()Ljava/lang/invoke/MethodHandle; +3 -1: scl +19 -1: synthesizeAllParams +68 -1: Ljava/util/Map; +6 -1: vclass +35 -1: (Ljava/util/List;Ljava/util/List;)V +59 -1: Ljava/lang/Number;Ljava/lang/Comparable; +13 -1: CallSite.java +10 1: Bar loaded +21 -1: ARRAY_INT_BASE_OFFSET +49 -1: Ljava/util/concurrent/ConcurrentHashMap$TreeNode; +32 -1: [Ljava/lang/reflect/Constructor; +4 -1: type +34 -1: ([TT;II)[TT; +25 -1: BufferedOutputStream.java +23 -1: java/util/zip/ZipFile$1 +24 -1: ()Ljava/lang/ClassValue; +50 -1: (Ljava/util/concurrent/CountedCompleter;[F[FIIII)V +16 -1: getQueuedThreads +26 -1: getJavaNetHttpCookieAccess +8 -1: setExtra +8 -1: implRead +20 -1: linkMethod => throw +76 -1: (Ljava/util/function/ToDoubleFunction;Ljava/lang/Object;Ljava/lang/Object;)I +11 -1: KeyIterator +39 -1: Ljava/util/List; +3 -1: " " +36 -1: Ljava/lang/IllegalArgumentException; +11 -1: checkBounds +30 -1: sun/nio/cs/FastCharsetProvider +11 -1: toLongArray +107 -1: (Ljava/lang/Class<*>;Ljava/lang/String;Ljava/lang/Class<*>;IILjava/lang/String;[B)Ljava/lang/reflect/Field; +8 -1: (build +39 -1: (Ljava/nio/Buffer;ILjava/nio/Buffer;I)V +31 -1: [Ljava/lang/reflect/Executable; +3 -1: set +21 -1: PhantomReference.java +41 -1: java/util/Collections$CheckedNavigableMap +53 -1: Can not make a java.lang.Class constructor accessible +12 -1: ([CII[CIII)I +55 -1: Ljava/util/HashMap; +12 -1: MICROSECONDS +11 -1: writeBuffer +52 -1: and domain that didn't have permission +37 -1: java/nio/channels/WritableByteChannel +26 -1: getRawClassTypeAnnotations +15 -1: putCharVolatile +33 -1: java/security/InvalidKeyException +19 -1: Ljava/io/Closeable; +83 -1: Lsun/util/locale/LocaleObjectCache; +10 -1: SetFromMap +24 -1: JavaFX-Application-Class +13 -1: asShortBuffer +10 -1: getReifier +15 -1: isPositionIndex +18 -1: SignalHandler.java +3 -1: JST +28 -1: (Ljava/io/FileDescriptor;I)I +28 -1: getStackAccessControlContext +16 -1: updateByteBuffer +27 -1: ()Ljava/net/ContentHandler; +25 -1: (JD)Ljava/nio/ByteBuffer; +39 -1: ()Lsun/misc/JavaIOFileDescriptorAccess; +107 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; +42 -1: sun/misc/PerfCounter$WindowsClientCounters +8 -1: addExact +28 -1: (Ljava/io/FileDescriptor;I)V +36 -1: ([Ljava/lang/String;)Ljava/util/Map; +21 -1: ()Ljava/lang/Process; +4 -1: UTF8 +5 -1: mkdir +10 -1: transient +3 -1: sgp +15 -1: balanceDeletion +161 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package; +15 -1: SynchronizedMap +40 -1: sun.misc.URLClassPath.disableJarChecking +92 -1: Ljava/util/AbstractSet;Ljava/util/Set;Ljava/io/Serializable; +17 -1: removeEldestEntry +35 -1: (I)Ljava/lang/Class$AnnotationData; +24 -1: Ljava/util/Locale$Cache; +13 -1: STANDARD_TIME +17 -1: sun/nio/cs/MS1252 +99 -1: ()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +23 -1: java/util/LinkedHashSet +9 -1: iso8859_1 +9 -1: iso8859_2 +9 -1: iso8859_4 +66 -1: (Ljava/lang/Class;)[TA; +9 -1: iso8859_5 +9 -1: iso8859_7 +9 -1: iso8859_9 +21 -1: Ljava/util/Formatter; +6 -1: isPath +21 -1: makeReferenceIdentity +24 -1: sun/net/ApplicationProxy +23 -1: ClassCastException.java +11 -1: MethodArray +12 -1: SingletonMap +41 -1: java/util/ArrayPrefixHelpers$CumulateTask +7 -1: seconds +20 -1: ClassRepository.java +14 -1: allocateMemory +24 -1: java.launcher.jar.error1 +24 -1: java.launcher.jar.error2 +24 -1: java.launcher.jar.error3 +45 -1: (Ljava/lang/String;Ljava/util/jar/Manifest;)Z +3 -1: sin +7 -1: (J[II)I +3 -1: Itr +18 -1: findBootstrapClass +10 -1: getElement +15 -1: ISO_8859-4:1988 +34 -1: newGetLongIllegalArgumentException +7 -1: pending +17 -1: isNotContinuation +6 -1: EXTSIG +13 -1: searchMethods +32 -1: Lsun/misc/JavaUtilZipFileAccess; +33 -1: ([Ljava/lang/reflect/Parameter;)V +31 -1: defaultUncaughtExceptionHandler +89 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind<*>;)Ljava/nio/file/WatchKey; +5 -1: ASCII +28 -1: ()Lsun/reflect/ConstantPool; +20 -1: isJavaIdentifierPart +6 -1: EXTSIZ +34 -1: Lsun/misc/JavaNetHttpCookieAccess; +34 -1: ClassLoader object not initialized +7 -1: CHECKED +16 -1: encodeBufferLoop +37 -1: (Ljava/time/Instant;)Ljava/util/Date; +24 -1: (Ljava/util/Map$Entry;)Z +50 -1: java/util/concurrent/ConcurrentHashMap$KeyIterator +31 -1: ()[Ljava/lang/ClassValue$Entry; +31 -1: java/lang/IllegalStateException +43 -1: (Ljava/lang/Appendable;Ljava/util/Locale;)V +6 -1: CENVEM +53 -1: Ljava/util/ArrayList; +17 -1: getHeaderFieldKey +71 -1: (Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String; +6 -1: CENVER +17 -1: cleanStaleEntries +9 -1: linkFirst +57 -1: (Ljava/util/Comparator<-TT;>;)Ljava/util/Comparator; +8 -1: val$file +27 -1: Invalid parameter modifiers +6 -1: append +57 -1: ()Lsun/reflect/generics/repository/ConstructorRepository; +65 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToIntTask +39 -1: (Ljava/lang/String;)Ljava/lang/Integer; +25 -1: lambda$parallelSetAll$191 +25 -1: lambda$parallelSetAll$192 +25 -1: lambda$parallelSetAll$193 +23 -1: INSERTIONSORT_THRESHOLD +17 -1: java/time/Instant +25 -1: lambda$parallelSetAll$194 +14 -1: dynamicInvoker +9 -1: iso646-us +8 -1: position +29 -1: java/nio/channels/FileChannel +27 -1: java/util/stream/Collectors +64 -1: (Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String; +10 -1: INDEX_NAME +15 -1: getCommentBytes +67 -1: (Ljava/io/FileOutputStream;Ljava/lang/String;)Ljava/io/PrintStream; +22 -1: privateGetPublicFields +32 -1: java/util/BitSet$1BitSetIterator +12 -1: PERF_MODE_RO +89 -1: ([Ljava/lang/ClassValue$Entry;ILjava/lang/ClassValue$Entry;Z)Ljava/lang/ClassValue$Entry; +30 -1: java/security/PrivilegedAction +18 -1: host can't be null +26 -1: package name can't be null +12 -1: PERF_MODE_RW +10 -1: isEnqueued +18 -1: argSlotToParameter +37 -1: (II)Ljava/lang/AbstractStringBuilder; +5 -1: tabAt +53 -1: (Ljava/lang/Object;)Ljava/lang/AbstractStringBuilder; +11 -1: PATH_OFFSET +18 -1: unicodebigunmarked +15 -1: ConditionObject +6 -1: KOREAN +13 -1: isNamePresent +24 -1: ()Ljava/lang/Class; +14 -1: isStandardTime +8 -1: ([IIII)I +9 -1: WeakEntry +12 -1: javaIOAccess +17 -1: key can't be null +129 -1: Ljava/lang/Object;Ljava/lang/Comparable;Ljava/lang/Iterable;Ljava/nio/file/Watchable; +8 -1: handler +8 -1: ([IIII)V +10 -1: atBugLevel +18 -1: makeGuardWithCatch +18 -1: currentLoadedClass +11 -1: getCodeBase +67 -1: (Ljava/util/List<+TT;>;)Ljava/util/List; +12 -1: JarFile.java +19 -1: (C)Ljava/io/Writer; +22 -1: createURLStreamHandler +23 -1: sun/nio/cs/ArrayDecoder +13 -1: setAccessible +18 -1: stripOffParameters +101 -1: ([Ljava/security/ProtectionDomain;[Ljava/security/ProtectionDomain;)[Ljava/security/ProtectionDomain; +18 -1: Ljava/util/Random; +16 -1: Pacific/Honolulu +13 -1: useOldMapping +65 -1: (Ljava/lang/invoke/LambdaForm$NamedFunction;[Ljava/lang/Object;)V +14 -1: filterArgument +12 -1: LF_MH_LINKER +25 -1: isDirectMemoryPageAligned +49 -1: (Ljava/util/BitSet;)Ljava/util/function/Supplier; +54 -1: (Ljava/util/concurrent/ConcurrentHashMap;TV;)V +16 -1: java/time/ZoneId +4 -1: zfot +18 -1: isSameClassPackage +6 -1: julian +8 -1: (TT;)TT; +22 -1: java/util/jar/Manifest +7 -1: charOut +16 -1: getOffsetsByWall +19 -1: Illegal replacement +139 -1: Ljava/util/AbstractList;Ljava/util/List;Ljava/util/RandomAccess;Ljava/lang/Cloneable;Ljava/io/Serializable; +96 -1: (Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor; +15 -1: Annotation.java +24 -1: (Ljava/lang/Class<*>;)[B +6 -1: CODING +34 -1: ([Ljava/lang/ClassValue$Entry;II)V +6 -1: IGNORE +62 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; +29 -1: specificToGenericStringHeader +12 -1: helpTransfer +8 -1: fastTime +62 -1: (Ljava/net/URLConnection;[Ljava/lang/Class;)Ljava/lang/Object; +18 -1: Unhandled signal: +8 -1: isStrict +15 -1: ISO_8859-7:1987 +13 -1: getWeekLength +14 -1: jvmBuildNumber +40 -1: (Ljava/lang/String;)Ljava/util/Iterator; +6 -1: short0 +6 -1: short1 +73 -1: (Ljava/security/PrivilegedExceptionAction;)TT; +10 -1: removeNode +8 -1: setFloat +18 -1: cspc862latinhebrew +11 -1: setTimeZone +34 -1: java/lang/reflect/AccessibleObject +25 -1: MapReduceKeysToDoubleTask +25 -1: java/lang/ref/Reference$1 +24 -1: java/nio/HeapByteBufferR +15 -1: jdkMicroVersion +117 -1: (Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B[B)V +8 -1: (TT;)TV; +16 -1: Permissions.java +22 -1: Ljava/util/Comparator; +17 -1: getDaylightSaving +25 -1: ([BIILjava/lang/String;)V +9 -1: stillborn +11 -1: maxPosition +28 -1: java/util/ArrayPrefixHelpers +73 -1: ()Ljava/util/SortedMap; +14 -1: useCanonCaches +5 -1: clean +16 -1: checkPermission2 +34 -1: sun.misc.launcher.useSharedArchive +13 -1: shutdownHooks +5 -1: clear +240 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask;Ljava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)V +67 -1: (JLjava/util/function/Function<-TV;+TU;>;)TU; +6 -1: cp1250 +6 -1: cp1251 +6 -1: cp1252 +13 -1: getZipMessage +6 -1: cp1253 +28 -1: (J)Ljava/lang/ref/Reference; +6 -1: cp1254 +54 -1: (ILjava/lang/String;)Ljava/lang/AbstractStringBuilder; +6 -1: cp1257 +10 -1: deepEquals +17 -1: WRITE_BUFFER_SIZE +13 -1: copyFromArray +40 -1: java/util/Collections$ReverseComparator2 +36 -1: sun/reflect/generics/visitor/Reifier +19 -1: averageBytesPerChar +13 -1: javaAWTAccess +6 -1: cp5346 +61 -1: Ljava/util/Map; +6 -1: cp5347 +6 -1: cp5348 +6 -1: cp5349 +5 -1: field +23 -1: ()Ljava/nio/LongBuffer; +103 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/WrongMethodTypeException; +37 -1: (I)Ljava/lang/Character$UnicodeBlock; +11 -1: offsetAfter +79 -1: Ljava/util/HashMap; +27 -1: invocationHandlerReturnType +17 -1: POSITIVE_INFINITY +11 -1: maybeRebind +3 -1: str +18 -1: setSecurityManager +9 -1: signature +18 -1: corrupted jar file +89 -1: Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; +87 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +6 -1: CENATT +6 -1: cp5350 +12 -1: AF_GETSTATIC +38 -1: (TE;Ljava/util/LinkedList$Node;)V +8 -1: isLoaded +6 -1: CENATX +6 -1: cp5353 +18 -1: Africa/Addis_Ababa +35 -1: sun/usagetracker/UsageTrackerClient +11 -1: toUpperCase +22 -1: java/util/zip/Inflater +10 -1: iso_8859-1 +10 -1: iso_8859-2 +3 -1: sum +7 -1: x-Johab +10 -1: iso_8859-4 +10 -1: iso_8859-5 +85 -1: (Ljava/security/DomainCombiner;Ljava/lang/Class;)Ljava/security/AccessControlContext; +11 -1: activeCount +49 -1: (Ljava/lang/ClassLoader;Ljava/lang/ClassLoader;)Z +51 -1: (Ljava/util/List;Ljava/lang/Class;)Ljava/util/List; +10 -1: iso_8859-7 +19 -1: appendVmErgoMessage +10 -1: iso_8859-9 +14 -1: getClassLoader +6 -1: (CJJ)Z +15 -1: Lsun/misc/Perf; +7 -1: getTree +27 -1: Ljava/text/Normalizer$Form; +11 -1: ISO-2022-JP +69 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;)Ljava/lang/Object; +50 -1: java/lang/invoke/DirectMethodHandle$StaticAccessor +15 -1: fxLauncherClass +35 -1: (Ljava/net/URL;Ljava/lang/String;)V +16 -1: getAndAccumulate +35 -1: (Ljava/net/URL;Ljava/lang/String;)Z +32 -1: Non-positive averageBytesPerChar +35 -1: Ljava/lang/Class; +15 -1: CLASS_MODIFIERS +12 -1: checkedQueue +13 -1: enumConstants +10 -1: getFactory +95 -1: Ljava/util/concurrent/ConcurrentMap;>; +13 -1: Africa/Harare +57 -1: (JLjava/util/TimeZone;)Lsun/util/calendar/Gregorian$Date; +11 -1: ISO-2022-KR +19 -1: $assertionsDisabled +13 -1: PROXY_PACKAGE +17 -1: copyFromLongArray +81 -1: Ljava/util/LinkedHashMap$Entry; +11 -1: checkDelete +38 -1: sun/management/ManagementFactoryHelper +7 -1: UTC1900 +20 -1: getBootstrapResource +23 -1: ()Ljava/lang/Throwable; +16 -1: CALLER_SENSITIVE +26 -1: checkSystemClipboardAccess +32 -1: Can't set default locale to NULL +16 -1: fxLauncherMethod +4 -1: >= +8 -1: provider +9 -1: Finalizer +78 -1: (Ljava/io/FileDescriptor;ZZZLjava/lang/Object;)Ljava/nio/channels/FileChannel; +13 -1: emptyIterator +15 -1: getZipFileCount +21 -1: isJavaIdentifierStart +9 -1: connected +11 -1: (ITK;TV;I)V +16 -1: America/Honolulu +22 -1: SynchronizedCollection +28 -1: java/util/zip/ZipConstants64 +29 -1: inheritedAccessControlContext +29 -1: ()[Ljava/security/CodeSigner; +85 -1: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/sun/management/GcInfo;)V +25 -1: (Ljava/nio/CharBuffer;Z)V +15 -1: java/io/Console +101 -1: (Ljava/lang/Class<*>;Lsun/reflect/annotation/AnnotationType;Lsun/reflect/annotation/AnnotationType;)Z +9 -1: | resolve +81 -1: (BLjava/lang/invoke/MemberName;Ljava/lang/Class<*>;)Ljava/lang/invoke/MemberName; +33 -1: (Ljava/nio/charset/Charset;FF[B)V +49 -1: (Ljava/lang/Class;Z)Ljava/lang/invoke/MethodType; +66 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File; +29 -1: ([Ljava/util/HashMap$Node;I)V +13 -1: filterMethods +4 -1: jcal +61 -1: (Ljava/util/List;>;)[Ljava/lang/Class<*>; +6 -1: which= +46 -1: (Ljava/math/BigInteger;)Ljava/math/BigInteger; +4 -1: date +18 -1: internalMemberName +6 -1: (JJI)Z +30 -1: [Ljava/lang/invoke/LambdaForm; +60 -1: Ljava/lang/Object; +15 -1: ReservationNode +42 -1: java/lang/ThreadLocal$ThreadLocalMap$Entry +6 -1: setIn0 +4 -1: sort +8 -1: ibm00858 +110 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;IILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; +28 -1: Ljava/lang/ClassValue$Entry; +22 -1: ensureExplicitCapacity +6 -1: rotate +14 -1: closeRequested +30 -1: ([CII)Ljava/lang/StringBuffer; +10 -1: LM_UNKNOWN +15 -1: Comparable.java +13 -1: getByteBuffer +9 -1: getScheme +15 -1: done with meta! +17 -1: checkForTypeAlias +7 -1: getKeys +7 -1: SIG_DFL +30 -1: Ljava/nio/charset/CoderResult; +16 -1: returnTypesMatch +19 -1: getClassAccessFlags +18 -1: JavaNioAccess.java +9 -1: setDouble +23 -1: Ljava/util/zip/ZipFile; +83 -1: (JLjava/util/function/ToIntFunction<-TK;>;ILjava/util/function/IntBinaryOperator;)I +11 -1: ACCESS_READ +15 -1: nativeByteOrder +5 -1: hours +7 -1: toArray +7 -1: Encoder +12 -1: resolveClass +29 -1: (Ljava/io/FileDescriptor;JJ)V +14 -1: redefinedCount +8 -1: getTotal +11 -1: iso_8859-13 +11 -1: iso_8859-15 +9 -1: expected +18 -1: getDeclaredMethods +11 -1: elementData +6 -1: intern +10 -1: countryKey +6 -1: setInt +39 -1: Could not create extension class loader +24 -1: SELF_SUPPRESSION_MESSAGE +14 -1: argToSlotTable +42 -1: Ljava/util/HashMap; +5 -1: \t\n\r\x0c +4 -1: read +12 -1: Objects.java +7 -1: aliases +29 -1: sun/reflect/LangReflectAccess +6 -1: prefix +15 -1: superInterfaces +10 -1: getDoInput +30 -1: java/nio/CharBufferSpliterator +6 -1: KOI8_R +12 -1: Asia/Kolkata +6 -1: KOI8_U +6 -1: LOCSIG +15 -1: UA-Java-Version +92 -1: Ljava/util/HashMap;Ljava/util/Map; +14 -1: CertificateRep +17 -1: getSystemResource +85 -1: (JLjava/util/function/ToLongFunction<-TV;>;JLjava/util/function/LongBinaryOperator;)J +27 -1: java/lang/reflect/Parameter +5 -1: quote +8 -1: not MH: +46 -1: java/util/Collections$UnmodifiableCollection$1 +6 -1: putVal +6 -1: LOCSIZ +6 -1: Atomic +3 -1: 737 +38 -1: java/lang/UnsupportedClassVersionError +27 -1: ()Ljava/lang/StringBuilder; +41 -1: sun/net/www/protocol/jar/JarURLConnection +60 -1: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter; +59 -1: (TT;TT;Ljava/util/Comparator<-TT;>;)I +54 -1: java/util/concurrent/locks/AbstractOwnableSynchronizer +7 -1: getHost +36 -1: (F)Ljava/lang/AbstractStringBuilder; +69 -1: (Ljava/lang/Class;)Ljava/lang/Class<+TU;>; +4 -1: Form +103 -1: (Ljava/util/SortedMap;)Ljava/util/SortedMap; +6 -1: spread +8 -1: addHours +13 -1: contentEquals +47 -1: (Ljava/lang/String;Ljava/security/Permission;)V +12 -1: newCondition +23 -1: (Ljava/lang/Object;IZ)V +26 -1: (Ljava/util/LinkedList;I)V +13 -1: ConstantValue +18 -1: URLConnection.java +12 -1: Boolean.java +75 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;Ljava/net/URLStreamHandlerFactory;)V +21 -1: EMPTY_THROWABLE_ARRAY +153 -1: (Ljava/util/Map;[Ljava/lang/String;>;Ljava/lang/Class<*>;[Ljava/lang/String;)Ljava/util/Map;[Ljava/lang/String;>; +18 -1: getUnresolvedCerts +13 -1: Negative time +28 -1: java/util/WeakHashMap$KeySet +8 -1: slashify +16 -1: isOtherLowercase +17 -1: putObjectVolatile +5 -1: ERASE +12 -1: filterFields +40 -1: Ljava/lang/ReflectiveOperationException; +12 -1: VM settings: +57 -1: (ILjava/lang/Object;)Ljava/util/HashMap$TreeNode; +10 -1: access$600 +11 -1: ] return => +13 -1: user.timezone +23 -1: USER_AGENT_JAVA_VERSION +27 -1: (Ljava/util/HashMap$Node;)V +19 -1: filterNTLMResponses +28 -1: (Lsun/misc/VMNotification;)V +37 -1: ()[[Ljava/lang/annotation/Annotation; +45 -1: ()Lcom/sun/management/DiagnosticCommandMBean; +3 -1: tan +31 -1: getDirectlyAndIndirectlyPresent +7 -1: prepend +35 -1: (I)Lsun/util/calendar/CalendarDate; +8 -1: val$dirs +4 -1: test +28 -1: Non-positive maxCharsPerByte +83 -1: Ljava/lang/Object;Ljava/util/Map; +12 -1: JAVA_VERSION +24 -1: ([Ljava/lang/Thread;IZ)I +70 -1: (Ljava/lang/invoke/LambdaForm$Name;)Ljava/lang/invoke/LambdaForm$Name; +57 -1: ([TT;Ljava/util/Comparator<-TT;>;)V +42 -1: (Ljava/lang/Class<*>;[I)Ljava/lang/Object; +27 -1: java/lang/SecurityManager$1 +32 -1: java/security/SignatureException +27 -1: java/lang/SecurityManager$2 +4 -1: .jar +20 -1: parameterAnnotations +31 -1: DIRECTIONALITY_BOUNDARY_NEUTRAL +21 -1: hasClassPathAttribute +17 -1: checkParentAccess +35 -1: java/security/PermissionsEnumerator +6 -1: FORMAT +92 -1: (JLjava/util/function/Function;+TU;>;)TU; +3 -1: 775 +11 -1: PROBE_LIMIT +111 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +11 -1: AF_PUTFIELD +22 -1: (Ljava/lang/Object;Z)V +20 -1: getGenericReturnType +9 -1: val$extcl +13 -1: inClassLoader +37 -1: sun.urlClassLoader.readClassBytesTime +35 -1: (JLjava/util/function/BiConsumer;)V +28 -1: getContentHandlerPkgPrefixes +10 -1: getChannel +78 -1: (Ljava/util/List<+TT;>;TT;Ljava/util/Comparator<-TT;>;)I +16 -1: parseMemberValue +4 -1: regn +47 -1: ([Ljava/lang/Object;III)Ljava/util/Spliterator; +11 -1: but found +6 -1: adjust +11 -1: isLowerCase +29 -1: sun/reflect/ReflectionFactory +98 -1: (Ljava/util/SortedSet;Ljava/lang/Class;)Ljava/util/SortedSet; +18 -1: [Ljava/lang/Error; +5 -1: entry +14 -1: refreshVersion +8 -1: (IIIII)V +22 -1: unmodifiableCollection +6 -1: putAll +22 -1: offsetByCodePointsImpl +26 -1: (Ljava/lang/String;[BII)[C +46 -1: (Ljava/net/URLClassLoader;Ljava/lang/String;)V +4 -1: /LF= +9 -1: Bits.java +30 -1: [Ljava/util/WeakHashMap$Entry; +19 -1: getLastModifiedTime +44 -1: [Ljava/lang/Thread$UncaughtExceptionHandler; +11 -1: getZoneInfo +6 -1: lookup +19 -1: MapReduceValuesTask +18 -1: isVarargsCollector +38 -1: java/util/jar/JarFile$JarEntryIterator +11 -1: getJarIndex +9 -1: getByName +42 -1: (Ljava/lang/Object;JLjava/lang/Object;JJ)V +71 -1: (Ljava/lang/invoke/LambdaForm$Name;I)Ljava/lang/invoke/LambdaForm$Name; +30 -1: java/net/ContentHandlerFactory +54 -1: (Ljava/lang/Class<*>;I)Ljava/lang/invoke/MethodHandle; +12 -1: getSignature +9 -1: parseLong +25 -1: DEBUG_METHOD_HANDLE_NAMES +15 -1: runFinalization +13 -1: 0000000000000 +28 -1: ()[Ljava/lang/reflect/Field; +37 -1: ([Ljava/lang/ClassValue$Entry<*>;II)V +13 -1: gcInfoBuilder +64 -1: (JLjava/util/function/BiFunction;Ljava/util/function/Consumer;)V +5 -1: cnfe1 +8 -1: setShort +28 -1: (C)Ljava/lang/StringBuilder; +44 -1: (Ljava/nio/LongBuffer;)Ljava/nio/LongBuffer; +70 -1: (Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class<*>; +33 -1: java/lang/TypeNotPresentException +5 -1: \n +20 -1: acquireInterruptibly +21 -1: (I)Ljava/lang/String; +24 -1: (Ljava/io/PrintWriter;)V +16 -1: convertArguments +32 -1: Ljava/net/MalformedURLException; +15 -1: linkToInterface +39 -1: java/lang/Throwable$PrintStreamOrWriter +10 -1: iso8859_13 +13 -1: hasPrimitives +10 -1: iso8859_15 +145 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Class<*>;)Ljava/lang/invoke/CallSite; +8 -1: equalPDs +28 -1: (Ljava/io/FileDescriptor;J)V +7 -1: newLine +43 -1: (Ljava/lang/Class<*>;I)Ljava/lang/Class<*>; +8 -1: addEntry +30 -1: java/util/WeakHashMap$EntrySet +14 -1: USE_OLDMAPPING +39 -1: (Ljava/io/DataInput;)Ljava/lang/String; +12 -1: LF_EX_LINKER +27 -1: java/lang/invoke/MethodType +23 -1: JavaSecurityAccess.java +23 -1: isLocalOrAnonymousClass +19 -1: Expanded arguments: +18 -1: sun/nio/cs/Unicode +40 -1: ()Ljava/nio/charset/spi/CharsetProvider; +23 -1: ([BLjava/lang/String;)V +7 -1: default +13 -1: highestOneBit +9 -1: isDefault +28 -1: (IF)Ljava/lang/StringBuffer; +31 -1: ()Ljava/util/ListIterator; +4 -1: base +23 -1: newPermissionCollection +7 -1: version +15 -1: Permission.java +41 -1: java/lang/invoke/LambdaForm$NamedFunction +8 -1: isQueued +24 -1: ([Ljava/lang/Class<*>;)I +64 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToIntTask +16 -1: checkInitialized +37 -1: java/lang/ClassLoader$ParallelLoaders +5 -1: ([B)I +23 -1: Lsun/misc/URLClassPath; +9 -1: usr_paths +10 -1: Queue.java +43 -1: (Ljava/io/File;Ljava/nio/charset/Charset;)V +64 -1: (Ljava/lang/invoke/MethodTypeForm;)Ljava/lang/invoke/MemberName; +3 -1: tid +23 -1: JarIndex-Version: 1.0\n\n +33 -1: (I)Ljava/nio/charset/CoderResult; +5 -1: ([B)V +10 -1: isInstance +25 -1: unmappableCharacterAction +11 -1: queueLength +5 -1: ([B)Z +10 -1: freeMemory +47 -1: java/util/ArrayPrefixHelpers$DoubleCumulateTask +52 -1: (Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)V +41 -1: Ljava/util/Collections$ReverseComparator; +16 -1: copyToShortArray +206 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z +38 -1: sun/launcher/LauncherHelper$SizePrefix +17 -1: ACCESS_PERMISSION +17 -1: ReverseComparator +30 -1: ()Ljava/lang/ClassValue$Entry; +17 -1: AF_PUTSTATIC_INIT +6 -1: (IIB)I +19 -1: java/nio/file/Files +35 -1: (Z)[Ljava/lang/reflect/Constructor; +20 -1: INVALID_FIELD_OFFSET +17 -1: initializeHeaders +10 -1: management +10 -1: targetType +61 -1: (Ljava/util/SortedSet;Ljava/lang/Class;)Ljava/util/SortedSet; +5 -1: ascii +8 -1: validate +78 -1: Ljava/util/concurrent/ConcurrentHashMap; +25 -1: sun/nio/cs/UTF_16$Decoder +36 -1: sun/management/DiagnosticCommandImpl +24 -1: unmodifiableNavigableMap +18 -1: canonicalizeScript +29 -1: Lsun/misc/JavaSecurityAccess; +74 -1: ([JLjava/util/function/IntToLongFunction;)Ljava/util/function/IntConsumer; +38 -1: DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING +11 -1: languageTag +33 -1: java/lang/invoke/VolatileCallSite +18 -1: setRequestProperty +6 -1: 0x%02X +20 -1: (Ljava/lang/Float;)I +35 -1: (Ljava/nio/charset/CoderResult$1;)V +24 -1: (Ljava/lang/Object;JJB)V +21 -1: synchronizedSortedSet +59 -1: (Ljava/util/function/ToLongFunction;)Ljava/util/Comparator; +30 -1: av.length == arity: av.length= +7 -1: $VALUES +27 -1: RandomNumberGeneratorHolder +3 -1: tlr +43 -1: java/util/ArraysParallelSortHelpers$FJFloat +28 -1: ()[Ljava/io/File$PathStatus; +26 -1: invalid extra field length +13 -1: getExtensions +7 -1: PARAMS0 +7 -1: PARAMS1 +30 -1: [Ljava/lang/invoke/MemberName; +7 -1: PARAMS2 +31 -1: java/lang/AbstractStringBuilder +161 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/function/BiFunction;Ljava/util/function/Consumer;)V +4 -1: repl +19 -1: ()Ljava/lang/Class; +24 -1: BufferedInputStream.java +9 -1: sizeCache +8 -1: READLINK +9 -1: metaIndex +18 -1: getLocalizedObject +6 -1: filter +58 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V +140 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; +24 -1: Ljava/util/HashMap$Node; +35 -1: (Lsun/nio/cs/FastCharsetProvider;)V +8 -1: dispatch +19 -1: sun.stderr.encoding +130 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/List; +51 -1: Ljava/util/concurrent/ConcurrentHashMap$ValuesView; +30 -1: sun.reflect.inflationThreshold +20 -1: MutableCallSite.java +26 -1: invokeWithArgumentsTracing +7 -1: getters +38 -1: ()[Ljava/lang/reflect/TypeVariable<*>; +46 -1: ([DLjava/util/function/DoubleBinaryOperator;)V +5 -1: klass +13 -1: publicMethods +37 -1: ()[Ljava/lang/reflect/Constructor<*>; +126 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +6 -1: FJLong +20 -1: canBeStaticallyBound +17 -1: getTimezoneOffset +9 -1: ALL_TYPES +3 -1: toV +8 -1: packages +15 -1: codePointBefore +10 -1: getCountry +13 -1: getDSTSavings +100 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetDecoder;)Lsun/nio/cs/StreamDecoder; +50 -1: java/util/ArraysParallelSortHelpers$FJFloat$Sorter +20 -1: hasNonVoidPrimitives +7 -1: syncAll +41 -1: domain dump all domains in context +59 -1: Ljava/util/Hashtable; +16 -1: ForEachEntryTask +18 -1: vminfoIsConsistent +26 -1: (ZLjava/util/Comparator;)V +9 -1: Lock.java +31 -1: Lsun/reflect/ReflectionFactory; +8 -1: (I[BII)I +23 -1: doesExtendFXApplication +87 -1: java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl +11 -1: windows-31j +28 -1: sun/misc/URLClassPath$Loader +17 -1: getEntryAfterMiss +47 -1: ([Ljava/lang/reflect/Field;Ljava/lang/String;)J +44 -1: Ljava/util/List; +10 -1: openStream +31 -1: Ljava/net/UnknownHostException; +19 -1: bad reference kind +29 -1: ()Ljava/nio/MappedByteBuffer; +9 -1: H_UPALPHA +37 -1: (Ljava/util/function/UnaryOperator;)V +25 -1: FAKE_METHOD_HANDLE_INVOKE +4 -1: peek +25 -1: java/util/Hashtable$Entry +18 -1: getMemberRefInfoAt +37 -1: Ljava/util/WeakHashMap$Entry; +14 -1: resolvedHandle +27 -1: ()Ljava/util/Iterator; +61 -1: Ljava/util/Map; +6 -1: static +50 -1: (Ljava/net/URLClassLoader;)Lsun/misc/URLClassPath; +38 -1: (Ljava/lang/Class;)[Ljava/lang/Object; +41 -1: (Ljava/util/SortedSet;Ljava/lang/Class;)V +41 -1: java/lang/invoke/WrongMethodTypeException +5 -1: group +10 -1: readObject +13 -1: getParentFile +14 -1: daylightSaving +15 -1: eagerValidation +36 -1: (Ljava/io/File;)Lsun/misc/MetaIndex; +18 -1: reduceEntriesToInt +15 -1: INITIAL_ENTRIES +18 -1: AtomicInteger.java +7 -1: .length +128 -1: Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; +6 -1: asList +21 -1: unmodifiableSortedSet +22 -1: ([B)Ljava/util/BitSet; +5 -1: check +64 -1: (Ljava/util/jar/JarFile;Lsun/misc/MetaIndex;)Lsun/misc/JarIndex; +35 -1: ()Ljava/nio/charset/CharsetEncoder; +4 -1: oome +25 -1: ()Lsun/misc/URLClassPath; +27 -1: (Ljava/io/FilePermission;)V +29 -1: IllegalArgumentException.java +17 -1: jvmSpecialVersion +21 -1: Ljava/util/ArrayList; +13 -1: packagePrefix +27 -1: (Ljava/io/FilePermission;)Z +11 -1: canonicalID +82 -1: Ljava/lang/Object;Ljava/util/Comparator;Ljava/io/Serializable; +24 -1: java.launcher.opt.footer +13 -1: NativeLibrary +37 -1: (Ljava/lang/String;J)Ljava/lang/Long; +16 -1: longBitsToDouble +6 -1: getKey +22 -1: (JLjava/lang/String;)V +14 -1: ensureCapacity +69 -1: (Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object; +22 -1: java/lang/Thread$State +50 -1: ()Ljava/util/Iterator; +4 -1: 7bit +46 -1: (Ljava/lang/Class<+Ljava/lang/ClassLoader;>;)Z +76 -1: (ILjava/util/List;>;)[Ljava/lang/invoke/LambdaForm$Name; +3 -1: ttb +12 -1: UTF_16LE_BOM +9 -1: remainder +40 -1: ()Lsun/reflect/generics/visitor/Reifier; +22 -1: [Ljava/lang/Throwable; +17 -1: EMPTY_ENUMERATION +13 -1: erasedInvoker +46 -1: Ljava/nio/charset/IllegalCharsetNameException; +10 -1: UnicodeBig +53 -1: ()Ljava/util/Map; +12 -1: MAX_EXPONENT +10 -1: Enumerator +15 -1: charset decoder +11 -1: AF_GETFIELD +12 -1: | getInvoker +74 -1: (Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult; +14 -1: toUnsignedLong +46 -1: java/lang/invoke/MethodHandleNatives$Constants +29 -1: java version "1.8.0-internal" +21 -1: ([Ljava/lang/Class;)I +16 -1: UPPERCASE_LETTER +22 -1: newConstantPerfCounter +6 -1: signum +9 -1: getField0 +38 -1: java/nio/charset/CoderMalfunctionError +21 -1: [Ljava/lang/Runnable; +11 -1: putIfAbsent +30 -1: java/util/Collections$EmptySet +22 -1: (I)[Ljava/lang/String; +34 -1: Ljava/security/SecurityPermission; +49 -1: ([Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +190 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$ReduceEntriesTask;Ljava/util/function/BiFunction;)V +22 -1: Not an annotation type +34 -1: java/io/ObjectInputStream$GetField +50 -1: (Lsun/reflect/FieldInfo;)Ljava/lang/reflect/Field; +32 -1: Ljava/lang/NoSuchFieldException; +70 -1: (Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)Ljava/lang/Object; +9 -1: mergeSort +77 -1: (ITK;TV;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; +21 -1: sun/nio/cs/ISO_8859_1 +8 -1: DST_MASK +21 -1: Ljava/lang/Throwable; +108 -1: (Ljava/lang/ref/SoftReference;>;I)Ljava/lang/Class$ReflectionData; +32 -1: java/util/Arrays$LegacyMergeSort +59 -1: ()[Ljava/lang/reflect/TypeVariable;>; +16 -1: parseUnsignedInt +36 -1: ([D)Ljava/util/Spliterator$OfDouble; +26 -1: SPECIFY_HANDLER_PERMISSION +13 -1: primitiveType +17 -1: threadStartFailed +21 -1: (J)Ljava/lang/String; +23 -1: setClassAssertionStatus +28 -1: java/util/Hashtable$EntrySet +28 -1: Non-positive maxBytesPerChar +19 -1: getApplicationClass +14 -1: SentinelHolder +15 -1: staticFieldBase +25 -1: setDefaultRequestProperty +66 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedValueTask +8 -1: threadID +9 -1: getFields +15 -1: LineNumberTable +38 -1: java/util/Collections$CheckedSortedSet +14 -1: jdkBuildNumber +6 -1: divide +46 -1: (Ljava/io/BufferedWriter;Ljava/lang/String;Z)V +20 -1: java/lang/Terminator +92 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/lang/String;Ljava/net/URL;Ljava/util/jar/JarEntry;)V +6 -1: force0 +10 -1: getThreads +34 -1: java/util/IllformedLocaleException +115 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/FieldRepository; +9 -1: testFlags +11 -1: getLanguage +36 -1: java/util/function/IntBinaryOperator +12 -1: Suppressed: +10 -1: isMandated +23 -1: MethodAccessorImpl.java +28 -1: (Ljava/util/zip/ZipEntry;)[B +27 -1: Ljava/util/Hashtable$Entry; +5 -1: table +10 -1: Short.java +19 -1: ReferenceQueue.java +8 -1: setTabAt +26 -1: ()Lsun/invoke/empty/Empty; +53 -1: (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum; +74 -1: (ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node; +19 -1: changeParameterType +61 -1: Ljava/util/Map; +23 -1: (Ljava/lang/Object;IF)V +32 -1: (I)Ljava/util/ListIterator; +6 -1: unread +12 -1: isSubclassOf +6 -1: (JJJ)V +3 -1: Key +105 -1: (Ljava/util/HashMap;[Ljava/util/HashMap$Node;ITK;TV;)Ljava/util/HashMap$TreeNode; +14 -1: x-utf-16le-bom +22 -1: ()Ljava/nio/IntBuffer; +104 -1: (Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; +21 -1: removeFirstOccurrence +21 -1: sun/misc/DoubleConsts +23 -1: ()Ljava/util/SortedSet; +11 -1: getManEntry +23 -1: URI is not hierarchical +7 -1: replace +16 -1: getDisplayScript +11 -1: ISO_8859-15 +16 -1: permuteArguments +5 -1: (JI)C +41 -1: Error decoding percent encoded characters +22 -1: ([I)Ljava/lang/String; +31 -1: java/lang/management/ThreadInfo +9 -1: useCaches +22 -1: withInternalMemberName +5 -1: (JI)I +5 -1: (JI)J +67 -1: Ljava/lang/Object;Ljava/util/Collection; +95 -1: (Ljava/util/jar/JarFile;[Ljava/security/CodeSource;)Ljava/util/Enumeration; +7 -1: release +56 -1: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String; +5 -1: (JI)V +46 -1: (Ljava/util/Iterator;I)Ljava/util/Spliterator; +18 -1: verifyMemberAccess +9 -1: warning: +23 -1: java/lang/reflect/Field +67 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)V +10 -1: SizePrefix +15 -1: setJavaIOAccess +6 -1: (JI)[B +10 -1: ST_FLUSHED +10 -1: resolution +9 -1: ST_CODING +16 -1: sun/misc/Cleaner +21 -1: (Ljava/lang/Class;)[B +18 -1: WeakReference.java +41 -1: (Ljava/util/List;Ljava/util/Comparator;)V +18 -1: printPropertyValue +3 -1: 813 +22 -1: setRunFinalizersOnExit +4 -1: init +44 -1: ()Ljava/util/Iterator; +3 -1: 819 +12 -1: listIterator +8 -1: , arity= +24 -1: (Ljava/util/ArrayList;)I +49 -1: (IJLjava/io/FileDescriptor;Ljava/lang/Runnable;)V +10 -1: principals +17 -1: x-ISO-2022-CN-CNS +22 -1: (Ljava/lang/Object;F)V +14 -1: setReadTimeout +19 -1: getProtectionDomain +13 -1: pathSeparator +12 -1: getAndSetInt +58 -1: (Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale; +11 -1: setWritable +4 -1: perf +50 -1: ()Ljava/util/concurrent/ConcurrentHashMap; +6 -1: LOCTIM +6 -1: status +11 -1: replaceName +52 -1: (Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer; +9 -1: nextToken +13 -1: dropArguments +20 -1: RECOGNIZED_MODIFIERS +14 -1: getInputStream +9 -1: readFully +25 -1: (CLjava/nio/CharBuffer;)I +24 -1: sun/misc/PathPermissions +10 -1: malformedN +9 -1: n is null +19 -1: instanceof Double: +13 -1: markSupported +26 -1: fromMethodDescriptorString +43 -1: [Ljava/util/concurrent/locks/ReentrantLock; +17 -1: parseUnsignedLong +33 -1: Lsun/misc/URLClassPath$JarLoader; +26 -1: (Ljava/io/OutputStream;I)V +6 -1: L_DASH +17 -1: EmptyNavigableMap +19 -1: CharsetDecoder.java +18 -1: makeDynamicInvoker +12 -1: URLUtil.java +27 -1: ()Ljava/util/Iterator; +9 -1: initTable +11 -1: getFragment +7 -1: isLower +20 -1: getMethodOrFieldType +29 -1: java/util/function/BiFunction +10 -1: access$700 +3 -1: 850 +7 -1: UTC2037 +43 -1: java/util/ArraysParallelSortHelpers$FJShort +9 -1: toSTZTime +10 -1: access$702 +3 -1: 852 +8 -1: hashCode +3 -1: 855 +44 -1: (Ljava/lang/ThreadLocal;Ljava/lang/Object;)V +3 -1: 857 +3 -1: 858 +5 -1: erase +55 -1: ()Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>; +47 -1: (Ljava/util/Iterator;JI)Ljava/util/Spliterator; +38 -1: Ljava/nio/charset/spi/CharsetProvider; +22 -1: can't deserialize enum +13 -1: LF_EX_INVOKER +18 -1: java/text/Collator +18 -1: Zero length string +49 -1: ()Ljava/util/Iterator; +5 -1: amd64 +12 -1: getNameCount +7 -1: inCheck +52 -1: (Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)V +53 -1: (ILjava/lang/CharSequence;II)Ljava/lang/StringBuffer; +21 -1: java/util/WeakHashMap +8 -1: throws +52 -1: (Ljava/util/concurrent/ConcurrentHashMap$TreeNode;)Z +55 -1: Ljava/lang/ref/SoftReference; +16 -1: emptyEnumeration +3 -1: 862 +89 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;ILjava/lang/Class;)Ljava/util/List; +3 -1: 866 +55 -1: Lsun/reflect/generics/repository/ConstructorRepository; +35 -1: (Ljava/lang/ref/ReferenceQueue$1;)V +33 -1: java/util/Collections$CheckedList +18 -1: prefetchReadStatic +7 -1: (JI[I)I +78 -1: (Ljava/lang/ThreadLocal$ThreadLocalMap;)Ljava/lang/ThreadLocal$ThreadLocalMap; +7 -1: ordinal +22 -1: FilterInputStream.java +26 -1: java/util/zip/ZipConstants +28 -1: JVM cannot find invoker for +43 -1: sun/reflect/generics/parser/SignatureParser +51 -1: (Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)V +73 -1: (Ljava/util/function/ToIntFunction;Ljava/lang/Object;Ljava/lang/Object;)I +17 -1: StringBuffer.java +62 -1: ([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V +6 -1: equals +9 -1: formatter +3 -1: 874 +35 -1: newGetShortIllegalArgumentException +74 -1: (Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult; +3 -1: ucp +60 -1: ([Ljava/lang/ClassValue$Entry;I)Ljava/lang/ClassValue$Entry; +6 -1: create +17 -1: makeReinvokerForm +18 -1: csisolatincyrillic +15 -1: incrementAndGet +24 -1: maybeInstantiateVerifier +33 -1: ()Ljava/nio/channels/FileChannel; +6 -1: class +16 -1: getAnnotatedType +43 -1: (Ljava/lang/reflect/Type;)Ljava/lang/Class; +9 -1: HASH_BITS +12 -1: placeInCache +38 -1: java/util/Collections$SynchronizedList +89 -1: (Ljava/net/URL;Ljava/util/jar/JarFile;Ljava/util/jar/JarEntry;)Ljava/security/CodeSource; +22 -1: (Ljava/lang/String;I)B +20 -1: Ljava/util/TimeZone; +16 -1: sun.java.command +28 -1: java/util/WeakHashMap$Values +10 -1: X-UTF-16BE +22 -1: (Ljava/lang/String;I)I +26 -1: java/nio/DirectCharBufferS +99 -1: (Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class<*>; +22 -1: (Ljava/lang/String;I)J +26 -1: java/nio/DirectCharBufferU +54 -1: (Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal; +21 -1: java/util/AbstractSet +37 -1: (Ljava/lang/String;)Ljava/lang/Short; +36 -1: Ljava/nio/charset/CoderResult$Cache; +22 -1: (Ljava/lang/String;I)S +15 -1: Ljava/util/Map; +59 -1: (Ljava/lang/reflect/Type;)Ljava/lang/reflect/AnnotatedType; +22 -1: (Ljava/lang/String;I)V +10 -1: getAddress +25 -1: java/nio/DirectIntBufferS +11 -1: IMPL_LOOKUP +3 -1: uee +7 -1: addTime +37 -1: sun/security/action/GetPropertyAction +25 -1: java/nio/DirectIntBufferU +21 -1: javaUtilZipFileAccess +34 -1: java/util/Collections$CheckedQueue +11 -1: readResolve +22 -1: (Ljava/lang/String;I)Z +11 -1: findVirtual +63 -1: (Ljava/lang/String;Ljava/lang/String;)Lsun/security/util/Debug; +22 -1: getDeclaredAnnotations +16 -1: Collections.java +18 -1: invalid entry size +49 -1: java/util/concurrent/ConcurrentHashMap$TableStack +32 -1: java/util/AbstractSequentialList +4 -1: int0 +16 -1: MAXIMUM_CAPACITY +53 -1: ()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; +4 -1: int1 +4 -1: int2 +4 -1: int3 +119 -1: (Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;I)Lsun/reflect/MethodAccessor; +7 -1: variant +39 -1: Lsun/reflect/annotation/AnnotationType; +11 -1: arrayOffset +24 -1: ()Ljava/util/LinkedList; +31 -1: java/lang/ClassCircularityError +17 -1: java/lang/Package +10 -1: ccsid00858 +27 -1: java/io/ExpiringCache$Entry +16 -1: newFieldAccessor +67 -1: (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object; +99 -1: Lsun/reflect/generics/repository/GenericDeclRepository; +53 -1: (Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)V +53 -1: Ljava/util/concurrent/ConcurrentHashMap$Node; +58 -1: ([TT;)Ljava/util/stream/Stream; +54 -1: (Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Z +8 -1: Kerberos +29 -1: ()Ljava/nio/channels/Channel; +12 -1: java_version +45 -1: (Lsun/reflect/DelegatingMethodAccessorImpl;)V +10 -1: canConvert +136 -1: (Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V +26 -1: getDayOfWeekDateOnOrBefore +7 -1: INVALID +10 -1: TERMINATED +41 -1: Ljava/security/cert/CertificateException; +74 -1: (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String; +30 -1: [Ljava/lang/invoke/MethodType; +13 -1: getMethodName +7 -1: Factory +34 -1: (Ljava/util/function/BiConsumer;)V +11 -1: unlinkFirst +37 -1: lambda$getDeclaredAnnotationsByType$0 +77 -1: (Ljava/nio/ByteBuffer;ILjava/nio/CharBuffer;II)Ljava/nio/charset/CoderResult; +20 -1: java/util/ArrayDeque +65 -1: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V +49 -1: (Ljava/util/ArrayDeque;Ljava/util/ArrayDeque$1;)V +22 -1: (J)Ljava/time/Instant; +17 -1: URLClassPath.java +6 -1: 8859_1 +25 -1: stopRemoteManagementAgent +6 -1: 8859_2 +17 -1: containsNullValue +6 -1: 8859_4 +6 -1: 8859_5 +26 -1: (Ljava/nio/ByteBuffer;IC)V +76 -1: (Ljava/lang/Runnable;Ljava/security/AccessControlContext;)Ljava/lang/Thread; +6 -1: 8859_7 +6 -1: 8859_9 +8 -1: setHours +9 -1: File.java +21 -1: isIdentifierIgnorable +5 -1: ([C)I +4 -1: (B)I +10 -1: codesource +77 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;Ljava/security/AccessControlContext;)V +4 -1: (B)J +6 -1: isFair +30 -1: java/lang/NullPointerException +10 -1: IMPL_NAMES +13 -1: Runnable.java +26 -1: Ill-formed extension key: +17 -1: ()[Ljava/io/File; +18 -1: javaSecurityAccess +16 -1: equalsIgnoreCase +4 -1: (B)V +5 -1: ([C)V +25 -1: Ljava/io/FileInputStream; +14 -1: trackJavaUsage +20 -1: Ljava/io/FileSystem; +10 -1: iso_8859_1 +4 -1: (B)Z +30 -1: java/lang/NoClassDefFoundError +152 -1: (Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode; +19 -1: java/lang/Cloneable +55 -1: ([Ljava/lang/Object;Ljava/util/function/IntFunction;I)V +27 -1: (Ljava/nio/ByteBuffer;IJZ)V +21 -1: ()Lsun/misc/JarIndex; +72 -1: ([Ljava/security/CodeSource;)Ljava/util/Enumeration; +64 -1: (Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object; +20 -1: invalid entry crc-32 +9 -1: BASECOUNT +29 -1: java/security/BasicPermission +52 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/io/File; +7 -1: ([B[B)Z +17 -1: EMPTY_ELEMENTDATA +61 -1: (Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; +49 -1: (ILjava/lang/Class;)Ljava/lang/invoke/MethodType; +29 -1: sun/reflect/MagicAccessorImpl +121 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/ConstructorRepository; +6 -1: ([II)I +40 -1: (Ljava/lang/String;I)Ljava/lang/Integer; +25 -1: java.content.handler.pkgs +63 -1: ()Ljava/util/Set;>; +13 -1: parameterList +6 -1: rebind +16 -1: isSuperInterface +6 -1: ([II)V +14 -1: currentRuntime +9 -1: BA_EXISTS +15 -1: END_PUNCTUATION +15 -1: no such method +19 -1: getAndVerifyPackage +4 -1: wrap +24 -1: checkAwtEventQueueAccess +7 -1: ibm-437 +4 -1: open +47 -1: (Ljava/nio/ByteBuffer;[BI)Ljava/nio/ByteBuffer; +21 -1: ADDRESS_BITS_PER_WORD +13 -1: isConstructor +12 -1: getUseCaches +27 -1: sun/util/locale/LocaleUtils +4 -1: koi8 +23 -1: getParameterAnnotations +9 -1: providers +57 -1: ([Ljava/lang/Object;Ljava/util/function/BinaryOperator;)V +24 -1: Lsun/misc/JavaNetAccess; +22 -1: ([J)Ljava/lang/String; +7 -1: p-1022$ +6 -1: isType +63 -1: Ljava/util/Map; +21 -1: pageAlignDirectMemory +18 -1: getManifestDigests +37 -1: [Ljava/lang/reflect/AccessibleObject; +7 -1: decrypt +54 -1: (Lsun/misc/URLClassPath$JarLoader;)Ljava/util/HashMap; +32 -1: lambda$comparingByKey$bbdbfea9$1 +21 -1: hasGenericInformation +31 -1: java/nio/charset/CharsetEncoder +15 -1: setTargetNormal +3 -1: ulp +18 -1: argumentTypesMatch +12 -1: getDayOfYear +8 -1: closeAll +76 -1: Ljava/lang/ref/SoftReference; +6 -1: concat +9 -1: getLongAt +16 -1: hasBeenFinalized +32 -1: [Ljava/util/Hashtable$Entry<**>; +23 -1: CheckedRandomAccessList +106 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI; +21 -1: defineClassInPackage. +11 -1: ([III[III)V +8 -1: toZoneId +34 -1: SUBCLASS_IMPLEMENTATION_PERMISSION +55 -1: java/util/concurrent/atomic/AtomicReferenceFieldUpdater +8 -1: isDirect +10 -1: ALL_ACCESS +12 -1: isRegistered +29 -1: ForEachTransformedMappingTask +5 -1: LIJFD +23 -1: (Ljava/util/TimeZone;)V +23 -1: (Ljava/util/TimeZone;)Z +20 -1: java/lang/Appendable +29 -1: Lsun/util/calendar/Gregorian; +9 -1: charValue +8 -1: ONE_HOUR +38 -1: (Ljava/util/Locale;)Ljava/lang/String; +7 -1: script= +10 -1: X-UTF-16LE +7 -1: ENTRIES +6 -1: detach +38 -1: certpath PKIX CertPathBuilder and +14 -1: setLanguageTag +13 -1: isAlphaString +13 -1: interpretName +9 -1: dayOfWeek +88 -1: (Ljava/lang/Class;ZLjava/lang/String;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/List; +91 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)Ljava/lang/invoke/MethodHandle; +13 -1: addTypeString +17 -1: VectorSpliterator +12 -1: MILLISECONDS +6 -1: CENCOM +10 -1: KeySetView +18 -1: getTargetException +7 -1: H_ALPHA +32 -1: sun/util/locale/BaseLocale$Cache +25 -1: [Ljava/lang/CharSequence; +7 -1: Builder +4 -1: left +19 -1: BootClassPathHolder +12 -1: publicFields +11 -1: windows-437 +9 -1: EMPTY_SET +26 -1: GET_STACK_TRACE_PERMISSION +6 -1: copyOf +14 -1: aliases_IBM737 +9 -1: writeLong +35 -1: (JLjava/util/concurrent/TimeUnit;)Z +70 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; +22 -1: getAnnotatedReturnType +41 -1: (Ljava/lang/String;[BII)Ljava/lang/Class; +8 -1: ,maxpri= +29 -1: handleParameterNumberMismatch +26 -1: ts timestamping +11 -1: checkListen +10 -1: SourceFile +44 -1: (Ljava/lang/String;)Ljava/util/jar/JarEntry; +17 -1: weakCompareAndSet +9 -1: timestamp +21 -1: (Z)Ljava/lang/String; +12 -1: doneWithMeta +20 -1: makeCollectArguments +52 -1: (JLjava/util/function/BiFunction;)Ljava/lang/Object; +10 -1: searchKeys +48 -1: sun/reflect/SerializationConstructorAccessorImpl +69 -1: (Ljava/lang/reflect/Constructor<*>;)Lsun/reflect/ConstructorAccessor; +19 -1: ()Lsun/misc/Unsafe; +11 -1: deepEquals0 +7 -1: GB18030 +13 -1: ValueIterator +75 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +28 -1: java/util/PropertyPermission +6 -1: CENCRC +3 -1: url +3 -1: L_L +19 -1: Certificate too big +33 -1: sun/reflect/DelegatingClassLoader +16 -1: lambda$stream$57 +11 -1: BitSet.java +13 -1: sun/misc/Perf +26 -1: Ljava/util/SimpleTimeZone; +7 -1: (BBBB)I +24 -1: sun/misc/FloatingDecimal +21 -1: sun/util/PreHashedMap +8 -1: utf-16be +11 -1: isInherited +83 -1: (Ljava/util/Properties;Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V +52 -1: (Ljava/lang/Class;Ljava/security/ProtectionDomain;)V +11 -1: getDoOutput +18 -1: asVarargsCollector +22 -1: NoSuchMethodError.java +18 -1: getStackTraceDepth +30 -1: (Ljava/io/File;)Ljava/net/URL; +15 -1: CURRENCY_SYMBOL +24 -1: Lsun/misc/JavaNioAccess; +6 -1: NATIVE +22 -1: Lsun/misc/PerfCounter; +63 -1: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToIntTask +30 -1: less than Character.MIN_RADIX +17 -1: isCallerSensitive +8 -1: shutdown +11 -1: STATE_GREEN +4 -1: next +10 -1: tryPresize +16 -1: CONSTRUCTOR_NAME +3 -1: MAY +21 -1: java.security.manager +20 -1: Lsun/misc/Contended; +16 -1: DISPLAY_LANGUAGE +6 -1: KeySet +9 -1: getScript +3 -1: utc +17 -1: TRACE_INTERPRETER +39 -1: (Ljava/lang/Object;I)Ljava/lang/String; +19 -1: getFieldAtIfLoaded0 +15 -1: methodFilterMap +54 -1: Ljava/util/Map; +45 -1: java/security/cert/Certificate$CertificateRep +43 -1: (Ljava/lang/String;)Lsun/util/calendar/Era; +34 -1: java/security/cert/X509Certificate +19 -1: versionsInitialized +11 -1: isDirectory +14 -1: aliases_IBM775 +38 -1: (Ljava/util/function/Consumer<-TE;>;)V +38 -1: (Ljava/lang/String;)Ljava/util/Locale; +40 -1: (Ljava/lang/String;Z)Lsun/misc/Resource; +14 -1: setDefaultZone +14 -1: highResCounter +78 -1: (Ljava/lang/ClassValue$Version;Ljava/lang/Object;)Ljava/lang/ClassValue$Entry; +16 -1: defaultUseCaches +40 -1: (Ljava/util/zip/ZipFile;)Ljava/util/Map; +24 -1: isSupplementaryCodePoint +15 -1: ISO_8859_1.java +13 -1: multiplyExact +126 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale; +8 -1: classMap +8 -1: wildcard +19 -1: getSimpleBinaryName +17 -1: illegal signature +14 -1: == basicType( +17 -1: ZipConstants.java +32 -1: [Ljava/lang/VirtualMachineError; +27 -1: ()Ljava/util/stream/Stream; +24 -1: (Ljava/lang/Exception;)V +21 -1: java/util/Enumeration +13 -1: newSetFromMap +8 -1: getenv.* +20 -1: sun/management/Agent +21 -1: sun/nio/cs/US_ASCII$1 +7 -1: comment +15 -1: appendAuthority +11 -1: hasWrappers +10 -1: dstOffset +24 -1: sun/reflect/ConstantPool +75 -1: (Ljava/util/jar/JarFile;[Ljava/security/CodeSource;)Ljava/util/Enumeration; +52 -1: (Ljava/util/jar/JarFile;)Ljava/util/jar/JarVerifier; +70 -1: Ljava/lang/Object;Ljava/security/PrivilegedAction; +14 -1: previousSetBit +17 -1: AF_GETSTATIC_INIT +15 -1: ArrayDeque.java +7 -1: boolean +25 -1: (I)Ljava/math/BigInteger; +146 -1: (Ljava/lang/ref/ReferenceQueue;>;Ljava/util/concurrent/ConcurrentMap<+Ljava/lang/ref/WeakReference;>;*>;)V +8 -1: getClass +8 -1: user.dir +6 -1: VALUES +5 -1: raise +39 -1: (JLjava/util/function/Consumer<-TV;>;)V +107 -1: Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +5 -1: print +8 -1: readChar +55 -1: (JLjava/util/TimeZone;)Lsun/util/calendar/CalendarDate; +56 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysTask +60 -1: Ljava/lang/Number;Ljava/lang/Comparable; +102 -1: (Ljava/util/SortedMap;)Ljava/util/SortedMap; +23 -1: printModifiersIfNonzero +14 -1: getterFunction +15 -1: ISO-10646-UCS-2 +14 -1: canonizeString +13 -1: getTotalSpace +24 -1: synchronizedNavigableSet +100 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)TT; +4 -1: ioex +24 -1: ()Ljava/nio/FloatBuffer; +14 -1: toBinaryString +7 -1: Segment +34 -1: ()Lsun/misc/JavaUtilZipFileAccess; +17 -1: setTargetVolatile +22 -1: (Ljava/util/List<*>;)V +51 -1: (ILjava/lang/CharSequence;)Ljava/lang/StringBuffer; +22 -1: (Ljava/util/List<*>;)Z +5 -1: (FI)F +11 -1: parseMethod +8 -1: Compiled +19 -1: java/util/SortedMap +7 -1: setByte +12 -1: getFieldType +8 -1: pageSize +14 -1: getCallerClass +9 -1: ensureObj +18 -1: refKindHasReceiver +10 -1: getZoneIds +24 -1: (Ljava/nio/CharBuffer;)I +47 -1: ()Lsun/reflect/generics/parser/SignatureParser; +8 -1: getIndex +24 -1: (Ljava/lang/Thread;TT;)V +18 -1: (Ljava/util/Map;)V +18 -1: (Ljava/util/Map;)Z +6 -1: random +10 -1: putAddress +64 -1: (Ljava/util/function/Consumer<-Ljava/util/Map$Entry;>;)V +24 -1: (Ljava/nio/CharBuffer;)V +8 -1: canCache +24 -1: (Ljava/nio/CharBuffer;)Z +9 -1: getIntAt0 +4 -1: sqrt +8 -1: makeLong +54 -1: ([Ljava/lang/Object;Ljava/util/function/IntFunction;)V +5 -1: (JJ)I +26 -1: javaIOFileDescriptorAccess +5 -1: (JJ)J +15 -1: != basicType: +36 -1: Ljava/lang/ref/ReferenceQueue<-TT;>; +5 -1: words +16 -1: sun.jnu.encoding +32 -1: (Ljava/lang/invoke/LambdaForm;)V +22 -1: ensureClassInitialized +16 -1: Ljava/util/List; +14 -1: varargsInvoker +5 -1: (JJ)V +20 -1: java/util/Properties +12 -1: getImplClass +21 -1: argumentTypesToString +5 -1: (JJ)Z +50 -1: java/util/Collections$SynchronizedRandomAccessList +17 -1: makeWrappedMember +21 -1: UnmodifiableSortedSet +22 -1: (ILjava/lang/Class;Z)V +3 -1: MIT +13 -1: bootClassPath +50 -1: (JLjava/util/function/Function;)Ljava/lang/Object; +74 -1: Ljava/util/HashMap$Node; +45 -1: (Ljava/util/Map$Entry;Ljava/util/Map$Entry;)I +12 -1: advanceProbe +10 -1: encoderFor +14 -1: DataInput.java +16 -1: java/lang/Double +3 -1: 912 +3 -1: 914 +3 -1: abs +3 -1: 915 +13 -1: currentThread +17 -1: ClassDefiner.java +32 -1: sun/misc/Launcher$ExtClassLoader +16 -1: Current state = +12 -1: elementCount +10 -1: unmaskNull +8 -1: csibm857 +32 -1: java/net/UnknownServiceException +10 -1: x-utf-16be +3 -1: acc +37 -1: Ljava/util/List; +23 -1: ([Ljava/lang/Thread;Z)I +17 -1: impliesIgnoreMask +23 -1: getGenericComponentType +51 -1: ()Lsun/reflect/generics/repository/ClassRepository; +34 -1: " not found. Will use interpreter. +38 -1: ()Ljava/security/AccessControlContext; +6 -1: final +8 -1: utf-16le +3 -1: 920 +3 -1: 923 +5 -1: (I)[C +43 -1: (Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer; +8 -1: csibm862 +34 -1: (Ljava/lang/ref/Reference<+TT;>;)Z +8 -1: csibm866 +20 -1: getParameterizedType +7 -1: (II[C)V +20 -1: [Ljava/lang/Package; +84 -1: (Ljava/lang/String;Ljava/security/ProtectionDomain;)Ljava/security/ProtectionDomain; +28 -1: SynchronizedRandomAccessList +18 -1: sun/misc/VMSupport +61 -1: java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry +3 -1: add +16 -1: ZipEntryIterator +11 -1: next_target +87 -1: (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class<*>; +4 -1: amod +12 -1: markedSkipLF +55 -1: java/util/concurrent/ConcurrentHashMap$EntrySpliterator +5 -1: lim= +29 -1: java/security/PermissionsHash +50 -1: (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; +19 -1: makePairwiseConvert +58 -1: (Ljava/lang/ClassValue$Entry;)V +8 -1: contents +11 -1: user.region +17 -1: RandomAccess.java +13 -1: singletonList +13 -1: policy,access +64 -1: Ljava/util/Map; +25 -1: (Ljava/lang/Appendable;)V +19 -1: (Ljava/util/List;)V +43 -1: (Ljava/lang/ClassLoader;Ljava/lang/Class;)V +19 -1: (Ljava/util/List;)Z +15 -1: America/Chicago +25 -1: (II)Ljava/nio/CharBuffer; +12 -1: getDayOfWeek +8 -1: ([BIIZ)V +28 -1: (Ljava/lang/reflect/Field;)I +28 -1: (Ljava/lang/reflect/Field;)J +18 -1: getDeclaringClass0 +11 -1: counterTime +30 -1: (Ljava/util/Collection;)V +28 -1: (Ljava/lang/reflect/Field;)V +31 -1: (IIIILjava/io/FileDescriptor;)V +25 -1: java/net/SocketPermission +20 -1: bad parameter count +18 -1: getHeaderFieldLong +26 -1: GetReflectionFactoryAction +19 -1: MIN_TRANSFER_STRIDE +17 -1: java/nio/Bits$1$1 +7 -1: getSize +33 -1: java/util/function/ToLongFunction +46 -1: (IILjava/lang/String;)Ljava/lang/StringBuffer; +10 -1: access$800 +65 -1: sun/misc/JavaSecurityProtectionDomainAccess$ProtectionDomainCache +26 -1: (Ljava/lang/ClassLoader;)V +25 -1: java/util/IdentityHashMap +26 -1: (Ljava/lang/ClassLoader;)Z +91 -1: (Ljava/util/function/ToIntFunction<-TT;>;)Ljava/util/Comparator; +26 -1: ([CIILjava/lang/String;I)I +12 -1: canonicalize +3 -1: val +8 -1: putCharB +12 -1: UTF_32LE_BOM +60 -1: (Ljava/security/CodeSource;)Ljava/security/ProtectionDomain; +44 -1: (Lsun/misc/SignalHandler;Lsun/misc/Signal;)V +26 -1: (Ljava/util/Enumeration;)V +11 -1: INVALIDATED +8 -1: putCharL +22 -1: (II)Ljava/lang/String; +7 -1: hasNext +5 -1: WRITE +20 -1: MIN_INITIAL_CAPACITY +13 -1: propertyNames +9 -1: Gregorian +13 -1: getExpiration +7 -1: minutes +7 -1: ostream +9 -1: java.lang +17 -1: forceStandardTime +9 -1: initWords +41 -1: java/lang/Thread$UncaughtExceptionHandler +9 -1: theUnsafe +27 -1: ForEachTransformedEntryTask +10 -1: forEncoder +31 -1: needsClassLoaderPermissionCheck +5 -1: ctime +25 -1: ()Ljava/nio/DoubleBuffer; +8 -1: getValue +66 -1: (Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale$Key; +42 -1: (Ljava/io/InputStream;Ljava/lang/String;)V +6 -1: august +14 -1: compileClasses +13 -1: javaNetAccess +22 -1: interpretWithArguments +4 -1: url: +14 -1: EMPTY_ITERATOR +60 -1: Ljava/util/WeakHashMap; +24 -1: java/util/jar/Attributes +12 -1: getOrDefault +19 -1: Pacific/Guadalcanal +33 -1: ()Ljava/lang/reflect/Constructor; +38 -1: java/util/Collections$UnmodifiableList +13 -1: basicTypeChar +22 -1: (Ljava/lang/String;J)J +14 -1: memberDefaults +42 -1: (Ljava/lang/Class<*>;[Ljava/lang/String;)V +38 -1: (Ljava/util/function/Consumer<-TK;>;)V +16 -1: LF_NEWINVSPECIAL +10 -1: classDepth +28 -1: [Ljava/io/ObjectStreamField; +46 -1: (Ljava/util/Collection;)Ljava/util/Collection; +91 -1: ([Ljava/lang/reflect/Method;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; +11 -1: getLocation +39 -1: (Ljava/lang/Class;[Ljava/lang/Class;Z)V +9 -1: loadTable +55 -1: Directory separator should not appear in library name: +7 -1: setTime +14 -1: getConstructor +4 -1: urls +25 -1: dispatchUncaughtException +77 -1: (ILjava/lang/Object;Ljava/lang/Class<*>;)Ljava/util/HashMap$TreeNode; +8 -1: modCount +8 -1: Opening +6 -1: ENDHDR +4 -1: cnfe +34 -1: DIRECTIONALITY_PARAGRAPH_SEPARATOR +10 -1: Asia/Amman +3 -1: MST +28 -1: DIRECTIONALITY_ARABIC_NUMBER +3 -1: all +4 -1: enum +8 -1: copyWith +12 -1: ([JI[IIJII)I +29 -1: Ljava/lang/annotation/Target; +7 -1: Thread- +14 -1: x-utf-32le-bom +38 -1: (ILjava/lang/management/MemoryUsage;)V +33 -1: Signal already used by VM or OS: +27 -1: (I)Ljava/lang/StringBuffer; +25 -1: java/text/Normalizer$Form +10 -1: x-utf-16le +34 -1: can not access a member of class +27 -1: (Ljava/nio/ByteBuffer;IFZ)V +28 -1: (Ljava/lang/ClassValue<*>;)V +16 -1: INITIAL_CAPACITY +23 -1: DirectMethodHandle.java +18 -1: reduceValuesToLong +41 -1: (Ljava/lang/String;Ljava/lang/Class<*>;)V +6 -1: unwrap +12 -1: threadStatus +5 -1: (DI)D +11 -1: fieldOffset +52 -1: java/util/concurrent/ConcurrentHashMap$EntryIterator +14 -1: ACCESS_EXECUTE +44 -1: (Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer; +29 -1: ([Ljava/lang/ThreadGroup;IZ)I +18 -1: LocalVariableTable +17 -1: ConstantPool.java +26 -1: (Ljava/nio/ByteBuffer;ID)V +4 -1: (C)B +3 -1: and +4 -1: head +126 -1: (Ljava/lang/reflect/GenericDeclaration;Lsun/reflect/generics/scope/Scope;)Lsun/reflect/generics/factory/CoreReflectionFactory; +4 -1: (C)C +16 -1: Pacific/Auckland +7 -1: Thread[ +5 -1: ([D)I +4 -1: (C)I +98 -1: ([Ljava/lang/reflect/Constructor;)[Ljava/lang/reflect/Constructor; +11 -1: fileHandler +30 -1: DIRECTIONALITY_NONSPACING_MARK +10 -1: (this Map) +14 -1: malformedCache +5 -1: ([D)V +4 -1: (C)V +26 -1: getUnicodeLocaleAttributes +4 -1: (C)Z +81 -1: (JLjava/util/function/ToLongBiFunction;JLjava/util/function/LongBinaryOperator;)J +46 -1: [Ljava/util/concurrent/ConcurrentHashMap$Node; +20 -1: Max. Heap Size: +24 -1: Ljava/lang/reflect/Type; +13 -1: EmptyIterator +8 -1: allocate +7 -1: FLUSHED +8 -1: exitVM.* +59 -1: (Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder; +19 -1: reduceEntriesToLong +15 -1: getISOLanguages +13 -1: CONSTANT_ZERO +23 -1: (I)Ljava/util/Iterator; +96 -1: Ljava/util/AbstractMap;Ljava/util/Map; +11 -1: isSynthetic +7 -1: lineBuf +30 -1: java/lang/annotation/Inherited +65 -1: Ljava/lang/Object;Ljava/lang/Iterable; +35 -1: (Ljava/lang/String;)[Ljava/io/File; +27 -1: java/security/cert/CertPath +26 -1: startRemoteManagementAgent +9 -1: shiftLeft +5 -1: stack +42 -1: (Ljava/lang/Class<*>;[Ljava/lang/Object;)V +11 -1: CheckedList +10 -1: replaceAll +86 -1: (Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode; +24 -1: (I)Ljava/nio/CharBuffer; +13 -1: image/vnd.fpx +15 -1: iso_8859-1:1987 +19 -1: (Ljava/lang/Long;)I +22 -1: sun/misc/SignalHandler +15 -1: ifModifiedSince +42 -1: (Ljava/lang/Class;)Ljava/lang/ClassLoader; +105 -1: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Class;I[Ljava/lang/invoke/MemberName;)I +22 -1: Negative timeout value +38 -1: Ljava/io/UnsupportedEncodingException; +11 -1: removeRange +13 -1: Compiler.java +6 -1: Sorter +8 -1: aliasSet +10 -1: UNASSIGNED +34 -1: lambda$comparingByValue$1065357e$1 +34 -1: ()Ljava/lang/Class$AnnotationData; +25 -1: sun/misc/Launcher$Factory +15 -1: getLongVolatile +8 -1: vmloader +10 -1: unicodebig +10 -1: closeables +31 -1: JavaIOFileDescriptorAccess.java +7 -1: static +3 -1: arg +21 -1: library can't be null +42 -1: java/util/ArraysParallelSortHelpers$FJByte +22 -1: getDeclaringExecutable +19 -1: runFinalizersOnExit +20 -1: simpleTimeZoneParams +13 -1: Modifier.java +14 -1: pkcs11keystore +6 -1: shared +30 -1: java/net/MalformedURLException +26 -1: ()[Lsun/util/calendar/Era; +13 -1: x-MS950-HKSCS +10 -1: relativize +40 -1: (Ljava/lang/String;JJ)Ljava/lang/String; +31 -1: java/util/HashMap$ValueIterator +29 -1: MODIFY_THREADGROUP_PERMISSION +38 -1: (Ljava/lang/String;)Ljava/lang/Object; +7 -1: destroy +37 -1: (Ljava/util/List;)[Ljava/lang/String; +18 -1: (Ljava/io/File;Z)V +32 -1: Ljava/util/HashMap$Node; +18 -1: interfaceModifiers +34 -1: java/util/LinkedList$LLSpliterator +7 -1: REF_??? +23 -1: java/net/ContentHandler +20 -1: +17 -1: [Ljava/lang/Byte; +6 -1: exitVM +3 -1: att +27 -1: sun/nio/cs/UTF_16BE$Encoder +6 -1: exists +28 -1: Ljava/util/Collection<+TE;>; +48 -1: (Ljava/lang/CharSequence;)Ljava/lang/Appendable; +6 -1: getMap +52 -1: ([Ljava/lang/Class;I)Ljava/lang/reflect/Constructor; +11 -1: stackTrace[ +21 -1: slowCheckMemberAccess +33 -1: ReflectiveOperationException.java +9 -1: versionId +56 -1: Wrong number of parameters in MethodParameters attribute +14 -1: isLowSurrogate +8 -1: csPCp852 +16 -1: copyConstructors +25 -1: ()Ljava/util/Spliterator; +9 -1: closeLock +17 -1: readUnsignedShort +7 -1: 8859_13 +7 -1: 8859_15 +13 -1: TARGET_OFFSET +26 -1: (Ljava/util/Hashtable;IZ)V +44 -1: (Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer; +46 -1: (Ljava/lang/reflect/Type;)Ljava/lang/Class<*>; +25 -1: DEFAULT_CONCURRENCY_LEVEL +36 -1: Ljava/util/List; +29 -1: sun.nio.PageAlignDirectMemory +37 -1: (Ljava/lang/Class;I)Ljava/lang/Class; +12 -1: encryptBlock +8 -1: parentOf +5 -1: H_HEX +11 -1: getFloatAt0 +24 -1: VirtualMachineError.java +18 -1: getDeclaredClasses +59 -1: (Ljava/lang/AbstractStringBuilder;)Ljava/lang/StringBuffer; +42 -1: (Ljava/util/List;>;)[C +37 -1: (Ljava/lang/String;)Ljava/lang/Float; +13 -1: Iterator.java +25 -1: (Ljava/io/PrintStream;I)V +9 -1: getObject +19 -1: [Ljava/lang/String; +7 -1: SIZECTL +11 -1: isUnderflow +27 -1: sun.nio.MaxDirectMemorySize +21 -1: isNonPublicProxyClass +13 -1: toCalendarDOW +9 -1: Type.java +14 -1: aliases_IBM850 +17 -1: emptyNavigableMap +14 -1: aliases_IBM852 +14 -1: aliases_IBM855 +14 -1: aliases_IBM857 +14 -1: aliases_IBM858 +15 -1: iso_8859-4:1988 +13 -1: UnicodeScript +8 -1: getCharB +17 -1: constructorMethod +27 -1: java/util/function/Function +20 -1: getProtectionDomain0 +8 -1: getCharL +32 -1: ([Ljava/io/File;)[Ljava/net/URL; +51 -1: (Ljava/lang/Class;Z)Ljava/lang/invoke/MethodHandle; +7 -1: getenv. +5 -1: stale +14 -1: aliases_IBM862 +32 -1: java/util/spi/LocaleNameProvider +14 -1: aliases_IBM866 +51 -1: ([Ljava/lang/Class;)Ljava/lang/reflect/Constructor; +6 -1: CENDSK +36 -1: java/util/Comparators$NullComparator +34 -1: UnsafeStaticFieldAccessorImpl.java +17 -1: staticFieldOffset +12 -1: prefetchRead +4 -1: help +34 -1: (Ljava/util/concurrent/TimeUnit;)J +8 -1: getChars +19 -1: java/lang/Throwable +34 -1: Annotation Type:\n Member types: +55 -1: (Ljava/lang/Class<*>;Ljava/security/ProtectionDomain;)V +14 -1: aliases_IBM874 +17 -1: getDisplayVariant +24 -1: Ljava/net/NetPermission; +15 -1: jvmMinorVersion +11 -1: subSequence +3 -1: x86 +6 -1: double +14 -1: checkSlotCount +20 -1: java/net/InetAddress +14 -1: Principal.java +8 -1: $,;:@&=+ +17 -1: ByteBuffered.java +21 -1: sun.misc.Perf.getPerf +11 -1: finishEntry +27 -1: sun.timezone.ids.oldmapping +26 -1: (ZLjava/io/OutputStream;)V +41 -1: (Ljava/lang/String;Z)Ljava/lang/Class<*>; +32 -1: generateSerializationConstructor +6 -1: Value +40 -1: (Ljava/lang/String;Ljava/lang/String;Z)V +16 -1: previousClearBit +7 -1: theProp +51 -1: (Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V +39 -1: com.sun.javafx.application.LauncherImpl +21 -1: URLStreamHandler.java +4 -1: in +14 -1: BIT_INDEX_MASK +125 -1: (Ljava/util/Comparator<-TK;>;)Ljava/util/Comparator;>; +49 -1: (Ljava/util/Set;Ljava/lang/Class;)Ljava/util/Set; +10 -1: scaleValue +27 -1: (Ljava/nio/ByteBuffer;IDZ)V +78 -1: (Ljava/util/Collection;[Ljava/lang/reflect/Field;)V +53 -1: (I)Ljava/util/Enumeration; +38 -1: java/lang/IncompatibleClassChangeError +60 -1: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsTask +23 -1: not a method or field: +35 -1: Ljava/nio/BufferUnderflowException; +4 -1: i386 +13 -1: US_ASCII.java +80 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)Ljava/lang/reflect/AnnotatedType; +21 -1: initializeSystemClass +6 -1: ([CI)I +18 -1: getBooleanProperty +35 -1: java/util/function/ToDoubleFunction +37 -1: (Ljava/lang/String;)Ljava/lang/Class; +28 -1: MapReduceEntriesToDoubleTask +38 -1: java/util/LinkedHashMap$LinkedEntrySet +8 -1: copySign +6 -1: ([CI)V +55 -1: sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule +12 -1: parseBoolean +3 -1: NET +3 -1: NEW +6 -1: Values +17 -1: getJavaLangAccess +9 -1: LocaleKey +3 -1: :-1 +30 -1: (Ljava/io/ObjectInputStream;)V +3 -1: NFC +3 -1: NFD +18 -1: SIMPLIFIED_CHINESE +28 -1: ()Ljava/lang/reflect/Method; +9 -1: localInit +37 -1: sun/util/locale/LocaleSyntaxException +15 -1: LambdaForm.java +5 -1: rtype +8 -1: field " +50 -1: (Ljava/lang/Class;Ljava/lang/ref/ReferenceQueue;)V +80 -1: (Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Class;IILjava/lang/String;[B[B)V +36 -1: java/lang/invoke/MethodHandleNatives +22 -1: (Ljava/util/Map<**>;)Z +22 -1: Ljava/lang/Class; +7 -1: SubList +14 -1: connect,accept +19 -1: declaredAnnotations +38 -1: Ljava/lang/ThreadLocal$ThreadLocalMap; +11 -1: isSpaceChar +10 -1: offerFirst +20 -1: sun/nio/ByteBuffered +17 -1: packageDefinition +7 -1: trigger +35 -1: [Ljava/lang/invoke/LambdaForm$Name; +19 -1: sun.stdout.encoding +5 -1: start +26 -1: (Ljava/util/HashMap;IIII)V +65 -1: (JLjava/util/function/Consumer<-Ljava/util/Map$Entry;>;)V +6 -1: LOCVER +3 -1: :// +42 -1: (CLjava/lang/Class<*>;Ljava/lang/Object;)Z +6 -1: friday +45 -1: sun/reflect/DelegatingConstructorAccessorImpl +15 -1: iso_8859-7:1987 +15 -1: newCalendarDate +24 -1: getAnnotatedReceiverType +32 -1: java/util/NoSuchElementException +50 -1: (Ljava/util/NavigableSet;)Ljava/util/NavigableSet; +26 -1: java/text/SimpleDateFormat +16 -1: threadInitNumber +55 -1: (TT;)Ljava/util/Spliterator; +23 -1: (Ljava/lang/Object;)TT; +3 1: bar +37 -1: getFunctionalInterfaceMethodSignature +5 -1: state +39 -1: [Ljava/lang/reflect/GenericDeclaration; +22 -1: sun/net/ProgressSource +13 -1: LLSpliterator +93 -1: Ljava/lang/Object;Ljava/util/Enumeration;Ljava/util/Iterator; +5 -1: JAPAN +11 -1: SPACE_TOTAL +20 -1: CharsetProvider.java +12 -1: CR_UNDERFLOW +7 -1: ITALIAN +11 -1: getCallerPD +13 -1: isMemberClass +38 -1: (Ljava/util/function/Consumer<-TT;>;)V +18 -1: malformedForLength +14 -1: ReflectionData +34 -1: (BZI)Ljava/lang/invoke/LambdaForm; +16 -1: forPrimitiveType +31 -1: field found in java.lang.Class +60 -1: (Ljava/lang/Void;Ljava/lang/ThreadGroup;Ljava/lang/String;)V +18 -1: DescendingIterator +25 -1: (IZLjava/lang/Runnable;)V +35 -1: ()[Ljava/lang/reflect/TypeVariable; +3 -1: bcp +23 -1: (Ljava/lang/Object;)TV; +25 -1: setDefaultAssertionStatus +10 -1: ([BIIIII)V +150 -1: (Ljava/util/concurrent/ConcurrentHashMap$Node;)Ljava/util/concurrent/ConcurrentHashMap$Node; +14 -1: Inherited: +17 -1: fileTimeToWinTime +7 -1: ([BI)[B +26 -1: java/io/OutputStreamWriter +58 -1: (Ljava/util/ListIterator<+TT;>;I)TT; +39 -1: sun/reflect/annotation/AnnotationParser +71 -1: (Ljava/nio/file/Path;Ljava/lang/String;)Ljava/nio/file/DirectoryStream; +47 -1: Ljava/util/concurrent/locks/ReentrantLock$Sync; +44 -1: (Ljava/util/Collection;[Ljava/lang/Object;)Z +43 -1: ([ILjava/util/function/IntBinaryOperator;)V +29 -1: reverseAllValidSurrogatePairs +20 -1: Ljava/nio/file/Path; +20 -1: getGenericSignature0 +42 -1: (Ljava/lang/String;Ljava/lang/Class<*>;Z)V +8 -1: manEntry +64 -1: (Ljava/lang/String;)Ljava/util/Enumeration; +36 -1: newGetDoubleIllegalArgumentException +63 -1: (Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection; +30 -1: Ergonomics Machine Class: +40 -1: ()Ljava/util/Map; +50 -1: (Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer; +30 -1: CHECK_MEMBER_ACCESS_PERMISSION +22 -1: (Ljava/lang/Boolean;)I +10 -1: V_Variable +68 -1: java/util/concurrent/ConcurrentHashMap$ForEachTransformedMappingTask +61 -1: (Ljava/lang/String;IILjava/lang/String;)Ljava/nio/ByteBuffer; +21 -1: accessClassInPackage. +44 -1: java/util/WeakHashMap$WeakHashMapSpliterator +11 -1: nextElement +9 -1: separator +48 -1: java/util/zip/ZipFile$ZipFileInflaterInputStream +44 -1: java/security/UnresolvedPermissionCollection +10 -1: access$900 +44 -1: java/util/ArraysParallelSortHelpers$FJDouble +84 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodHandle; +52 -1: (Ljava/lang/ref/Finalizer;)Ljava/lang/ref/Finalizer; +19 -1: getDeclaredMethods0 +29 -1: (IJ)Ljava/lang/StringBuilder; +11 -1: Member.java +61 -1: (Ljava/lang/String;ZJJ)Ljava/lang/management/MemoryPoolMBean; +35 -1: java/lang/AssertionStatusDirectives +23 -1: Declaring class is null +56 -1: (Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)I +12 -1: java/io/File +41 -1: java/util/ConcurrentModificationException +47 -1: (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; +19 -1: parameterClassCache +8 -1: US_ASCII +15 -1: tryMonitorEnter +22 -1: Ljava/util/Collection; +67 -1: (Lsun/misc/Signal;Lsun/misc/SignalHandler;)Lsun/misc/SignalHandler; +27 -1: (Lsun/misc/JavaNioAccess;)V +9 -1: DigitOnes +5 -1: write +31 -1: NF_internalMemberNameEnsureInit +18 -1: comparableClassFor +20 -1: defineAnonymousClass +49 -1: (Ljava/io/InputStream;Lsun/net/ProgressSource;J)V +31 -1: java/lang/NumberFormatException +17 -1: remainderUnsigned +62 -1: ;>()Ljava/util/Comparator; +4 -1: Kind +20 -1: (Ljava/lang/Short;)I +8 -1: OfDouble +51 -1: ([Ljava/lang/Object;Ljava/lang/invoke/MethodType;)Z +22 -1: [Ljava/util/Map$Entry; +13 -1: instanceClass +29 -1: ()Ljava/lang/SecurityManager; +12 -1: isUnmappable +17 -1: getAllStackTraces +19 -1: LinkedValueIterator +7 -1: isDigit +10 -1: rangeCheck +89 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Ljava/util/List; +13 -1: getMethodType +21 -1: FileOutputStream.java +22 -1: ()Ljava/text/Collator; +64 -1: (Ljava/security/PrivilegedAction;)TT; +15 -1: defaultTimeZone +14 -1: emptySortedMap +35 -1: (Ljava/util/function/IntConsumer;)V +45 -1: java/util/Collections$CheckedRandomAccessList +11 -1: getPriority +7 -1: signals +6 -1: Subset +15 -1: invokeInterface +16 -1: nameRefsAreLegal +38 -1: (Ljava/lang/Object;)Ljava/lang/Object; +37 -1: Ljava/util/Collections$EmptyIterator; +9 -1: Perf.java +20 -1: java/math/BigInteger +38 -1: java/util/WeakHashMap$ValueSpliterator +71 -1: (Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder; +50 -1: (Ljava/lang/invoke/MemberName;Ljava/lang/Object;)V +21 -1: [Ljava/lang/Class<*>; +13 -1: getProperties +63 -1: (Ljava/lang/Class<*>;[B[Ljava/lang/Object;)Ljava/lang/Class<*>; +65 -1: (Ljava/util/Set;>;)[Ljava/lang/reflect/Field; +21 -1: sun/util/calendar/Era +21 -1: Ljava/nio/CharBuffer; +23 -1: (Ljava/lang/Object;JS)V +24 -1: oracle/jrockit/jfr/VMJFR +15 -1: access allowed +34 -1: ()Lsun/util/calendar/CalendarDate; +97 -1: (Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; +44 -1: ([Ljava/lang/Object;[Ljava/lang/Object;III)V +48 -1: (Ljava/util/Collection;I)Ljava/util/Spliterator; +11 -1: SimpleEntry +63 -1: (Ljava/net/URL;Ljava/net/URLStreamHandler;Ljava/util/HashMap;)V +8 -1: putFloat +20 -1: linkToCallSiteMethod +8 -1: invokers +35 -1: (J)Lsun/util/calendar/BaseCalendar; +6 -1: FRENCH +26 -1: getRawParameterAnnotations +9 -1: wordIndex +29 -1: JNI_COPY_FROM_ARRAY_THRESHOLD +20 -1: sun/nio/cs/Surrogate +48 -1: (Lsun/misc/JavaSecurityProtectionDomainAccess;)V +45 -1: (Ljava/lang/ThreadLocal;Ljava/lang/Object;I)V +3 -1: NST +14 -1: getHeaderField +27 -1: (Ljava/util/jar/JarFile;Z)V +10 -1: findNative +38 -1: The following can be used with access: +29 -1: convertCertArrayToSignerArray +4 -1: .DSA +12 -1: dependencies +12 -1: SYNCHRONIZED +14 -1: x-euc-jp-linux +28 -1: URLStreamHandlerFactory.java +11 -1: checkPtypes +68 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V +13 -1: addDayOfMonth +10 -1: isAncestor +16 -1: entryDislocation +12 -1: tableSizeFor +29 -1: (ID)Ljava/lang/StringBuilder; +19 -1: getLastRuleInstance +24 -1: getGenericParameterTypes +8 -1: ,offset= +37 -1: (Ljava/net/URL;Ljava/lang/String;II)V +13 -1: UTF_16LE.java +12 -1: setTimestamp +31 -1: AtomicReferenceFieldUpdaterImpl +6 -1: L_URIC +4 -1: (D)D +14 -1: DeqSpliterator +13 -1: LF_INVVIRTUAL +171 -1: (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +4 -1: (D)I +22 -1: Ljava/lang/Class; +4 -1: (D)J +196 -1: (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +13 -1: ,transitions= +30 -1: (Lsun/net/www/MessageHeader;)I +4 -1: (D)V +12 -1: segmentShift +4 -1: (D)Z +14 -1: Reference.java +26 -1: [Ljava/lang/reflect/Field; +26 -1: java/nio/DirectByteBufferR +31 -1: lambda$thenComparing$36697e65$1 +30 -1: (Lsun/net/www/MessageHeader;)V +55 -1: No java.nio.charset.StandardCharsets instances for you! +59 -1: (Ljava/lang/Class<*>;Ljava/lang/Object;Ljava/lang/Object;)I +19 -1: thenComparingDouble +31 -1: ()Ljava/lang/invoke/LambdaForm; +9 -1: getMillis +21 -1: StandardCharsets.java +15 -1: postDefineClass +8 -1: getExtra +3 -1: box +10 -1: nextSetBit +27 -1: java/util/ArrayList$SubList +43 -1: (Ljava/util/concurrent/ConcurrentHashMap;)V +52 -1: (Lsun/misc/URLClassPath;)Ljava/net/URLStreamHandler; +7 -1: putLong +40 -1: ;>([TT;)V +8 -1: ([DII)[D +8 -1: ([SIIS)I +8 -1: argument +12 -1: linkCallSite +56 -1: Ljava/lang/ref/WeakReference; +15 -1: returnSlotCount +68 -1: (Ljava/lang/String;[Ljava/lang/Class<*>;Z)Ljava/lang/reflect/Method; +20 -1: defaultDisplayLocale +21 -1: (Ljava/util/Vector;)V +49 -1: (Lsun/reflect/generics/visitor/TypeTreeVisitor;)V +12 -1: isAlphabetic +5 -1: perms +13 -1: dosToJavaTime +8 -1: ([SIIS)V +7 -1: valueOf +27 -1: Ljava/util/LinkedList$Node; +41 -1: (Ljava/lang/String;I)Ljava/lang/Class<*>; +38 -1: ()Ljava/nio/charset/CodingErrorAction; +4 -1: MASK +5 -1: Field +101 -1: (Ljava/lang/Class;Ljava/nio/ByteBuffer;Lsun/reflect/ConstantPool;Ljava/lang/Class;)Ljava/lang/Object; +56 -1: (Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; +9 -1: SURROGATE +72 -1: (Ljava/lang/invoke/DirectMethodHandle$StaticAccessor;)Ljava/lang/Object; +19 -1: PARAMETER_MODIFIERS +48 -1: ([Ljava/lang/Object;II)Ljava/util/stream/Stream; +56 -1: (TK;TV;Ljava/util/function/BiFunction<-TV;-TV;+TV;>;)TV; +118 -1: (JLjava/util/function/BiFunction<-TK;-TV;+TU;>;Ljava/util/function/BiFunction<-TU;-TU;+TU;>;)TU; +29 -1: (Lsun/nio/ch/Interruptible;)V +45 -1: Ljava/lang/ref/Reference; +17 -1: isHeldExclusively +3 -1: NYI +15 -1: getByteVolatile +20 -1: compareAndSwapObject +29 -1: (Z)[Ljava/lang/reflect/Field; +7 -1: ([SII)V +13 -1: toLanguageTag +18 -1: StreamEncoder.java +25 -1: (IF)Ljava/nio/ByteBuffer; +18 -1: afterNodeInsertion +11 -1: accessOrder +60 -1: Lsun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget; +20 -1: META-INF/MANIFEST.MF +18 -1: getSuperInterfaces +26 -1: (Ljava/nio/ByteBuffer;IZ)C +26 -1: (Ljava/nio/ByteBuffer;IZ)D +9 -1: PROTECTED +18 -1: not visible from +26 -1: java/lang/RuntimeException +26 -1: (Ljava/nio/ByteBuffer;IZ)F +20 -1: java/net/FileNameMap +15 -1: insertArguments +8 -1: diagprop +26 -1: (Ljava/nio/ByteBuffer;IZ)I +26 -1: (Ljava/nio/ByteBuffer;IZ)J +20 -1: createContentHandler +11 -1: getProtocol +26 -1: (Ljava/nio/ByteBuffer;IZ)S +33 -1: Ljava/lang/NoSuchMethodException; +19 -1: entry name too long +40 -1: java/util/jar/JarVerifier$VerifierStream +6 -1: server +7 -1: OCTOBER +26 -1: sun/invoke/util/VerifyType +6 -1: domain +9 -1: getUnsafe +5 -1: ([Z)I +4 -1: cons +42 -1: ()Ljava/lang/ReflectiveOperationException; +4 -1: byte +29 -1: java/util/function/BiConsumer +24 -1: getJavaUtilZipFileAccess +37 -1: ([Ljava/lang/Object;)Ljava/util/List; +27 -1: timeout can not be negative +62 -1: Ljava/util/Map; +16 -1: getOurStackTrace +34 -1: (J)Ljava/lang/ref/Reference<+TT;>; +50 -1: Lsun/reflect/generics/repository/MethodRepository; +20 -1: MIN_BYTE_BUFFER_SIZE +3 -1: buf +13 -1: getAttributes +6 -1: GERMAN +38 -1: java/security/NoSuchAlgorithmException +20 -1: Direct buffer memory +6 -1: (IIZ)V +27 -1: JVMTI_THREAD_STATE_RUNNABLE +26 -1: [Ljava/io/File$PathStatus; +36 -1: (Ljava/util/List;Ljava/lang/Class;)V +13 -1: JarIndex.java +34 -1: java/lang/Character$CharacterCache +8 -1: csIBM857 +10 -1: LineReader +28 -1: Ljava/lang/RuntimeException; +30 -1: ()Ljava/util/Enumeration; +12 -1: getSeparator +124 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object; +97 -1: Ljava/util/Map;>; +21 -1: ConstantCallSite.java +40 -1: sun/util/locale/provider/LocaleResources +101 -1: ;>(Ljava/util/function/Function<-TT;+TU;>;)Ljava/util/Comparator; +4 -1: copy +23 -1: sun/security/util/Debug +10 -1: isAbsolute +34 -1: (Ljava/lang/invoke/MethodHandle;)V +34 -1: (Ljava/lang/invoke/MethodHandle;)Z +48 -1: ()[Ljava/util/concurrent/ConcurrentHashMap$Node; +34 -1: (Lsun/reflect/LangReflectAccess;)V +8 -1: csIBM862 +8 -1: csIBM866 +64 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToDoubleTask +39 -1: No java.util.Objects instances for you! +68 -1: (Ljava/util/PrimitiveIterator$OfInt;JI)Ljava/util/Spliterator$OfInt; +19 -1: Illegal class name +24 -1: uncaughtExceptionHandler +12 -1: runFinalizer +23 -1: java/io/FileInputStream +41 -1: (Ljava/lang/Class<*>;Ljava/lang/String;)V +98 -1: (Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node; +30 -1: java/nio/charset/CoderResult$1 +20 -1: SourceDebugExtension +30 -1: java/nio/charset/CoderResult$2 +69 -1: ([Ljava/security/ProtectionDomain;[Ljava/security/ProtectionDomain;)Z +14 -1: 1.8.0-internal +16 -1: ReduceValuesTask +13 -1: toLowerString +14 -1: newPrintStream +13 -1: unicodelittle +19 -1: getClassLoadingLock +9 -1: DigitTens +80 -1: (Ljava/lang/Class<*>;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType; +12 -1: sun_eu_greek +21 -1: getBootstrapClassPath +9 -1: volatile +15 -1: UnmodifiableMap +21 -1: enumConstantDirectory +10 -1: getContent +4 -1: cosh +74 -1: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; +11 -1: ([JII[JII)V +28 -1: java/lang/reflect/Executable +17 -1: MapReduceKeysTask +6 -1: isOpen +17 -1: AnnotationDefault +17 -1: Already connected +27 -1: (Lsun/misc/JavaNetAccess;)V +34 -1: ([BILjava/nio/charset/Charset;Z)[B +55 -1: Ljava/lang/invoke/DirectMethodHandle$EnsureInitialized; +8 -1: Set.java +10 -1: DEAD_ENTRY +7 -1: nextInt +3 -1: wtb +23 -1: java/util/Collections$1 +86 -1: (Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/visitor/Reifier; +23 -1: java/util/Collections$2 +23 -1: java/util/Collections$3 +18 -1: DoubleCumulateTask +22 -1: skip value is negative +85 -1: (Ljava/io/InputStream;Ljava/lang/Object;Ljava/lang/String;)Lsun/nio/cs/StreamDecoder; +5 -1: \\[\\]$ +34 -1: Ljava/util/NoSuchElementException; +3 -1: NaN +30 -1: sun/util/calendar/CalendarDate +10 -1: V_Constant +20 -1: java/lang/Comparable +9 -1: text/html +20 -1: -9223372036854775808 +20 -1: DataInputStream.java +20 -1: Member defaults: +35 -1: Ljava/lang/ref/ReferenceQueue$Lock; +8 -1: getBytes +17 -1: CodePointIterator +11 -1: Signal.java +19 -1: javaHomePrefixCache +12 -1: replaceFirst +37 -1: Ljava/lang/IndexOutOfBoundsException; +39 -1: (Ljava/lang/String;ZI)Ljava/lang/Class; +21 -1: initSystemClassLoader +28 -1: America/Indiana/Indianapolis +47 -1: (Ljava/security/Permission;Ljava/lang/Object;)V +27 -1: java/net/URISyntaxException +21 -1: createSecurityManager +7 -1: suspend +12 -1: L_UNRESERVED +17 -1: checkMemberAccess +12 -1: CoreCounters +19 -1: java/net/HttpCookie +8 -1: isGetter +17 -1: setDaylightSaving +27 -1: java.launcher.javafx.error1 +53 -1: java/util/concurrent/ConcurrentHashMap$CollectionView +16 -1: readUnsignedByte +47 -1: (Ljava/lang/String;)Ljava/net/URLStreamHandler; +40 -1: (Z)[Ljava/lang/reflect/Constructor; +14 -1: javaLangAccess +5 -1: apply +8 -1: getFloat +15 -1: getD3DAvailable +25 -1: startLocalManagementAgent +7 -1: RUNTIME +22 -1: LocalVariableTypeTable +8 -1: doOutput +16 -1: CheckedSortedSet +10 -1: zoneOffset +64 -1: (Ljava/security/Permission;)Ljava/security/PermissionCollection; +13 -1: hasUnresolved +13 -1: user.language +11 -1: getDoubleAt +14 -1: getQueueLength +37 -1: java/nio/DirectByteBuffer$Deallocator +6 -1: ASHIFT +9 -1: checkPath +80 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/Class;)V +6 -1: CENEXT +16 -1: doubleToLongBits +11 -1: copyToArray +9 -1: copyField +36 -1: ()Lsun/util/calendar/Gregorian$Date; +53 -1: (ILjava/lang/Object;)Ljava/util/HashMap$Node; +44 -1: (TK;TV;Ljava/lang/ref/ReferenceQueue;)V +35 -1: java/util/Collections$EmptyIterator +38 -1: sealing violation: can't seal package +37 -1: (Ljava/util/Queue;Ljava/lang/Class;)V +129 -1: (Ljava/lang/Class<*>;Ljava/lang/String;[Ljava/lang/Class<*>;Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B[B)V +18 -1: HashMapSpliterator +8 -1: putShort +23 -1: (Ljava/lang/Object;II)V +7 -1: GERMANY +13 -1: toTitleString +102 -1: (Ljava/util/ArrayPrefixHelpers$CumulateTask;Ljava/util/function/BinaryOperator;[Ljava/lang/Object;II)V +44 -1: ([Ljava/lang/Object;)Ljava/util/Spliterator; +6 -1: unused +25 -1: java/net/URLClassLoader$1 +25 -1: java/net/URLClassLoader$2 +25 -1: java/net/URLClassLoader$3 +25 -1: java/net/URLClassLoader$4 +12 -1: getFixedDate +25 -1: java/net/URLClassLoader$5 +4 -1: time +25 -1: java/net/URLClassLoader$6 +25 -1: java/net/URLClassLoader$7 +14 -1: historicalName +12 -1: normalizeKey +13 -1: MIN_SURROGATE +41 -1: java/nio/charset/CharacterCodingException +18 -1: java/lang/Iterable +8 -1: ([JII)[J +103 -1: Ljava/util/Map;Ljava/lang/annotation/Annotation;>; +18 -1: putBooleanVolatile +5 -1: Entry +11 -1: CounterCell +12 -1: monitorEnter +10 -1: skipBuffer +15 -1: hasMoreElements +24 -1: newIllegalStateException +24 -1: Ljava/lang/LinkageError; +12 -1: getEntryFlag +44 -1: (Ljava/lang/Throwable$PrintStreamOrWriter;)V +18 -1: java/nio/IntBuffer +17 -1: jdk_minor_version +28 -1: DIRECTIONALITY_RIGHT_TO_LEFT +15 -1: getAndSetObject +7 -1: sizeCtl +15 -1: Ljava/util/Set; +32 -1: (I)Ljava/lang/invoke/LambdaForm; +16 -1: runFinalization0 +30 -1: Ljava/lang/reflect/Executable; +15 -1: compareUnsigned +5 -1: nkeys +31 -1: Ljava/nio/channels/FileChannel; +40 -1: sun/reflect/generics/tree/ClassSignature +22 -1: (Ljava/lang/Object;I)B +22 -1: (Ljava/lang/Object;I)C +22 -1: (Ljava/lang/Object;I)D +7 -1: JANUARY +30 -1: newGetIllegalArgumentException +22 -1: (Ljava/lang/Object;I)F +22 -1: (Ljava/lang/Object;I)I +22 -1: (Ljava/lang/Object;I)J +28 -1: generateNamedFunctionInvoker +38 -1: (Ljava/lang/String;)Ljava/time/ZoneId; +19 -1: lambda$codePoints$2 +4 -1: Null +7 -1: setEras +15 -1: lambda$chars$15 +14 -1: CollectionView +24 -1: (C)Ljava/io/PrintStream; +22 -1: (Ljava/lang/Object;I)S +96 -1: (Ljava/security/AccessControlContext;Lsun/security/util/Debug;Ljava/security/ProtectionDomain;)V +17 -1: getJulianCalendar +22 -1: (Ljava/lang/Object;I)V +17 -1: getMethodAccessor +9 -1: not owner +35 -1: java/lang/reflect/ParameterizedType +15 -1: ValueCollection +22 -1: (Ljava/lang/Object;I)Z +4 -1: utf8 +5 -1: CHINA +9 -1: sprintf0d +18 -1: java/nio/file/Path +35 -1: DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC +30 -1: URI has an authority component +43 -1: (Ljava/lang/Object;)Ljava/util/Spliterator; +15 -1: +62 -1: (Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale; +6 -1: ([ZZ)V +10 -1: getContext +12 -1: content-type +99 -1: (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;ILjava/util/WeakHashMap$Entry;)V +51 -1: (Ljava/util/concurrent/ConcurrentHashMap;)V +27 -1: Invalid constant pool index +20 -1: getUnicodeLocaleType +43 -1: Ljava/nio/charset/CharacterCodingException; +113 -1: (Ljava/net/URL;Ljava/net/URLStreamHandler;Ljava/util/HashMap;)V +56 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; +24 -1: Lsun/misc/SignalHandler; +8 -1: readlink +125 -1: (Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind<*>;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey; +11 -1: initStatics +15 -1: unmappableCache +13 -1: fixMethodType +25 -1: sun/net/www/MessageHeader +3 -1: cdt +27 -1: Ljava/util/Locale$Category; +59 -1: (ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; +8 -1: Accessor +14 -1: mapLibraryName +54 -1: (Lsun/misc/URLClassPath$JarLoader;)Lsun/misc/JarIndex; +24 -1: ZoneOffsetTransitionRule +7 -1: getChar +3 -1: cee +25 -1: MapReduceValuesToLongTask +20 -1: declaredPublicFields +44 -1: (Ljava/lang/ClassLoader;Ljava/lang/String;)J +13 -1: removeElement +20 -1: Ljava/nio/ByteOrder; +8 -1: parallel +67 -1: (Ljava/lang/reflect/Constructor;Lsun/reflect/ConstructorAccessor;)V +22 -1: java/util/zip/ZipCoder +8 -1: ([ZIIZ)V +45 -1: (Ljava/lang/String;Ljava/lang/CharSequence;)Z +8 -1: february +40 -1: java/util/zip/ZipFile$ZipFileInputStream +47 -1: java/nio/charset/Charset$ExtendedProviderHolder +13 -1: IEEEremainder +15 -1: sun/misc/Perf$1 +9 -1: abstract +20 -1: ()Ljava/time/ZoneId; +7 -1: ONE_DAY +92 -1: (Ljava/util/concurrent/ConcurrentHashMap$Node;)Ljava/util/concurrent/ConcurrentHashMap$Node; +45 -1: (Ljava/util/ListIterator;I)Ljava/lang/Object; +16 -1: Buffer size <= 0 +9 -1: checkName +11 -1: getJarEntry +20 -1: Replacement too long +53 -1: (Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder; +12 -1: isWhitespace +15 -1: csISOLatinGreek +70 -1: (Ljava/lang/reflect/Constructor<*>;Lsun/reflect/ConstructorAccessor;)V +20 -1: TypeAnnotationTarget +3 -1: No +27 -1: Lsun/reflect/FieldAccessor; +12 -1: doPrivileged +83 -1: (JLjava/util/function/ToIntFunction<-TV;>;ILjava/util/function/IntBinaryOperator;)I +60 -1: (Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry; +11 -1: changeEntry +18 -1: MessageHeader.java +51 -1: ([Ljava/lang/String;Ljava/util/Map;)Ljava/util/Map; +9 -1: castEntry +16 -1: ACCESS_MODIFIERS +11 -1: newInstance +24 -1: lastIndexOfSupplementary +13 -1: JZENTRY_EXTRA +5 -1: LONGS +7 -1: domain +16 -1: protocolPathProp +21 -1: java/util/Hashtable$1 +10 -1: isSameDate +23 -1: (I)Ljava/nio/file/Path; +33 -1: java/util/PrimitiveIterator$OfInt +7 -1: ([II)[I +8 -1: variant= +29 -1: (Ljava/util/Collection<*>;Z)Z +38 -1: already loaded in another classloader +10 -1: setSeconds +9 -1: makeShort +59 -1: ClassLoader.findLibrary failed to return an absolute path: +26 -1: java/util/jar/JarException +9 -1: setCharAt +13 -1: initCauseFrom +13 -1: val$fieldName +18 -1: MIN_HIGH_SURROGATE +60 -1: (Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule;)B +25 -1: getDayOfWeekFromFixedDate +10 -1: maybeReBox +9 -1: getHandle +60 -1: (Lsun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule;)I +59 -1: ([Ljava/lang/Class<*>;)Ljava/lang/reflect/Constructor; +3 -1: cis +11 -1: getIssuerDN +9 -1: codebase= +80 -1: (ILjava/lang/invoke/BoundMethodHandle$SpeciesData;)Ljava/lang/invoke/LambdaForm; +29 -1: addThreadDumpForSynchronizers +6 -1: FRANCE +77 -1: ([TU;ILjava/lang/Class<+[TT;>;)[TT; +45 -1: ()Ljava/util/List; +16 -1: putFloatVolatile +34 -1: (Ljava/lang/Class;)Ljava/util/Map; +28 -1: ()Ljava/security/Permission; +28 -1: (Ljava/lang/CharSequence;I)I +51 -1: ()Ljava/util/Enumeration; +25 -1: (II)Ljava/nio/ByteBuffer; +20 -1: BasicPermission.java +5 -1: isNaN +48 -1: (Ljava/lang/Throwable;)Ljava/lang/InternalError; +10 -1: ONE_MINUTE +55 -1: (Ljava/lang/invoke/DirectMethodHandle$StaticAccessor;)J +13 -1: DAYS_IN_MONTH +7 -1: domains +10 -1: isUnshared +58 -1: Ljava/lang/Number;Ljava/lang/Comparable; +47 -1: (Ljava/util/List;)Ljava/security/cert/CertPath; +28 -1: ()Ljava/util/Enumeration<*>; +34 -1: sun/misc/Launcher$ExtClassLoader$1 +22 -1: (CLjava/lang/Object;)Z +64 -1: Ljava/lang/ref/WeakReference; +7 -1: ENGLISH +27 -1: (Ljava/util/zip/Inflater;)V +24 -1: makeArrayElementAccessor +72 -1: (Ljava/lang/Class<*>;[Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +48 -1: (Ljava/util/jar/JarFile;)Ljava/util/Enumeration; +48 -1: (Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +15 -1: getNthDayOfWeek +16 -1: printHelpMessage +15 -1: getAbsoluteFile +9 -1: OPEN_READ +19 -1: willGMTOffsetChange +28 -1: (Ljava/util/LinkedHashMap;)V +37 -1: java/security/AllPermissionCollection +5 -1: [id=" +34 -1: java/lang/invoke/BoundMethodHandle +31 -1: ()Ljava/security/cert/CertPath; +50 -1: java/util/ArraysParallelSortHelpers$FJShort$Sorter +14 -1: StaticAccessor +22 -1: synchronizedCollection +53 -1: ([Ljava/io/File;)Ljava/security/AccessControlContext; +37 -1: (Ljava/lang/Class;Ljava/lang/Class;)Z +14 -1: codePointCount +13 -1: is param at +37 -1: Ljava/lang/invoke/MemberName$Factory; +20 -1: annotationDataOffset +31 -1: protocol doesn't support output +11 -1: hostAddress +12 -1: ,dstSavings= +35 -1: java.lang.Integer.IntegerCache.high +15 -1: ParallelLoaders +48 -1: (Ljava/util/Locale;)Lsun/util/locale/BaseLocale; +8 -1: getSize0 +22 -1: checkCreateClassLoader +8 -1: transfer +32 -1: (Lsun/misc/JavaSecurityAccess;)V +26 -1: ()Ljava/net/URLConnection; +3 -1: cmp +9 -1: setMillis +34 -1: sun/util/calendar/AbstractCalendar +19 -1: getDirectBufferPool +7 -1: ([FII)V +28 -1: ([C)Ljava/lang/StringBuffer; +54 -1: (Ljava/lang/Class<*>;)Ljava/security/ProtectionDomain; +26 -1: (Ljava/nio/ByteBuffer;IF)V +11 -1: discardMark +71 -1: (Ljava/lang/Class;)Lsun/util/locale/provider/LocaleServiceProviderPool; +30 -1: java/io/UTFDataFormatException +53 -1: (Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult; +48 -1: java/util/concurrent/ConcurrentHashMap$Traverser +5 -1: ([F)I +37 -1: (IC)Ljava/lang/AbstractStringBuilder; +27 -1: Ljava/util/jar/JarVerifier; +22 -1: java/util/Spliterators +32 -1: java/lang/invoke/MutableCallSite +20 -1: java/io/Serializable +5 -1: ([F)V +35 -1: (Ljava/security/ProtectionDomain;)V +33 -1: ()Ljava/lang/ref/Reference<+TT;>; +10 -1: unlinkLast +6 -1: (JSZ)V +8 -1: isStatic +14 -1: subclassAudits +23 -1: (Ljava/lang/String;)TT; +17 -1: java.awt.headless +9 -1: +39 -1: Lsun/util/locale/LocaleSyntaxException; +8 -1: location +3 -1: cos +27 -1: createGarbageCollectorMBean +20 -1: MAX_MH_INVOKER_ARITY +75 -1: (Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult; +14 -1: Cloneable.java +50 -1: (Lsun/reflect/DelegatingConstructorAccessorImpl;)V +26 -1: sun/nio/ch/FileChannelImpl +51 -1: (Ljava/lang/Class;Ljava/lang/reflect/Constructor;)V +18 -1: Unknown byte order +28 -1: ()[Lsun/invoke/util/Wrapper; +21 -1: getReadClassBytesTime +64 -1: (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodTypeForm; +11 -1: setDelegate +20 -1: (Ljava/util/List;)[C +7 -1: usemmap +22 -1: (CC)Ljava/lang/String; +34 -1: sun/invoke/util/BytecodeDescriptor +21 -1: getJavaSecurityAccess +53 -1: (Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult; +7 -1: ibm-737 +19 -1: (Ljava/lang/Enum;)I +4 -1: rint +11 -1: Constructor +9 -1: arraycopy +35 -1: ([D)Ljava/util/stream/DoubleStream; +13 -1: comparingLong +40 -1: Ljava/lang/Object; +23 -1: OutputStreamWriter.java +8 -1: getShort +17 -1: CLASSPATH_LASTOCC +13 -1: createNewFile +14 -1: internalValues +34 -1: Ljava/lang/IllegalAccessException; +23 -1: (JILjava/lang/Object;)V +27 -1: sun.misc.URLClassPath.debug +45 -1: [Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; +35 -1: ()Lsun/reflect/ConstructorAccessor; +12 -1: classEnabled +23 -1: cachedFixedDateNextJan1 +48 -1: (Ljava/util/Locale$LocaleKey;)Ljava/util/Locale; +26 -1: (Ljava/lang/ThreadGroup;)V +7 -1: setErr0 +6 -1: CENFLG +26 -1: (Ljava/lang/ThreadGroup;)Z +18 -1: sun/misc/MetaIndex +3 -1: crc +34 -1: (Z)Ljava/lang/invoke/MethodHandle; +12 -1: replaceNames +15 -1: java/util/Stack +57 -1: Ljava/util/Vector; +89 -1: (JLjava/util/function/ToDoubleFunction<-TV;>;DLjava/util/function/DoubleBinaryOperator;)D +24 -1: permission can't be null +22 -1: Unable to connect to: +44 -1: (Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer; +14 -1: floatToIntBits +11 -1: getLastRule +6 -1: EXTCRC +26 -1: java/net/InetSocketAddress +36 -1: (Lsun/misc/URLClassPath$JarLoader;)V +27 3: sun/launcher/LauncherHelper +8 -1: ecma-118 +49 -1: (Ljava/net/URL;Ljava/lang/String;)[Ljava/net/URL; +13 -1: hashCodeValue +5 -1: CESU8 +21 -1: appendVmSelectMessage +13 -1: bindImmediate +12 -1: closeLoaders +16 -1: emptySpliterator +28 -1: (J)Ljava/time/LocalDateTime; +22 -1: [Ljava/lang/Character; +5 -1: certs +6 -1: (null) +25 -1: java/io/ObjectInputStream +27 -1: ([Ljava/lang/ThreadGroup;)I +3 -1: cst +3 -1: csu +20 -1: java/nio/ShortBuffer +53 -1: (Ljava/lang/ClassValue;Ljava/lang/ClassValue$Entry;)V +4 -1: (Z)I +24 -1: Ljava/io/FileDescriptor; +6 -1: cclass +10 -1: , profile +39 -1: (Ljava/lang/String;)Ljava/lang/Process; +4 -1: (Z)V +5 -1: toURI +24 -1: ConstructorAccessor.java +5 -1: toURL +18 -1: addAllIfNotPresent +4 -1: (Z)Z +5 -1: parse +11 -1: isPrimitive +42 -1: (Ljava/io/File;)Ljava/lang/ProcessBuilder; +36 -1: (Ljava/util/Date;)Ljava/lang/String; +23 -1: getFormalTypeParameters +13 -1: Resource.java +7 -1: ibm-775 +6 -1: isEnum +24 -1: setJavaUtilZipFileAccess +21 -1: \t[CIRCULAR REFERENCE: +51 -1: (Ljava/lang/CharSequence;)Ljava/util/regex/Matcher; +24 -1: (I)Ljava/nio/ByteBuffer; +53 -1: sun/reflect/generics/repository/GenericDeclRepository +3 -1: xor +17 -1: invokeBasicMethod +27 -1: java/lang/invoke/LambdaForm +99 -1: (Ljava/util/jar/Manifest;Ljava/util/jar/JarEntry;Ljava/io/InputStream;Ljava/util/jar/JarVerifier;)V +46 -1: Lsun/reflect/generics/factory/GenericsFactory; +37 -1: sun/misc/Launcher$BootClassPathHolder +10 -1: BindCaller +24 -1: java/lang/reflect/Member +32 -1: java/lang/management/ThreadState +5 -1: (IB)V +21 -1: RuntimeException.java +5 -1: ended +17 -1: java/util/TreeSet +7 -1: : no !/ +16 -1: java/util/Vector +9 -1: nextAfter +22 -1: Ljava/lang/Deprecated; +20 -1: requestedCharsetName +37 -1: ([JIII)Ljava/util/Spliterator$OfLong; +14 -1: internArgument +11 -1: getTimeZone +10 -1: isValidKey +11 -1: LAST_RESULT +43 -1: sun/reflect/annotation/TypeAnnotationParser +13 -1: encodedInPath +52 -1: (Ljava/security/PrivilegedAction;)Ljava/lang/Object; +4 -1: LL_L +34 -1: java/nio/charset/CodingErrorAction +10 -1: copyFields +11 -1: getConstant +9 -1: threshold +13 -1: aliases_UTF_8 +27 -1: (Ljava/util/ArrayDeque;II)V +29 -1: Ljava/lang/ref/SoftReference; +19 -1: indexedBinarySearch +11 -1: containsKey +81 -1: ([Ljava/lang/ClassValue$Entry;Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; +86 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/Class<*>;II)Ljava/lang/invoke/MethodHandle; +15 -1: cannot convert +25 -1: getSystemResourceAsStream +46 -1: (Ljava/util/Properties;)Ljava/util/Properties; +12 -1: reverseOrder +16 -1: getSystemPackage +8 -1: ([SII)[S +19 -1: makeAccessException +100 -1: (JLjava/util/function/Function<-TK;+TU;>;Ljava/util/function/Consumer<-TU;>;)V +39 -1: ([Ljava/lang/Class;I)[Ljava/lang/Class; +19 -1: Ljava/lang/Boolean; +6 -1: Hidden +47 -1: java/lang/invoke/MethodHandleImpl$ArrayAccessor +5 -1: APRIL +8 -1: emptySet +11 -1: getCombiner +58 -1: (Ljava/lang/String;I[Ljava/lang/invoke/LambdaForm$Name;I)V +24 -1: java.system.class.loader +14 -1: Can't handle: +16 -1: isNullConversion +38 -1: ()Ljava/util/HashMap$TreeNode; +29 -1: referenceKindIsConsistentWith +11 -1: flushBuffer +8 -1: putField +27 -1: ()Ljava/security/PublicKey; +53 -1: ()Ljava/util/stream/Stream; +10 -1: pathToURLs +26 -1: throwIllegalStateException +10 -1: markedChar +14 -1: isNativeMethod +36 -1: (I)Ljava/lang/AbstractStringBuilder; +54 -1: java/util/concurrent/ConcurrentHashMap$ReservationNode +45 -1: Lsun/misc/JavaSecurityProtectionDomainAccess; +62 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;Ljava/lang/Object;I)V +7 -1: subList +8 -1: UTF_32BE +6 -1: U_None +50 -1: sun/reflect/generics/repository/AbstractRepository +62 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;Ljava/lang/Object;I)Z +43 -1: sun/net/www/protocol/file/FileURLConnection +13 -1: setZoneOffset +43 -1: Underlying input stream returned zero bytes +54 -1: [a-zA-Z_$][a-zA-Z0-9_$]*([.][a-zA-Z_$][a-zA-Z0-9_$]*)* +13 -1: containsValue +44 -1: (Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer; +25 -1: isNullReferenceConversion +38 -1: Ljava/util/Vector; +6 -1: toFile +7 -1: getSlot +17 -1: (Ljava/net/URI;)V +32 -1: java.security.cert.Certificate: +24 -1: ()Lsun/misc/PerfCounter; +11 -1: Asia/Hebron +16 -1: createMemoryPool +10 -1: addToCache +29 -1: Ljava/lang/invoke/DontInline; +39 -1: java/lang/ref/Finalizer$FinalizerThread +58 -1: (Ljava/lang/Class;)Lsun/reflect/generics/scope/ClassScope; +20 -1: getBooleanAttributes +15 -1: parallelLockMap +34 -1: java/util/Vector$VectorSpliterator +21 -1: createMemoryPoolMBean +15 -1: no content-type +41 -1: Couldn't find 3-letter language code for +5 -1: slash +34 -1: Ljava/lang/annotation/ElementType; +8 -1: isSetter +26 -1: (ZLjava/lang/String;JJJZ)V +6 -1: GMT_ID +73 -1: ()[Ljava/lang/reflect/TypeVariable;>; +56 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object; +32 -1: (Ljava/util/Set;)Ljava/util/Set; +4 -1: stop +62 -1: (Ljava/lang/String;IILjava/lang/String;I)Ljava/nio/ByteBuffer; +11 -1: genericInfo +11 -1: listToArray +26 -1: ()Ljava/util/jar/Manifest; +13 -1: putOrderedInt +5 -1: flush +13 -1: ArrayAccessor +4 -1: Name +95 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V +68 -1: (Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; +23 -1: java/lang/ref/Reference +37 -1: (Ljava/nio/file/attribute/FileTime;)J +14 -1: MIN_CODE_POINT +9 -1: ISO8859-1 +9 -1: ISO8859-2 +9 -1: ISO8859-5 +34 -1: ([CILjava/nio/charset/Charset;Z)[C +9 -1: ISO8859-9 +9 -1: getUTF8At +12 -1: java/net/URI +67 -1: (Ljava/io/DataInput;Ljava/lang/String;)Lsun/util/calendar/ZoneInfo; +22 -1: ListCompositionPattern +67 -1: (Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class; +3 1: xxx +12 -1: java/net/URL +27 -1: Can't overwrite cause with +30 -1: sun/util/locale/BaseLocale$Key +22 -1: forkSecondaryFinalizer +23 -1: java/security/Principal +8 -1: makeSite +17 -1: NEGATIVE_INFINITY +12 -1: addUnstarted +12 -1: internalForm +9 -1: cellsBusy +23 -1: (Ljava/lang/Object;IJ)V +13 -1: getParameters +6 -1: H_PATH +10 -1: L_REG_NAME +139 -1: Ljava/util/AbstractMap;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; +6 -1: latin0 +10 -1: addSeconds +6 -1: latin1 +6 -1: latin2 +6 -1: latin4 +6 -1: latin5 +17 -1: getWaitingThreads +6 -1: latin9 +21 -1: java/util/Comparators +10 -1: trimToSize +96 -1: (Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/Collection; +43 -1: ([JLjava/util/function/IntToLongFunction;)V +23 -1: GET_COMBINER_PERMISSION +20 -1: lambda$replaceAll$14 +5 -1: KOREA +20 -1: getJvmSpecialVersion +9 -1: dumpStack +16 -1: CACHE_LOAD_LIMIT +43 -1: GSS LoginConfigImpl debugging +26 -1: (DLjava/lang/Appendable;)V +8 -1: forName0 +35 -1: java/lang/ClassLoader$NativeLibrary +46 -1: java/util/concurrent/ConcurrentHashMap$Segment +24 -1: getDeclaredAnnotationMap +89 -1: java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1 +20 -1: java_runtime_version +26 -1: java/util/stream/IntStream +16 -1: Ljava/io/Writer; +69 -1: ()Ljava/util/SortedMap; +15 -1: getClassLoader0 +6 -1: x86_64 +11 -1: isInterface +15 -1: MODIFIER_SYMBOL +44 -1: Note: Separate multiple options with a comma +9 -1: recursive +19 -1: java/nio/CharBuffer +8 -1: capacity +17 -1: validateMainClass +50 -1: (Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; +22 -1: (Ljava/lang/Object;J)B +22 -1: (Ljava/lang/Object;J)C +22 -1: (Ljava/lang/Object;J)D +17 -1: not a method type +22 -1: (Ljava/lang/Object;J)F +5 -1: count +32 -1: AtomicReferenceFieldUpdater.java +22 -1: (Ljava/lang/Object;J)I +14 -1: methodAccessor +22 -1: (Ljava/lang/Object;J)J +7 -1: isError +51 -1: (Ljava/nio/Buffer;II)Ljava/nio/charset/CoderResult; +53 -1: (BZLjava/lang/Class<*>;)Ljava/lang/invoke/LambdaForm; +25 -1: +5 -1: [pos= +14 -1: lambda$chars$1 +9 -1: CELLVALUE +16 -1: haveLeftoverChar +22 -1: ([Ljava/lang/String;)V +32 -1: java/lang/InstantiationException +7 -1: SIG_IGN +13 -1: ZipUtils.java +50 -1: Ljava/lang/ref/ReferenceQueue; +22 -1: (Ljava/lang/Object;J)S +69 -1: Ljava/util/HashMap; +16 -1: newInternalError +22 -1: (Ljava/lang/Object;J)V +9 -1: ABBR_MASK +5 -1: array +22 -1: (Ljava/lang/Object;J)Z +13 -1: FilteringMode +30 -1: java/util/stream/StreamSupport +19 -1: retrieveDisplayName +56 -1: (Ljava/util/TimeZone;)Lsun/util/calendar/Gregorian$Date; +10 -1: val$values +9 -1: normalize +28 -1: (II)Ljava/lang/CharSequence; +16 -1: serialVersionUID +7 -1: getPath +25 -1: (ILjava/lang/Class<*>;Z)V +13 -1: thenComparing +51 -1: (Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; +36 -1: ()[Ljava/lang/annotation/Annotation; +14 -1: MetaIndex.java +8 -1: identity +15 -1: findSystemClass +24 -1: privateGetDeclaredFields +27 -1: java/lang/ref/SoftReference +19 -1: useCanonPrefixCache +3 -1: dec +3 -1: PLT +8 -1: UTF_32LE +17 -1: java/util/HashMap +12 -1: toEpochMilli +9 -1: intStream +11 -1: Caused by: +31 -1: java/nio/charset/CharsetDecoder +30 -1: is being checked +11 -1: parseHeader +25 -1: ACCUMULATED_DAYS_IN_MONTH +34 -1: newGetByteIllegalArgumentException +21 -1: checkPropertiesAccess +13 -1: StackMapTable +8 -1: addCount +51 -1: (Ljava/lang/invoke/MethodHandle;)Ljava/lang/String; +9 -1: authority +15 -1: iso-10646-ucs-2 +6 -1: SUNDAY +22 -1: LocalGregorianCalendar +9 -1: listRoots +32 -1: Lsun/reflect/generics/tree/Tree; +38 -1: [Ljava/util/WeakHashMap$Entry; +11 -1: nativeOrder +5 -1: long0 +5 -1: long1 +5 -1: long2 +5 -1: long3 +17 -1: capacityIncrement +5 -1: long4 +97 -1: (Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/MemberName; +31 -1: Ljava/lang/CharacterDataLatin1; +5 -1: long5 +5 -1: long6 +5 -1: long7 +17 -1: reduceValuesToInt +13 -1: package2certs +13 -1: isTypeVisible +30 -1: java/lang/ref/PhantomReference +47 -1: ()Ljava/util/stream/Stream; +9 -1: longValue +3 -1: PNT +10 -1: storeToXML +10 -1: getMethod0 +12 -1: constantZero +7 -1: promise +116 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/MethodRepository; +32 -1: DIRECTIONALITY_SEGMENT_SEPARATOR +9 -1: byteOrder +9 -1: isPromise +4 -1: isOn +6 -1: LOCCRC +10 -1: setDefault +9 -1: setHandle +15 -1: java/nio/Buffer +37 -1: (Ljava/lang/String;I)Ljava/lang/Long; +10 -1: Float.java +12 -1: showSettings +27 -1: (Ljava/io/FileDescriptor;)I +27 -1: (Ljava/io/FileDescriptor;)J +21 -1: java/util/Spliterator +22 -1: CodingErrorAction.java +11 -1: isMalformed +27 -1: java/util/PrimitiveIterator +15 -1: THROW_EXCEPTION +15 -1: copyToCharArray +26 -1: ()Ljava/util/jar/JarEntry; +27 -1: (Ljava/io/FileDescriptor;)V +11 -1: getEncoding +48 -1: (Ljava/lang/ThreadLocal<*>;Ljava/lang/Object;I)V +17 -1: java.runtime.name +28 -1: (Lsun/invoke/util/Wrapper;)Z +20 -1: annotationTypeOffset +27 -1: (J)Ljava/lang/StringBuffer; +15 -1: METHOD_RECEIVER +10 -1: startEntry +29 -1: (I)Ljava/lang/reflect/Member; +7 -1: setOut0 +10 -1: getMethods +26 -1: ()Lsun/misc/JavaNioAccess; +18 -1: linkToTargetMethod +8 -1: INSTANCE +3 -1: dir +41 -1: ([Ljava/net/URL;Ljava/lang/ClassLoader;)V +9 -1: unboxCast +58 -1: (TT;)Lsun/invoke/empty/Empty;^TT; +12 -1: java.version +50 -1: (Ljava/io/InputStream;Ljava/nio/charset/Charset;)V +32 2: sun/net/www/protocol/jar/Handler +20 -1: java/lang/Compiler$1 +9 -1: LongCache +14 -1: FILL_THRESHOLD +22 -1: getRawClassAnnotations +9 -1: (JI[CII)I +13 -1: hasMoreTokens +13 -1: getSuperclass +3 -1: PRC +12 -1: MAX_PRIORITY +14 -1: checkCacheLoad +7 -1: lowMask +8 -1: LM_CLASS +7 -1: initIDs +27 -1: Ljava/util/Collection; +3 -1: yes +3 -1: PRT +91 -1: (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/LambdaForm; +27 -1: ()Lsun/security/util/Debug; +8 -1: VM start +9 -1: setMemory +7 -1: getName +10 -1: findSignal +19 -1: startsWithLocHeader +37 -1: java/util/Collections$SynchronizedMap +51 -1: (ICLjava/lang/Object;)Ljava/lang/invoke/LambdaForm; +62 -1: (Ljava/util/Locale;)Lsun/util/locale/provider/LocaleResources; +17 -1: lastParameterType +9 -1: NO_PTYPES +116 -1: ([Ljava/lang/ClassValue$Entry<*>;Ljava/lang/ClassValue;)Ljava/lang/ClassValue$Entry; +18 -1: DisplayNamePattern +8 -1: getField +5 -1: flags +3 -1: PST +17 -1: annotationDefault +18 -1: java/nio/ByteOrder +8 -1: highMask +6 -1: ascii7 +29 -1: getGregorianYearFromFixedDate +125 -1: (Ljava/lang/String;[Ljava/lang/invoke/LambdaForm$Name;[Ljava/lang/invoke/LambdaForm$Name;Ljava/lang/invoke/LambdaForm$Name;)V +8 -1: =Lambda( +29 -1: Ljava/util/WeakHashMap$Entry; +18 -1: multiValueIterator +74 -1: Ljava/util/LinkedHashMap; +13 -1: CONV_OP_LIMIT +6 -1: sclSet +81 -1: (Lsun/misc/URLClassPath$JarLoader;Ljava/util/jar/JarFile;)Ljava/util/jar/JarFile; +14 -1: appendFragment +46 -1: java/util/Collections$SynchronizedNavigableMap +36 -1: application/x-java-serialized-object +13 -1: setNativeName +53 -1: java/util/concurrent/ConcurrentHashMap$ForwardingNode +16 -1: setJavaAWTAccess +30 -1: methodHandleInvokeLinkerMethod +15 -1: reduceKeysToInt +20 -1: ensureCapacityHelper +23 -1: createFileURLConnection +12 -1: d3dAvailable +69 -1: (Ljava/lang/Object;Ljava/lang/invoke/MethodHandle;)Ljava/lang/String; +49 -1: java/util/ArraysParallelSortHelpers$FJLong$Sorter +21 -1: explicitCastArguments +24 -1: JAVAFX_LAUNCH_MODE_CLASS +9 -1: invoke_MT +18 -1: ensureMemberAccess +74 -1: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)I +36 -1: java/nio/charset/spi/CharsetProvider +23 -1: (Ljava/lang/String;II)V +14 -1: initProperties +4 -1: (F)F +35 -1: [[Ljava/lang/annotation/Annotation; +4 -1: (F)I +106 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable;Ljava/lang/CharSequence; +46 -1: java/lang/invoke/BoundMethodHandle$SpeciesData +74 -1: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z +24 -1: java.launcher.opt.header +37 -1: ([Ljava/security/ProtectionDomain;Z)V +10 -1: lineBuffer +7 -1: ibm-813 +9 -1: isBuiltin +4 -1: (F)V +7 -1: ibm-819 +9 -1: H_ESCAPED +4 -1: (F)Z +20 -1: suppressedExceptions +12 -1: UTF-32LE-BOM +19 -1: CalendarSystem.java +8 -1: readOnly +81 -1: (JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object; +32 -1: sun/misc/Launcher$AppClassLoader +78 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable; +17 -1: [Ljava/lang/Enum; +41 -1: java/util/Collections$CheckedNavigableSet +8 -1: asSetter +3 -1: dom +41 -1: (I)[Ljava/util/WeakHashMap$Entry; +16 -1: localeExtensions +21 -1: sun/net/www/ParseUtil +21 -1: Ljava/nio/ByteBuffer; +29 -1: java/util/concurrent/TimeUnit +25 -1: java/lang/CharacterData00 +15 -1: sun/misc/Unsafe +28 -1: java/io/ByteArrayInputStream +3 -1: dow +25 -1: java/lang/CharacterData01 +25 -1: java/lang/CharacterData02 +6 -1: STORED +11 -1: isTransient +8 -1: function +16 -1: getCanonicalFile +13 -1: ,useDaylight= +24 -1: domain (context is null) +12 -1: Cleaner.java +17 -1: CalendarDate.java +49 -1: Lsun/reflect/generics/repository/FieldRepository; +14 -1: forInputString +25 -1: java/lang/CharacterData0E +67 -1: (Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object; +19 -1: codePointBeforeImpl +6 -1: script +21 -1: systemNativeLibraries +38 -1: ([Ljava/lang/Class;)Ljava/lang/String; +14 -1: CONTENT_LENGTH +19 -1: HeapCharBuffer.java +22 -1: ExtendedProviderHolder +41 -1: java/lang/invoke/InvokerBytecodeGenerator +12 -1: basicInvoker +26 -1: ([Ljava/lang/Comparable;)V +10 -1: val$tclass +47 -1: (Ljava/lang/Throwable;)Lsun/invoke/empty/Empty; +18 -1: isLegalReplacement +22 -1: spliteratorUnknownSize +15 -1: SynchronizedSet +16 -1: MethodParameters +22 -1: desiredAssertionStatus +29 -1: ()Ljava/util/ArrayDeque; +36 -1: ()Ljava/lang/reflect/Constructor<*>; +66 -1: ()Ljava/util/Map; +58 -1: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V +50 -1: (Ljava/util/concurrent/CountedCompleter;[J[JIIII)V +14 -1: requireNonNull +21 -1: java/lang/ThreadGroup +95 -1: ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V +76 -1: (Ljava/nio/channels/WritableByteChannel;Ljava/nio/charset/CharsetEncoder;I)V +14 -1: reflectionData +33 -1: Ljava/lang/invoke/MethodTypeForm; +7 -1: tuesday +31 -1: ()Lsun/misc/JavaSecurityAccess; +14 -1: fieldFilterMap +28 -1: ([Ljava/lang/ThreadGroup;Z)I +7 -1: ibm-850 +83 -1: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/management/GarbageCollectorMXBean; +7 -1: ibm-852 +5 -1: cesu8 +14 -1: ForwardingNode +29 -1: (Ljava/nio/ByteBuffer;IIIII)V +7 -1: ibm-855 +12 -1: SingletonSet +16 -1: isOtherUppercase +15 -1: FIELD_UNDEFINED +9 -1: makeEntry +7 -1: ibm-857 +10 -1: extensions +10 -1: longStream +19 -1: getGenericSignature +7 -1: newNode +8 -1: jarNames +25 -1: java/util/jar/JarVerifier +49 -1: ()[Lsun/reflect/generics/tree/ClassTypeSignature; +4 -1: wait +115 -1: (Ljava/lang/String;Lsun/reflect/generics/factory/GenericsFactory;)Lsun/reflect/generics/repository/ClassRepository; +56 -1: (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; +65 -1: (Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)V +7 -1: ibm-862 +9 -1: ISO646-US +7 -1: ibm-866 +16 -1: extendedProvider +7 -1: ([C[C)Z +93 -1: (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; +8 -1: getHours +21 -1: ()[Ljava/lang/String; +187 -1: (Ljava/util/concurrent/ConcurrentHashMap$BulkTask;III[Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$ReduceKeysTask;Ljava/util/function/BiFunction;)V +106 -1: Ljava/util/concurrent/locks/ReentrantLock;Ljava/io/Serializable; +24 -1: java/nio/file/FileSystem +14 -1: ForEachKeyTask +13 -1: defaultLocale +20 -1: constructorModifiers +13 -1: asWrapperType +42 -1: (Ljava/lang/String;ZI)Ljava/lang/Class<*>; +17 -1: BaseCalendar.java +76 -1: (Ljava/util/jar/JarFile;Ljava/util/jar/JarEntry;)[Ljava/security/CodeSigner; +14 -1: isSynchronized +27 -1: java/nio/DirectByteBuffer$1 +3 -1: ()B +7 -1: ibm-874 +12 -1: exactInvoker +3 -1: ()C +39 -1: (Ljava/lang/Thread;Ljava/lang/Object;)V +3 -1: ()D +3 -1: ()F +27 -1: [Ljava/lang/reflect/Method; +10 -1: floatValue +3 -1: ()I +3 -1: ()J +18 -1: getLocaleResources +59 -1: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesTask +67 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/Hashtable$Entry;)V +11 -1: maxPriority +11 -1: getStringAt +60 -1: (Ljava/lang/ClassValue$Version;)Ljava/lang/ClassValue$Entry; +3 -1: ()S +49 -1: (Ljava/lang/String;)Ljava/io/ExpiringCache$Entry; +42 -1: (III)Lsun/util/calendar/BaseCalendar$Date; +82 -1: (Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; +62 -1: ([BLsun/reflect/ConstantPool;Ljava/lang/Class;)Ljava/util/Map; +3 -1: ()V +24 -1: ()Ljava/nio/ShortBuffer; +29 -1: file descriptor can't be null +3 -1: ()Z +7 -1: matcher +66 -1: (Ljava/lang/reflect/Constructor;)Lsun/reflect/ConstructorAccessor; +7 -1: matches +12 -1: getAuthority +16 -1: java/lang/Object +5 -1: (IC)V +17 -1: EmptyListIterator +8 -1: charsets +8 -1: sameFile +47 -1: (TT;Ljava/util/function/UnaryOperator;)TV; +16 -1: overwrittenEntry +15 -1: reinvokerTarget +11 -1: isUpperCase +5 -1: toUri +9 -1: GMT+00:00 +33 -1: java/util/concurrent/ForkJoinPool +10 -1: parseFloat +53 -1: java/util/concurrent/ConcurrentHashMap$SearchKeysTask +48 -1: (Ljava/lang/Object;Ljava/util/LinkedList$Node;)V +82 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;Ljava/lang/Object;ILjava/lang/Class<*>;)V +15 -1: reduceCacheLoad +76 -1: (Ljava/lang/Class<*>;[Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method; +20 -1: singletonSpliterator +24 -1: getTransitionEpochSecond +24 -1: MapReduceValuesToIntTask +13 -1: ALLOWED_FLAGS +55 -1: (Ljava/lang/reflect/Field;Z)Lsun/reflect/FieldAccessor; +34 -1: [Ljava/lang/annotation/Annotation; +10 -1: readBuffer +21 -1: Illegal month value: +31 -1: java/security/SecureClassLoader +12 -1: reinitialize +5 -1: limit +4 -1: grow +15 -1: getCreationTime +7 -1: , from +25 -1: (Ljava/lang/ClassValue;)V +13 -1: java.compiler +37 -1: ()Ljava/util/Set; +6 -1: FJChar +16 -1: getFieldAccessor +4 -1: eras +11 -1: isSupported +24 -1: ()Ljava/text/DateFormat; +32 -1: java/util/Collections$CopiesList +32 -1: java/io/NotSerializableException +15 -1: typeAnnotations +27 -1: defaultAllowUserInteraction +57 -1: (Ljava/lang/String;I[Ljava/lang/invoke/LambdaForm$Name;)V +18 -1: checkArgumentTypes +71 -1: (Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar; +10 -1: isMirrored +27 -1: (I)Ljava/lang/Thread$State; +26 -1: (Ljava/util/Collection;Z)Z +6 -1: ibm367 +16 -1: isAssignableFrom +7 -1: readUTF +35 -1: Ljava/lang/ref/ReferenceQueue; +56 -1: ([Ljava/util/HashMap$Node;Ljava/util/HashMap$TreeNode;)V +8 -1: MANDATED +18 -1: canonicalizeRegion +11 -1: checkAccept +44 -1: (Ljava/net/Proxy;)Lsun/net/ApplicationProxy; +8 -1: ECMA-118 +22 -1: ReflectPermission.java +4 -1: _put +41 -1: java.lang.invoke.MethodHandle.DEBUG_NAMES +47 -1: java/util/concurrent/ConcurrentHashMap$TreeNode +44 -1: (Ljava/net/URL;[Ljava/security/CodeSigner;)V +5 -1: april +44 -1: ([Ljava/lang/Class<*>;Ljava/lang/Class<*>;)V +150 -1: Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/Set;Ljava/io/Serializable; +91 -1: (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode; +26 -1: sun/net/util/IPAddressUtil +8 -1: Modifier +9 -1: isVarargs +24 -1: -- listing properties -- +16 -1: hasAllPermission +27 -1: MapReduceMappingsToLongTask +29 -1: sharedGetParameterAnnotations +9 -1: argCounts +11 -1: toLocalTime +89 -1: (Ljava/lang/invoke/LambdaForm;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MemberName; +4 -1: ROOT +20 -1: sun.reflect.noCaches +18 -1: UnicodeBigUnmarked +4 -1: Lazy +35 -1: java/lang/invoke/SimpleMethodHandle +20 -1: (I)Ljava/nio/Buffer; +48 -1: ()Lsun/reflect/generics/tree/ClassTypeSignature; +31 -1: (I[CII)Ljava/lang/StringBuffer; +17 -1: America/Anchorage +7 -1: markpos +9 -1: enumerate +11 -1: parseLocale +24 -1: java.launcher.cls.error1 +46 -1: (ILjava/lang/Object;)Ljava/lang/StringBuilder; +24 -1: java.launcher.cls.error2 +24 -1: java.launcher.cls.error3 +24 -1: java.launcher.cls.error4 +21 -1: java/util/ArrayList$1 +17 -1: getExceptionTypes +24 -1: java.launcher.cls.error5 +30 -1: java/util/Spliterator$OfDouble +10 -1: forDecoder +8 -1: getEntry +10 -1: checkGuard +12 -1: checkInitted +34 -1: Lsun/util/locale/LocaleExtensions; +41 -1: java/util/ArraysParallelSortHelpers$FJInt +10 -1: findStatic +22 -1: setConstructorAccessor +34 -1: Lsun/misc/URLClassPath$FileLoader; +20 -1: not a reinvoker MH: +16 -1: LongCumulateTask +11 -1: checkAccess +14 -1: SearchKeysTask +36 -1: ()[Ljava/lang/reflect/AnnotatedType; +11 -1: initDefault --- old/test/hotspot/jtreg/runtime/appcds/FieldAnnotationsTest.java 2019-07-24 08:26:29.145471095 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test for field annotations. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/FieldAnnotationsApp.java test-classes/MyAnnotation.java - * @run driver FieldAnnotationsTest - */ - -import jdk.test.lib.process.OutputAnalyzer; - -// This is a test for the handling of multi-dimensional Arrays in MetaspaceClosure. -// -// We choose FieldAnnotations because they happen to be implemented as a multi-dimension -// Array (Annotations::_fields_annotations, which is of type Array*>*, -// and is handled by the template class PointerArrayRef in metaspaceClosure.hpp). -// -// Specifically, we are testing the following C code, where _fields_annotations is non-NULL: -// -// void Annotations::metaspace_pointers_do(MetaspaceClosure* it) { -// ... -// it->push(&_fields_annotations); -// -// which will be matched with the function -// -// template void MetaspaceClosure::push(Array** mpp, Writability w = _default) -// -public class FieldAnnotationsTest { - public static void main(String[] args) throws Exception { - String[] ARCHIVE_CLASSES = {"FieldAnnotationsApp", "MyAnnotation"}; - String appJar = JarBuilder.build("FieldAnnotationsTest", ARCHIVE_CLASSES); - - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, ARCHIVE_CLASSES); - TestCommon.checkDump(dumpOutput); - - OutputAnalyzer execOutput = TestCommon.exec(appJar, "FieldAnnotationsApp"); - TestCommon.checkExec(execOutput, "Field annotations are OK."); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/FieldAnnotationsTest.java 2019-07-24 08:26:28.821471107 -0400 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test for field annotations. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/FieldAnnotationsApp.java test-classes/MyAnnotation.java + * @run driver FieldAnnotationsTest + */ + +import jdk.test.lib.process.OutputAnalyzer; + +// This is a test for the handling of multi-dimensional Arrays in MetaspaceClosure. +// +// We choose FieldAnnotations because they happen to be implemented as a multi-dimension +// Array (Annotations::_fields_annotations, which is of type Array*>*, +// and is handled by the template class PointerArrayRef in metaspaceClosure.hpp). +// +// Specifically, we are testing the following C code, where _fields_annotations is non-NULL: +// +// void Annotations::metaspace_pointers_do(MetaspaceClosure* it) { +// ... +// it->push(&_fields_annotations); +// +// which will be matched with the function +// +// template void MetaspaceClosure::push(Array** mpp, Writability w = _default) +// +public class FieldAnnotationsTest { + public static void main(String[] args) throws Exception { + String[] ARCHIVE_CLASSES = {"FieldAnnotationsApp", "MyAnnotation"}; + String appJar = JarBuilder.build("FieldAnnotationsTest", ARCHIVE_CLASSES); + + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, ARCHIVE_CLASSES); + TestCommon.checkDump(dumpOutput); + + OutputAnalyzer execOutput = TestCommon.exec(appJar, "FieldAnnotationsApp"); + TestCommon.checkExec(execOutput, "Field annotations are OK."); + } +} --- old/test/hotspot/jtreg/runtime/appcds/FreeUnusedMetadata.java 2019-07-24 08:26:29.489471083 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Unused metadata created during dump time should be freed from the CDS archive. - * @requires vm.cds - * @library /test/lib - * @modules jdk.jartool/sun.tools.jar - * @compile test-classes/MethodNoReturn.jasm test-classes/Hello.java - * @run driver FreeUnusedMetadata - */ - -import java.nio.file.Files; -import java.nio.file.Paths; -import jdk.test.lib.process.OutputAnalyzer; - -public class FreeUnusedMetadata { - static byte iconst_1 = 4; - static byte pop = 87; - static byte[] pattern = { // This has the same sequence as in test-classes/MethodNoReturn.jasm - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - pop, - iconst_1, - iconst_1, - iconst_1, - iconst_1, - iconst_1, - iconst_1, - iconst_1, - iconst_1, - pop, - pop, - pop, - pop, - pop, - pop, - pop, - pop - }; - - public static void main(String[] args) throws Exception { - String[] ARCHIVE_CLASSES = {"Hello", "MethodNoReturn"}; - String appJar = JarBuilder.build("FreeUnusedMetadata", ARCHIVE_CLASSES); - - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, ARCHIVE_CLASSES); - TestCommon.checkDump(dumpOutput, "Loading classes to share"); - - OutputAnalyzer execOutput = TestCommon.exec(appJar, "Hello"); - TestCommon.checkExec(execOutput, "Hello World"); - - - String archive = TestCommon.getCurrentArchiveName(); - System.out.println("Checking for pattern inside " + archive + "..."); - - byte[] data = Files.readAllBytes(Paths.get(archive)); - int max = data.length - pattern.length; - for (int i=0; i toClassNames(String filename) throws IOException { - ArrayList classes = new ArrayList<>(); - try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)))) { - for (; ; ) { - String line = br.readLine(); - if (line == null) { - break; - } - classes.add(line.replaceAll("/", ".")); - } - } - return classes; - } - - static void dumpLoadedClasses(String[] expectedClasses) throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, - "-XX:DumpLoadedClassList=" + CLASSLIST_FILE, - // trigger JVMCI runtime init so that JVMCI classes will be - // included in the classlist - "-XX:+UnlockExperimentalVMOptions", - "-XX:+EnableJVMCI", - "-XX:+EagerJVMCI", - "-cp", - TESTJAR, - TESTNAME, - TEST_OUT); - - OutputAnalyzer output = TestCommon.executeAndLog(pb, "dump-loaded-classes") - .shouldHaveExitValue(0) - .shouldContain(TEST_OUT); - - List dumpedClasses = toClassNames(CLASSLIST_FILE); - - for (String clazz : expectedClasses) { - if (!dumpedClasses.contains(clazz)) { - throw new RuntimeException(clazz + " missing in " + - CLASSLIST_FILE); - } - } - } - - static void dumpArchive() throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, - "-cp", - TESTJAR, - "-XX:SharedClassListFile=" + CLASSLIST_FILE, - "-XX:SharedArchiveFile=" + ARCHIVE_FILE, - "-Xlog:cds", - "-Xshare:dump", - "-XX:MetaspaceSize=12M", - "-XX:MaxMetaspaceSize=12M"); - - OutputAnalyzer output = TestCommon.executeAndLog(pb, "dump-archive"); - int exitValue = output.getExitValue(); - if (exitValue == 1) { - output.shouldContain("Failed allocating metaspace object type"); - } else if (exitValue == 0) { - output.shouldContain("Loading classes to share"); - } else { - throw new RuntimeException("Unexpected exit value " + exitValue); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/GraalWithLimitedMetaspace.java 2019-07-24 08:26:29.553471081 -0400 @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test dumping with limited metaspace with loading of JVMCI related classes. + * VM should not crash but CDS dump will abort upon failure in allocating metaspace. + * @requires vm.cds & vm.graal.enabled & vm.compMode == "Xmixed" + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @build UseAppCDS_Test + * @run driver ClassFileInstaller -jar test.jar UseAppCDS_Test + * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI + * -XX:+TieredCompilation -XX:+UseJVMCICompiler -Djvmci.Compiler=graal + * GraalWithLimitedMetaspace + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +import java.util.ArrayList; +import java.util.List; +import java.io.*; + +public class GraalWithLimitedMetaspace { + + // Class UseAppCDS_Test is loaded by the App loader + + static final String TEST_OUT = "UseAppCDS_Test.main--executed"; + + private static final String TESTJAR = "./test.jar"; + private static final String TESTNAME = "UseAppCDS_Test"; + private static final String TESTCLASS = TESTNAME + ".class"; + + private static final String CLASSLIST_FILE = "./GraalWithLimitedMetaspace.classlist"; + private static final String ARCHIVE_FILE = "./GraalWithLimitedMetaspace.jsa"; + private static final String BOOTCLASS = "java.lang.Class"; + + public static void main(String[] args) throws Exception { + + // dump loaded classes into a classlist file + dumpLoadedClasses(new String[] { BOOTCLASS, TESTNAME }); + + + // create an archive using the classlist + dumpArchive(); + + } + + public static List toClassNames(String filename) throws IOException { + ArrayList classes = new ArrayList<>(); + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)))) { + for (; ; ) { + String line = br.readLine(); + if (line == null) { + break; + } + classes.add(line.replaceAll("/", ".")); + } + } + return classes; + } + + static void dumpLoadedClasses(String[] expectedClasses) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, + "-XX:DumpLoadedClassList=" + CLASSLIST_FILE, + // trigger JVMCI runtime init so that JVMCI classes will be + // included in the classlist + "-XX:+UnlockExperimentalVMOptions", + "-XX:+EnableJVMCI", + "-XX:+EagerJVMCI", + "-cp", + TESTJAR, + TESTNAME, + TEST_OUT); + + OutputAnalyzer output = TestCommon.executeAndLog(pb, "dump-loaded-classes") + .shouldHaveExitValue(0) + .shouldContain(TEST_OUT); + + List dumpedClasses = toClassNames(CLASSLIST_FILE); + + for (String clazz : expectedClasses) { + if (!dumpedClasses.contains(clazz)) { + throw new RuntimeException(clazz + " missing in " + + CLASSLIST_FILE); + } + } + } + + static void dumpArchive() throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, + "-cp", + TESTJAR, + "-XX:SharedClassListFile=" + CLASSLIST_FILE, + "-XX:SharedArchiveFile=" + ARCHIVE_FILE, + "-Xlog:cds", + "-Xshare:dump", + "-XX:MetaspaceSize=12M", + "-XX:MaxMetaspaceSize=12M"); + + OutputAnalyzer output = TestCommon.executeAndLog(pb, "dump-archive"); + int exitValue = output.getExitValue(); + if (exitValue == 1) { + output.shouldContain("Failed allocating metaspace object type"); + } else if (exitValue == 0) { + output.shouldContain("Loading classes to share"); + } else { + throw new RuntimeException("Unexpected exit value " + exitValue); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/HelloExtTest.java 2019-07-24 08:26:30.237471057 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary a simple test for loading a class using the platform class loader - * (which used to be called the "extension loader) in AppCDS - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * jdk.internal.jvmstat/sun.jvmstat.monitor - * @compile test-classes/HelloExt.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver HelloExtTest - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class HelloExtTest { - - public static void main(String[] args) throws Exception { - JarBuilder.build("helloExt", "HelloExt"); - - String appJar = TestCommon.getTestJar("helloExt.jar"); - JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); - String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; - - TestCommon.dump(appJar, - TestCommon.list("javax/annotation/processing/FilerException", "[Ljava/lang/Comparable;"), - bootClassPath); - - String prefix = ".class.load. "; - String class_pattern = ".*LambdaForm[$]MH[/][0123456789].*"; - String suffix = ".*source: shared objects file.*"; - String pattern = prefix + class_pattern + suffix; - - TestCommon.run("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, bootClassPath, "-Xlog:class+load", "HelloExt") - .assertNormalExit(output -> output.shouldNotMatch(pattern)); - - - TestCommon.run("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, bootClassPath, "-Xlog:class+load", - "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary", - "HelloExt") - .assertNormalExit(output -> output.shouldNotMatch(class_pattern)); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/HelloExtTest.java 2019-07-24 08:26:29.953471067 -0400 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary a simple test for loading a class using the platform class loader + * (which used to be called the "extension loader) in AppCDS + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * jdk.internal.jvmstat/sun.jvmstat.monitor + * @compile test-classes/HelloExt.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver HelloExtTest + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class HelloExtTest { + + public static void main(String[] args) throws Exception { + JarBuilder.build("helloExt", "HelloExt"); + + String appJar = TestCommon.getTestJar("helloExt.jar"); + JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); + String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; + + TestCommon.dump(appJar, + TestCommon.list("javax/annotation/processing/FilerException", "[Ljava/lang/Comparable;"), + bootClassPath); + + String prefix = ".class.load. "; + String class_pattern = ".*LambdaForm[$]MH[/][0123456789].*"; + String suffix = ".*source: shared objects file.*"; + String pattern = prefix + class_pattern + suffix; + + TestCommon.run("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, bootClassPath, "-Xlog:class+load", "HelloExt") + .assertNormalExit(output -> output.shouldNotMatch(pattern)); + + + TestCommon.run("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, bootClassPath, "-Xlog:class+load", + "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary", + "HelloExt") + .assertNormalExit(output -> output.shouldNotMatch(class_pattern)); + } +} --- old/test/hotspot/jtreg/runtime/appcds/HelloTest.java 2019-07-24 08:26:30.581471045 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Hello World test for AppCDS - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver HelloTest - */ - -public class HelloTest { - public static void main(String[] args) throws Exception { - TestCommon.test(JarBuilder.getOrCreateHelloJar(), - TestCommon.list("Hello"), "Hello"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/HelloTest.java 2019-07-24 08:26:30.289471055 -0400 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Hello World test for AppCDS + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver HelloTest + */ + +public class HelloTest { + public static void main(String[] args) throws Exception { + TestCommon.test(JarBuilder.getOrCreateHelloJar(), + TestCommon.list("Hello"), "Hello"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/IgnoreEmptyClassPaths.java 2019-07-24 08:26:30.969471032 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test the -XX:+IgnoreEmptyClassPaths flag - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @compile test-classes/HelloMore.java - * @run driver IgnoreEmptyClassPaths - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; - -public class IgnoreEmptyClassPaths { - - public static void main(String[] args) throws Exception { - String jar1 = JarBuilder.getOrCreateHelloJar(); - String jar2 = JarBuilder.build("IgnoreEmptyClassPaths_more", "HelloMore"); - - String sep = File.pathSeparator; - String cp_dump = jar1 + sep + jar2 + sep; - String cp_exec = sep + jar1 + sep + sep + jar2 + sep; - - TestCommon.testDump(cp_dump, TestCommon.list("Hello", "HelloMore"), - "-XX:+TraceClassPaths", "-XX:+IgnoreEmptyClassPaths"); - - TestCommon.run( - "-verbose:class", - "-cp", cp_exec, - "-XX:+IgnoreEmptyClassPaths", // should affect classpath even if placed after the "-cp" argument - "-XX:+TraceClassPaths", - "HelloMore") - .assertNormalExit(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/IgnoreEmptyClassPaths.java 2019-07-24 08:26:30.637471043 -0400 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test the -XX:+IgnoreEmptyClassPaths flag + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @compile test-classes/HelloMore.java + * @run driver IgnoreEmptyClassPaths + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class IgnoreEmptyClassPaths { + + public static void main(String[] args) throws Exception { + String jar1 = JarBuilder.getOrCreateHelloJar(); + String jar2 = JarBuilder.build("IgnoreEmptyClassPaths_more", "HelloMore"); + + String sep = File.pathSeparator; + String cp_dump = jar1 + sep + jar2 + sep; + String cp_exec = sep + jar1 + sep + sep + jar2 + sep; + + TestCommon.testDump(cp_dump, TestCommon.list("Hello", "HelloMore"), + "-XX:+TraceClassPaths", "-XX:+IgnoreEmptyClassPaths"); + + TestCommon.run( + "-verbose:class", + "-cp", cp_exec, + "-XX:+IgnoreEmptyClassPaths", // should affect classpath even if placed after the "-cp" argument + "-XX:+TraceClassPaths", + "HelloMore") + .assertNormalExit(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/JarBuilder.java 2019-07-24 08:26:31.309471020 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,269 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @summary Simple jar builder - * Input: jarName className1 className2 ... - * do not specify extensions, just the names - * E.g. prot_domain ProtDomainA ProtDomainB - * Output: A jar containing compiled classes, placed in a test classes folder - * @library /open/test/lib - */ - -import jdk.test.lib.JDKToolFinder; -import jdk.test.lib.compiler.CompilerUtils; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; -import java.io.File; -import java.nio.file.Path; -import java.util.ArrayList; -import sun.tools.jar.Main; - -public class JarBuilder { - // to turn DEBUG on via command line: -DJarBuilder.DEBUG=[true, TRUE] - private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("JarBuilder.DEBUG", "false")); - private static final String classDir = System.getProperty("test.classes"); - - public static String getJarFilePath(String jarName) { - return classDir + File.separator + jarName + ".jar"; - } - - // jar all files under dir, with manifest file man, with an optional versionArgs - // for generating a multi-release jar. - // The jar command is as follows: - // jar cmf \ - // \ - // -C .\ - // --release 9 -C . - // the last line begins with "--release" corresponds to the optional versionArgs. - public static void build(String jarName, File dir, String man, String ...versionArgs) - throws Exception { - ArrayList args = new ArrayList(); - if (man != null) { - args.add("cfm"); - } else { - args.add("cf"); - } - args.add(classDir + File.separator + jarName + ".jar"); - if (man != null) { - args.add(man); - } - args.add("-C"); - args.add(dir.getAbsolutePath()); - args.add("."); - for (String verArg : versionArgs) { - args.add(verArg); - } - createJar(args); - } - - public static String build(String jarName, String ...classNames) - throws Exception { - - return createSimpleJar(classDir, getJarFilePath(jarName), classNames); - } - - public static String build(boolean classesInWorkDir, String jarName, String ...classNames) - throws Exception { - if (classesInWorkDir) { - return createSimpleJar(".", getJarFilePath(jarName), classNames); - } else { - return build(jarName, classNames); - } - } - - - public static String buildWithManifest(String jarName, String manifest, - String jarClassesDir, String ...classNames) throws Exception { - String jarPath = getJarFilePath(jarName); - ArrayList args = new ArrayList(); - args.add("cvfm"); - args.add(jarPath); - args.add(System.getProperty("test.src") + File.separator + "test-classes" - + File.separator + manifest); - addClassArgs(args, jarClassesDir, classNames); - createJar(args); - - return jarPath; - } - - - // Execute: jar uvf $jarFile -C $dir . - static void update(String jarFile, String dir) throws Exception { - String jarExe = JDKToolFinder.getJDKTool("jar"); - - ArrayList args = new ArrayList<>(); - args.add(jarExe); - args.add("uvf"); - args.add(jarFile); - args.add("-C"); - args.add(dir); - args.add("."); - - executeProcess(args.toArray(new String[1])); - } - - - private static String createSimpleJar(String jarclassDir, String jarName, - String[] classNames) throws Exception { - - ArrayList args = new ArrayList(); - args.add("cf"); - args.add(jarName); - addClassArgs(args, jarclassDir, classNames); - createJar(args); - - return jarName; - } - - private static void addClassArgs(ArrayList args, String jarclassDir, - String[] classNames) { - - for (String name : classNames) { - args.add("-C"); - args.add(jarclassDir); - args.add(name + ".class"); - } - } - - public static void createModularJar(String jarPath, - String classesDir, - String mainClass) throws Exception { - ArrayList argList = new ArrayList(); - argList.add("--create"); - argList.add("--file=" + jarPath); - if (mainClass != null) { - argList.add("--main-class=" + mainClass); - } - argList.add("-C"); - argList.add(classesDir); - argList.add("."); - createJar(argList); - } - - private static void createJar(ArrayList args) { - if (DEBUG) printIterable("createJar args: ", args); - - Main jarTool = new Main(System.out, System.err, "jar"); - if (!jarTool.run(args.toArray(new String[1]))) { - throw new RuntimeException("jar operation failed"); - } - } - - // Many AppCDS tests use the same simple "Hello.jar" which contains - // simple Hello.class and does not specify additional attributes. - // For this common use case, use this method to get the jar path. - // The method will check if the jar already exists - // (created by another test or test run), and will create the jar - // if it does not exist - public static String getOrCreateHelloJar() throws Exception { - String jarPath = getJarFilePath("hello"); - - File jarFile = new File(jarPath); - if (jarFile.exists()) { - return jarPath; - } else { - return build("hello", "Hello"); - } - } - - public static void compile(String dstPath, String source, String... extraArgs) throws Exception { - ArrayList args = new ArrayList(); - args.add(JDKToolFinder.getCompileJDKTool("javac")); - args.add("-d"); - args.add(dstPath); - if (extraArgs != null) { - for (String s : extraArgs) { - args.add(s); - } - } - args.add(source); - - if (DEBUG) printIterable("compile args: ", args); - - ProcessBuilder pb = new ProcessBuilder(args); - OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldHaveExitValue(0); - } - - public static void compileModule(Path src, - Path dest, - String modulePathArg // arg to --module-path - ) throws Exception { - boolean compiled = false; - if (modulePathArg == null) { - compiled = CompilerUtils.compile(src, dest); - } else { - compiled = CompilerUtils.compile(src, dest, - "--module-path", modulePathArg); - } - if (!compiled) { - throw new RuntimeException("module did not compile"); - } - } - - - public static void signJar() throws Exception { - String keyTool = JDKToolFinder.getJDKTool("keytool"); - String jarSigner = JDKToolFinder.getJDKTool("jarsigner"); - String classDir = System.getProperty("test.classes"); - String FS = File.separator; - - executeProcess(keyTool, - "-genkey", "-keystore", "./keystore", "-alias", "mykey", - "-storepass", "abc123", "-keypass", "abc123", - "-dname", "CN=jvmtest") - .shouldHaveExitValue(0); - - executeProcess(jarSigner, - "-keystore", "./keystore", "-storepass", "abc123", "-keypass", - "abc123", "-signedjar", classDir + FS + "signed_hello.jar", - classDir + FS + "hello.jar", "mykey") - .shouldHaveExitValue(0); - } - - private static OutputAnalyzer executeProcess(String... cmds) - throws Exception { - - JarBuilder.printArray("executeProcess: ", cmds); - return ProcessTools.executeProcess(new ProcessBuilder(cmds)); - } - - // diagnostic - public static void printIterable(String msg, Iterable l) { - StringBuilder sum = new StringBuilder(); - for (String s : l) { - sum.append(s).append(' '); - } - System.out.println(msg + sum.toString()); - } - - public static void printArray(String msg, String[] l) { - StringBuilder sum = new StringBuilder(); - for (String s : l) { - sum.append(s).append(' '); - } - System.out.println(msg + sum.toString()); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/JarBuilder.java 2019-07-24 08:26:31.021471030 -0400 @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @summary Simple jar builder + * Input: jarName className1 className2 ... + * do not specify extensions, just the names + * E.g. prot_domain ProtDomainA ProtDomainB + * Output: A jar containing compiled classes, placed in a test classes folder + * @library /open/test/lib + */ + +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.compiler.CompilerUtils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import java.io.File; +import java.nio.file.Path; +import java.util.ArrayList; +import sun.tools.jar.Main; + +public class JarBuilder { + // to turn DEBUG on via command line: -DJarBuilder.DEBUG=[true, TRUE] + private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("JarBuilder.DEBUG", "false")); + private static final String classDir = System.getProperty("test.classes"); + + public static String getJarFilePath(String jarName) { + return classDir + File.separator + jarName + ".jar"; + } + + // jar all files under dir, with manifest file man, with an optional versionArgs + // for generating a multi-release jar. + // The jar command is as follows: + // jar cmf \ + // \ + // -C .\ + // --release 9 -C . + // the last line begins with "--release" corresponds to the optional versionArgs. + public static void build(String jarName, File dir, String man, String ...versionArgs) + throws Exception { + ArrayList args = new ArrayList(); + if (man != null) { + args.add("cfm"); + } else { + args.add("cf"); + } + args.add(classDir + File.separator + jarName + ".jar"); + if (man != null) { + args.add(man); + } + args.add("-C"); + args.add(dir.getAbsolutePath()); + args.add("."); + for (String verArg : versionArgs) { + args.add(verArg); + } + createJar(args); + } + + public static String build(String jarName, String ...classNames) + throws Exception { + + return createSimpleJar(classDir, getJarFilePath(jarName), classNames); + } + + public static String build(boolean classesInWorkDir, String jarName, String ...classNames) + throws Exception { + if (classesInWorkDir) { + return createSimpleJar(".", getJarFilePath(jarName), classNames); + } else { + return build(jarName, classNames); + } + } + + + public static String buildWithManifest(String jarName, String manifest, + String jarClassesDir, String ...classNames) throws Exception { + String jarPath = getJarFilePath(jarName); + ArrayList args = new ArrayList(); + args.add("cvfm"); + args.add(jarPath); + args.add(System.getProperty("test.src") + File.separator + "test-classes" + + File.separator + manifest); + addClassArgs(args, jarClassesDir, classNames); + createJar(args); + + return jarPath; + } + + + // Execute: jar uvf $jarFile -C $dir . + static void update(String jarFile, String dir) throws Exception { + String jarExe = JDKToolFinder.getJDKTool("jar"); + + ArrayList args = new ArrayList<>(); + args.add(jarExe); + args.add("uvf"); + args.add(jarFile); + args.add("-C"); + args.add(dir); + args.add("."); + + executeProcess(args.toArray(new String[1])); + } + + + private static String createSimpleJar(String jarclassDir, String jarName, + String[] classNames) throws Exception { + + ArrayList args = new ArrayList(); + args.add("cf"); + args.add(jarName); + addClassArgs(args, jarclassDir, classNames); + createJar(args); + + return jarName; + } + + private static void addClassArgs(ArrayList args, String jarclassDir, + String[] classNames) { + + for (String name : classNames) { + args.add("-C"); + args.add(jarclassDir); + args.add(name + ".class"); + } + } + + public static void createModularJar(String jarPath, + String classesDir, + String mainClass) throws Exception { + ArrayList argList = new ArrayList(); + argList.add("--create"); + argList.add("--file=" + jarPath); + if (mainClass != null) { + argList.add("--main-class=" + mainClass); + } + argList.add("-C"); + argList.add(classesDir); + argList.add("."); + createJar(argList); + } + + private static void createJar(ArrayList args) { + if (DEBUG) printIterable("createJar args: ", args); + + Main jarTool = new Main(System.out, System.err, "jar"); + if (!jarTool.run(args.toArray(new String[1]))) { + throw new RuntimeException("jar operation failed"); + } + } + + // Many AppCDS tests use the same simple "Hello.jar" which contains + // simple Hello.class and does not specify additional attributes. + // For this common use case, use this method to get the jar path. + // The method will check if the jar already exists + // (created by another test or test run), and will create the jar + // if it does not exist + public static String getOrCreateHelloJar() throws Exception { + String jarPath = getJarFilePath("hello"); + + File jarFile = new File(jarPath); + if (jarFile.exists()) { + return jarPath; + } else { + return build("hello", "Hello"); + } + } + + public static void compile(String dstPath, String source, String... extraArgs) throws Exception { + ArrayList args = new ArrayList(); + args.add(JDKToolFinder.getCompileJDKTool("javac")); + args.add("-d"); + args.add(dstPath); + if (extraArgs != null) { + for (String s : extraArgs) { + args.add(s); + } + } + args.add(source); + + if (DEBUG) printIterable("compile args: ", args); + + ProcessBuilder pb = new ProcessBuilder(args); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(0); + } + + public static void compileModule(Path src, + Path dest, + String modulePathArg // arg to --module-path + ) throws Exception { + boolean compiled = false; + if (modulePathArg == null) { + compiled = CompilerUtils.compile(src, dest); + } else { + compiled = CompilerUtils.compile(src, dest, + "--module-path", modulePathArg); + } + if (!compiled) { + throw new RuntimeException("module did not compile"); + } + } + + + public static void signJar() throws Exception { + String keyTool = JDKToolFinder.getJDKTool("keytool"); + String jarSigner = JDKToolFinder.getJDKTool("jarsigner"); + String classDir = System.getProperty("test.classes"); + String FS = File.separator; + + executeProcess(keyTool, + "-genkey", "-keystore", "./keystore", "-alias", "mykey", + "-storepass", "abc123", "-keypass", "abc123", + "-dname", "CN=jvmtest") + .shouldHaveExitValue(0); + + executeProcess(jarSigner, + "-keystore", "./keystore", "-storepass", "abc123", "-keypass", + "abc123", "-signedjar", classDir + FS + "signed_hello.jar", + classDir + FS + "hello.jar", "mykey") + .shouldHaveExitValue(0); + } + + private static OutputAnalyzer executeProcess(String... cmds) + throws Exception { + + JarBuilder.printArray("executeProcess: ", cmds); + return ProcessTools.executeProcess(new ProcessBuilder(cmds)); + } + + // diagnostic + public static void printIterable(String msg, Iterable l) { + StringBuilder sum = new StringBuilder(); + for (String s : l) { + sum.append(s).append(' '); + } + System.out.println(msg + sum.toString()); + } + + public static void printArray(String msg, String[] l) { + StringBuilder sum = new StringBuilder(); + for (String s : l) { + sum.append(s).append(' '); + } + System.out.println(msg + sum.toString()); + } +} --- old/test/hotspot/jtreg/runtime/appcds/JvmtiAddPath.java 2019-07-24 08:26:31.673471007 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary JvmtiEnv::AddToBootstrapClassLoaderSearch and JvmtiEnv::AddToSystemClassLoaderSearch should disable AppCDS - * @requires vm.cds - * @bug 8060592 - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @compile test-classes/Hello.java - * @compile test-classes/JvmtiApp.java - * @run driver JvmtiAddPath - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class JvmtiAddPath { - static String use_whitebox_jar; - static String[] no_extra_matches = {}; - static String[] check_appcds_enabled = { - "[class,load] ExtraClass source: shared object" - }; - static String[] check_appcds_disabled = { - "[class,load] ExtraClass source: file:" - }; - - static void run(String cp, String... args) throws Exception { - run(no_extra_matches, cp, args); - } - - static void run(String[] extra_matches, String cp, String... args) throws Exception { - String[] opts = {"-cp", cp, "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", use_whitebox_jar}; - opts = TestCommon.concat(opts, args); - TestCommon.run(opts).assertNormalExit(extra_matches); - } - - public static void main(String[] args) throws Exception { - JarBuilder.build("jvmti_addboot", "Hello"); - JarBuilder.build("jvmti_addapp", "Hello"); - JarBuilder.build("jvmti_app", "JvmtiApp", "ExtraClass"); - JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - - // In all the test cases below, appJar does not contain Hello.class. Instead, we - // append JAR file(s) that contain Hello.class to the boot classpath, the app - // classpath, or both, and verify that Hello.class is loaded by the expected ClassLoader. - String appJar = TestCommon.getTestJar("jvmti_app.jar"); // contains JvmtiApp.class - String addappJar = TestCommon.getTestJar("jvmti_addapp.jar"); // contains Hello.class - String addbootJar = TestCommon.getTestJar("jvmti_addboot.jar"); // contains Hello.class - String twoAppJars = appJar + File.pathSeparator + addappJar; - String wbJar = TestCommon.getTestJar("WhiteBox.jar"); - use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - - TestCommon.testDump(appJar, TestCommon.list("JvmtiApp", "ExtraClass"), use_whitebox_jar); - - System.out.println("Test case 1: not adding any paths - Hello.class should not be found"); - run(check_appcds_enabled, appJar, "-Xlog:class+load", "JvmtiApp", "noadd"); // appcds should be enabled - - System.out.println("Test case 2: add to boot classpath only - should find Hello.class in boot loader"); - String[] toCheck = (TestCommon.isDynamicArchive()) ? check_appcds_enabled - : check_appcds_disabled; - run(toCheck, appJar, "-Xlog:class+load", "JvmtiApp", "bootonly", addbootJar); // appcds should be disabled - - System.out.println("Test case 3: add to app classpath only - should find Hello.class in app loader"); - run(appJar, "JvmtiApp", "apponly", addappJar); - - System.out.println("Test case 4: add to boot and app paths - should find Hello.class in boot loader"); - run(appJar, "JvmtiApp", "appandboot", addbootJar, addappJar); - - System.out.println("Test case 5: add to app using -cp, but add to boot using JVMTI - should find Hello.class in boot loader"); - run(twoAppJars, "JvmtiApp", "bootonly", addappJar); - - System.out.println("Test case 6: add to app using AppCDS, but add to boot using JVMTI - should find Hello.class in boot loader"); - TestCommon.testDump(twoAppJars, TestCommon.list("JvmtiApp", "ExtraClass", "Hello"), use_whitebox_jar); - if (!TestCommon.isDynamicArchive()) { - // skip for dynamic archive, the Hello class will be loaded from - // the dynamic archive - run(twoAppJars, "JvmtiApp", "bootonly", addappJar); - } - - System.out.println("Test case 7: add to app using AppCDS, no JVMTI calls - should find Hello.class in app loader"); - run(twoAppJars, "JvmtiApp", "noadd-appcds"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/JvmtiAddPath.java 2019-07-24 08:26:31.373471018 -0400 @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary JvmtiEnv::AddToBootstrapClassLoaderSearch and JvmtiEnv::AddToSystemClassLoaderSearch should disable AppCDS + * @requires vm.cds + * @bug 8060592 + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @compile test-classes/Hello.java + * @compile test-classes/JvmtiApp.java + * @run driver JvmtiAddPath + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class JvmtiAddPath { + static String use_whitebox_jar; + static String[] no_extra_matches = {}; + static String[] check_appcds_enabled = { + "[class,load] ExtraClass source: shared object" + }; + static String[] check_appcds_disabled = { + "[class,load] ExtraClass source: file:" + }; + + static void run(String cp, String... args) throws Exception { + run(no_extra_matches, cp, args); + } + + static void run(String[] extra_matches, String cp, String... args) throws Exception { + String[] opts = {"-cp", cp, "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", use_whitebox_jar}; + opts = TestCommon.concat(opts, args); + TestCommon.run(opts).assertNormalExit(extra_matches); + } + + public static void main(String[] args) throws Exception { + JarBuilder.build("jvmti_addboot", "Hello"); + JarBuilder.build("jvmti_addapp", "Hello"); + JarBuilder.build("jvmti_app", "JvmtiApp", "ExtraClass"); + JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + + // In all the test cases below, appJar does not contain Hello.class. Instead, we + // append JAR file(s) that contain Hello.class to the boot classpath, the app + // classpath, or both, and verify that Hello.class is loaded by the expected ClassLoader. + String appJar = TestCommon.getTestJar("jvmti_app.jar"); // contains JvmtiApp.class + String addappJar = TestCommon.getTestJar("jvmti_addapp.jar"); // contains Hello.class + String addbootJar = TestCommon.getTestJar("jvmti_addboot.jar"); // contains Hello.class + String twoAppJars = appJar + File.pathSeparator + addappJar; + String wbJar = TestCommon.getTestJar("WhiteBox.jar"); + use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + + TestCommon.testDump(appJar, TestCommon.list("JvmtiApp", "ExtraClass"), use_whitebox_jar); + + System.out.println("Test case 1: not adding any paths - Hello.class should not be found"); + run(check_appcds_enabled, appJar, "-Xlog:class+load", "JvmtiApp", "noadd"); // appcds should be enabled + + System.out.println("Test case 2: add to boot classpath only - should find Hello.class in boot loader"); + String[] toCheck = (TestCommon.isDynamicArchive()) ? check_appcds_enabled + : check_appcds_disabled; + run(toCheck, appJar, "-Xlog:class+load", "JvmtiApp", "bootonly", addbootJar); // appcds should be disabled + + System.out.println("Test case 3: add to app classpath only - should find Hello.class in app loader"); + run(appJar, "JvmtiApp", "apponly", addappJar); + + System.out.println("Test case 4: add to boot and app paths - should find Hello.class in boot loader"); + run(appJar, "JvmtiApp", "appandboot", addbootJar, addappJar); + + System.out.println("Test case 5: add to app using -cp, but add to boot using JVMTI - should find Hello.class in boot loader"); + run(twoAppJars, "JvmtiApp", "bootonly", addappJar); + + System.out.println("Test case 6: add to app using AppCDS, but add to boot using JVMTI - should find Hello.class in boot loader"); + TestCommon.testDump(twoAppJars, TestCommon.list("JvmtiApp", "ExtraClass", "Hello"), use_whitebox_jar); + if (!TestCommon.isDynamicArchive()) { + // skip for dynamic archive, the Hello class will be loaded from + // the dynamic archive + run(twoAppJars, "JvmtiApp", "bootonly", addappJar); + } + + System.out.println("Test case 7: add to app using AppCDS, no JVMTI calls - should find Hello.class in app loader"); + run(twoAppJars, "JvmtiApp", "noadd-appcds"); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/LoadClass.java 2019-07-24 08:26:32.029470995 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @summary Load the class specifiecd by the argument - * Input: className - */ -public class LoadClass { - public static void main(String args[]) { - Class c = null; - try { - c = Class.forName(args[0]); - } catch (ClassNotFoundException e) { - System.out.println(e); - } - if (c != null) { - System.out.println(c + " loaded."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/LoadClass.java 2019-07-24 08:26:31.737471005 -0400 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @summary Load the class specifiecd by the argument + * Input: className + */ +public class LoadClass { + public static void main(String args[]) { + Class c = null; + try { + c = Class.forName(args[0]); + } catch (ClassNotFoundException e) { + System.out.println(e); + } + if (c != null) { + System.out.println(c + " loaded."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/LongClassListPath.java 2019-07-24 08:26:32.421470981 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test the handling of long path to the classlist file. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver LongClassListPath - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.util.Arrays; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -public class LongClassListPath { - private static final int MAX_PATH = 260; - public static void main(String[] args) throws Exception { - String[] classes = {"hello"}; - String classList = - CDSTestUtils.makeClassList(classes).getPath(); - String archiveName = "LongClassListPath.jsa"; - - // Create a directory with long path and copy the classlist file to - // the directory. - Path classDir = Paths.get(System.getProperty("test.classes")); - Path destDir = classDir; - int subDirLen = MAX_PATH - classDir.toString().length() - 2; - if (subDirLen > 0) { - char[] chars = new char[subDirLen]; - Arrays.fill(chars, 'x'); - String subPath = new String(chars); - destDir = Paths.get(System.getProperty("test.classes"), subPath); - } - File longDir = destDir.toFile(); - longDir.mkdir(); - String destClassList = longDir.getPath() + File.separator + "LongClassListPath.classlist"; - Files.copy(Paths.get(classList), Paths.get(destClassList), StandardCopyOption.REPLACE_EXISTING); - - CDSOptions opts = (new CDSOptions()) - .addPrefix("-XX:ExtraSharedClassListFile=" + destClassList, "-cp", JarBuilder.getOrCreateHelloJar()) - .setArchiveName(archiveName); - CDSTestUtils.createArchiveAndCheck(opts); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/LongClassListPath.java 2019-07-24 08:26:32.089470993 -0400 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test the handling of long path to the classlist file. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver LongClassListPath + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.Arrays; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class LongClassListPath { + private static final int MAX_PATH = 260; + public static void main(String[] args) throws Exception { + String[] classes = {"hello"}; + String classList = + CDSTestUtils.makeClassList(classes).getPath(); + String archiveName = "LongClassListPath.jsa"; + + // Create a directory with long path and copy the classlist file to + // the directory. + Path classDir = Paths.get(System.getProperty("test.classes")); + Path destDir = classDir; + int subDirLen = MAX_PATH - classDir.toString().length() - 2; + if (subDirLen > 0) { + char[] chars = new char[subDirLen]; + Arrays.fill(chars, 'x'); + String subPath = new String(chars); + destDir = Paths.get(System.getProperty("test.classes"), subPath); + } + File longDir = destDir.toFile(); + longDir.mkdir(); + String destClassList = longDir.getPath() + File.separator + "LongClassListPath.classlist"; + Files.copy(Paths.get(classList), Paths.get(destClassList), StandardCopyOption.REPLACE_EXISTING); + + CDSOptions opts = (new CDSOptions()) + .addPrefix("-XX:ExtraSharedClassListFile=" + destClassList, "-cp", JarBuilder.getOrCreateHelloJar()) + .setArchiveName(archiveName); + CDSTestUtils.createArchiveAndCheck(opts); + } +} --- old/test/hotspot/jtreg/runtime/appcds/LotsOfClasses.java 2019-07-24 08:26:32.817470967 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.util.ArrayList; - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; - -/* - * @test - * @summary Try to archive lots of classes by searching for classes from the jrt:/ file system. With JDK 12 - * this will produce an archive with over 30,000 classes. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @run driver/timeout=500 LotsOfClasses - */ - -public class LotsOfClasses { - - public static void main(String[] args) throws Throwable { - ArrayList list = new ArrayList<>(); - TestCommon.findAllClasses(list); - - CDSOptions opts = new CDSOptions(); - opts.setClassList(list); - opts.addSuffix("--add-modules"); - opts.addSuffix("ALL-SYSTEM"); - opts.addSuffix("-Xlog:hashtables"); - opts.addSuffix("-Xmx500m"); - opts.addSuffix("-Xlog:gc+region+cds"); - opts.addSuffix("-Xlog:gc+region=trace"); - - OutputAnalyzer out = CDSTestUtils.createArchive(opts); - CDSTestUtils.checkDump(out); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/LotsOfClasses.java 2019-07-24 08:26:32.477470979 -0400 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.util.ArrayList; + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; + +/* + * @test + * @summary Try to archive lots of classes by searching for classes from the jrt:/ file system. With JDK 12 + * this will produce an archive with over 30,000 classes. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @run driver/timeout=500 LotsOfClasses + */ + +public class LotsOfClasses { + + public static void main(String[] args) throws Throwable { + ArrayList list = new ArrayList<>(); + TestCommon.findAllClasses(list); + + CDSOptions opts = new CDSOptions(); + opts.setClassList(list); + opts.addSuffix("--add-modules"); + opts.addSuffix("ALL-SYSTEM"); + opts.addSuffix("-Xlog:hashtables"); + opts.addSuffix("-Xmx500m"); + opts.addSuffix("-Xlog:gc+region+cds"); + opts.addSuffix("-Xlog:gc+region=trace"); + + OutputAnalyzer out = CDSTestUtils.createArchive(opts); + CDSTestUtils.checkDump(out); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/MaxMetaspaceSize.java 2019-07-24 08:26:33.221470953 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @requires vm.cds - * @bug 8067187 8200078 - * @summary Testing CDS dumping with the -XX:MaxMetaspaceSize= option - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - */ - -import java.util.ArrayList; - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.Platform; - -public class MaxMetaspaceSize { - public static void main(String[] args) throws Exception { - ArrayList processArgs = new ArrayList<>(); - processArgs.add("-Xshare:dump"); - - if (Platform.is64bit()) { - processArgs.add("-XX:MaxMetaspaceSize=3m"); - processArgs.add("-XX:CompressedClassSpaceSize=1m"); - processArgs.add("-XX:InitialBootClassLoaderMetaspaceSize=1m"); - } else { - processArgs.add("-XX:MaxMetaspaceSize=1m"); - } - - String msg = "Failed allocating metaspace object"; - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(processArgs.toArray(new String[0])); - CDSTestUtils.executeAndLog(pb, "dump").shouldContain(msg).shouldHaveExitValue(1); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/MaxMetaspaceSize.java 2019-07-24 08:26:32.933470963 -0400 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @requires vm.cds + * @bug 8067187 8200078 + * @summary Testing CDS dumping with the -XX:MaxMetaspaceSize= option + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + */ + +import java.util.ArrayList; + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.Platform; + +public class MaxMetaspaceSize { + public static void main(String[] args) throws Exception { + ArrayList processArgs = new ArrayList<>(); + processArgs.add("-Xshare:dump"); + + if (Platform.is64bit()) { + processArgs.add("-XX:MaxMetaspaceSize=3m"); + processArgs.add("-XX:CompressedClassSpaceSize=1m"); + processArgs.add("-XX:InitialBootClassLoaderMetaspaceSize=1m"); + } else { + processArgs.add("-XX:MaxMetaspaceSize=1m"); + } + + String msg = "Failed allocating metaspace object"; + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(processArgs.toArray(new String[0])); + CDSTestUtils.executeAndLog(pb, "dump").shouldContain(msg).shouldHaveExitValue(1); + } +} --- old/test/hotspot/jtreg/runtime/appcds/MissingSuperTest.java 2019-07-24 08:26:33.561470941 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary When super class is missing during dumping, no crash should happen. - * - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/MissingSuper.java - * @run driver MissingSuperTest - */ - -public class MissingSuperTest { - - public static void main(String[] args) throws Exception { - // The classes "MissingSuperSup" and "MissingSuperIntf" are intentionally not - // included into the jar to provoke the test condition - JarBuilder.build("missing_super", "MissingSuper", - "MissingSuperSub", "MissingSuperImpl"); - - String appJar = TestCommon.getTestJar("missing_super.jar"); - TestCommon.test(appJar, TestCommon.list("MissingSuper", - "MissingSuperSub", - "MissingSuperImpl"), - "MissingSuper"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/MissingSuperTest.java 2019-07-24 08:26:33.273470951 -0400 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary When super class is missing during dumping, no crash should happen. + * + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/MissingSuper.java + * @run driver MissingSuperTest + */ + +public class MissingSuperTest { + + public static void main(String[] args) throws Exception { + // The classes "MissingSuperSup" and "MissingSuperIntf" are intentionally not + // included into the jar to provoke the test condition + JarBuilder.build("missing_super", "MissingSuper", + "MissingSuperSub", "MissingSuperImpl"); + + String appJar = TestCommon.getTestJar("missing_super.jar"); + TestCommon.test(appJar, TestCommon.list("MissingSuper", + "MissingSuperSub", + "MissingSuperImpl"), + "MissingSuper"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/MoveJDKTest.java 2019-07-24 08:26:33.917470929 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,194 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test that CDS still works when the JDK is moved to a new directory - * @requires vm.cds - * @requires os.family == "linux" - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver MoveJDKTest - */ - -// This test works only on Linux because it depends on symlinks and the name of the hotspot DLL (libjvm.so). -// It probably doesn't work on Windows. -// TODO: change libjvm.so to libjvm.dylib on MacOS, before adding "@requires os.family == mac" -// TODO: test on solaris, before adding "@requires os.family == solaris" - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import jdk.test.lib.process.OutputAnalyzer; - -public class MoveJDKTest { - public static void main(String[] args) throws Exception { - String java_home_src = System.getProperty("java.home"); - String java_home_dst = System.getProperty("user.dir") + File.separator + "moved_jdk"; - - TestCommon.startNewArchiveName(); - String jsaFile = TestCommon.getCurrentArchiveName(); - String jsaOpt = "-XX:SharedArchiveFile=" + jsaFile; - { - ProcessBuilder pb = makeBuilder(java_home_src + "/bin/java", "-Xshare:dump", jsaOpt); - TestCommon.executeAndLog(pb, "dump"); - } - { - ProcessBuilder pb = makeBuilder(java_home_src + "/bin/java", - "-Xshare:auto", - jsaOpt, - "-Xlog:class+path=info", - "-version"); - OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-src"); - out.shouldNotContain("shared class paths mismatch"); - out.shouldNotContain("BOOT classpath mismatch"); - } - - clone(new File(java_home_src), new File(java_home_dst)); - System.out.println("============== Cloned JDK at " + java_home_dst); - - // Test runtime with cloned JDK - { - ProcessBuilder pb = makeBuilder(java_home_dst + "/bin/java", - "-Xshare:auto", - jsaOpt, - "-Xlog:class+path=info", - "-version"); - OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-dst"); - out.shouldNotContain("shared class paths mismatch"); - out.shouldNotContain("BOOT classpath mismatch"); - } - - // Test with bad JAR file name, hello.modules - String helloJar = JarBuilder.getOrCreateHelloJar(); - String fake_modules = copyFakeModulesFromHelloJar(); - String dumptimeBootAppendOpt = "-Xbootclasspath/a:" + fake_modules; - { - ProcessBuilder pb = makeBuilder(java_home_src + "/bin/java", - "-Xshare:dump", - dumptimeBootAppendOpt, - jsaOpt); - TestCommon.executeAndLog(pb, "dump"); - } - { - String runtimeBootAppendOpt = dumptimeBootAppendOpt + System.getProperty("path.separator") + helloJar; - ProcessBuilder pb = makeBuilder(java_home_dst + "/bin/java", - "-Xshare:auto", - runtimeBootAppendOpt, - jsaOpt, - "-Xlog:class+path=info", - "-version"); - OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-dst"); - out.shouldNotContain("shared class paths mismatch"); - out.shouldNotContain("BOOT classpath mismatch"); - } - - // Test with no modules image in the /lib directory - renameModulesFile(java_home_dst); - { - ProcessBuilder pb = makeBuilder(java_home_dst + "/bin/java", - "-version"); - OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-missing-modules"); - out.shouldHaveExitValue(1); - out.shouldContain("Failed setting boot class path."); - } - } - - // Do a cheap clone of the JDK. Most files can be sym-linked. However, $JAVA_HOME/bin/java and $JAVA_HOME/lib/.../libjvm.so" - // must be copied, because the java.home property is derived from the canonicalized paths of these 2 files. - static void clone(File src, File dst) throws Exception { - if (dst.exists()) { - if (!dst.isDirectory()) { - throw new RuntimeException("Not a directory :" + dst); - } - } else { - if (!dst.mkdir()) { - throw new RuntimeException("Cannot create directory: " + dst); - } - } - for (String child : src.list()) { - if (child.equals(".") || child.equals("..")) { - continue; - } - - File child_src = new File(src, child); - File child_dst = new File(dst, child); - if (child_dst.exists()) { - throw new RuntimeException("Already exists: " + child_dst); - } - if (child_src.isFile()) { - if (child.equals("libjvm.so") || child.equals("java")) { - Files.copy(child_src.toPath(), /* copy data to -> */ child_dst.toPath()); - } else { - Files.createSymbolicLink(child_dst.toPath(), /* link to -> */ child_src.toPath()); - } - } else { - clone(child_src, child_dst); - } - } - } - - static void renameModulesFile(String javaHome) throws Exception { - String modulesDir = javaHome + File.separator + "lib"; - File origModules = new File(modulesDir, "modules"); - if (!origModules.exists()) { - throw new RuntimeException("modules file not found"); - } - - File renamedModules = new File(modulesDir, "orig_modules"); - if (renamedModules.exists()) { - throw new RuntimeException("found orig_modules unexpectedly"); - } - - boolean success = origModules.renameTo(renamedModules); - if (!success) { - throw new RuntimeException("rename modules file failed"); - } - } - - static ProcessBuilder makeBuilder(String... args) throws Exception { - System.out.print("["); - for (String s : args) { - System.out.print(" " + s); - } - System.out.println(" ]"); - return new ProcessBuilder(args); - } - - private static String copyFakeModulesFromHelloJar() throws Exception { - String classDir = System.getProperty("test.classes"); - String newFile = "hello.modules"; - String path = classDir + File.separator + newFile; - - Files.copy(Paths.get(classDir, "hello.jar"), - Paths.get(classDir, newFile), - StandardCopyOption.REPLACE_EXISTING); - return path; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/MoveJDKTest.java 2019-07-24 08:26:33.625470939 -0400 @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test that CDS still works when the JDK is moved to a new directory + * @requires vm.cds + * @requires os.family == "linux" + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver MoveJDKTest + */ + +// This test works only on Linux because it depends on symlinks and the name of the hotspot DLL (libjvm.so). +// It probably doesn't work on Windows. +// TODO: change libjvm.so to libjvm.dylib on MacOS, before adding "@requires os.family == mac" +// TODO: test on solaris, before adding "@requires os.family == solaris" + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import jdk.test.lib.process.OutputAnalyzer; + +public class MoveJDKTest { + public static void main(String[] args) throws Exception { + String java_home_src = System.getProperty("java.home"); + String java_home_dst = System.getProperty("user.dir") + File.separator + "moved_jdk"; + + TestCommon.startNewArchiveName(); + String jsaFile = TestCommon.getCurrentArchiveName(); + String jsaOpt = "-XX:SharedArchiveFile=" + jsaFile; + { + ProcessBuilder pb = makeBuilder(java_home_src + "/bin/java", "-Xshare:dump", jsaOpt); + TestCommon.executeAndLog(pb, "dump"); + } + { + ProcessBuilder pb = makeBuilder(java_home_src + "/bin/java", + "-Xshare:auto", + jsaOpt, + "-Xlog:class+path=info", + "-version"); + OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-src"); + out.shouldNotContain("shared class paths mismatch"); + out.shouldNotContain("BOOT classpath mismatch"); + } + + clone(new File(java_home_src), new File(java_home_dst)); + System.out.println("============== Cloned JDK at " + java_home_dst); + + // Test runtime with cloned JDK + { + ProcessBuilder pb = makeBuilder(java_home_dst + "/bin/java", + "-Xshare:auto", + jsaOpt, + "-Xlog:class+path=info", + "-version"); + OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-dst"); + out.shouldNotContain("shared class paths mismatch"); + out.shouldNotContain("BOOT classpath mismatch"); + } + + // Test with bad JAR file name, hello.modules + String helloJar = JarBuilder.getOrCreateHelloJar(); + String fake_modules = copyFakeModulesFromHelloJar(); + String dumptimeBootAppendOpt = "-Xbootclasspath/a:" + fake_modules; + { + ProcessBuilder pb = makeBuilder(java_home_src + "/bin/java", + "-Xshare:dump", + dumptimeBootAppendOpt, + jsaOpt); + TestCommon.executeAndLog(pb, "dump"); + } + { + String runtimeBootAppendOpt = dumptimeBootAppendOpt + System.getProperty("path.separator") + helloJar; + ProcessBuilder pb = makeBuilder(java_home_dst + "/bin/java", + "-Xshare:auto", + runtimeBootAppendOpt, + jsaOpt, + "-Xlog:class+path=info", + "-version"); + OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-dst"); + out.shouldNotContain("shared class paths mismatch"); + out.shouldNotContain("BOOT classpath mismatch"); + } + + // Test with no modules image in the /lib directory + renameModulesFile(java_home_dst); + { + ProcessBuilder pb = makeBuilder(java_home_dst + "/bin/java", + "-version"); + OutputAnalyzer out = TestCommon.executeAndLog(pb, "exec-missing-modules"); + out.shouldHaveExitValue(1); + out.shouldContain("Failed setting boot class path."); + } + } + + // Do a cheap clone of the JDK. Most files can be sym-linked. However, $JAVA_HOME/bin/java and $JAVA_HOME/lib/.../libjvm.so" + // must be copied, because the java.home property is derived from the canonicalized paths of these 2 files. + static void clone(File src, File dst) throws Exception { + if (dst.exists()) { + if (!dst.isDirectory()) { + throw new RuntimeException("Not a directory :" + dst); + } + } else { + if (!dst.mkdir()) { + throw new RuntimeException("Cannot create directory: " + dst); + } + } + for (String child : src.list()) { + if (child.equals(".") || child.equals("..")) { + continue; + } + + File child_src = new File(src, child); + File child_dst = new File(dst, child); + if (child_dst.exists()) { + throw new RuntimeException("Already exists: " + child_dst); + } + if (child_src.isFile()) { + if (child.equals("libjvm.so") || child.equals("java")) { + Files.copy(child_src.toPath(), /* copy data to -> */ child_dst.toPath()); + } else { + Files.createSymbolicLink(child_dst.toPath(), /* link to -> */ child_src.toPath()); + } + } else { + clone(child_src, child_dst); + } + } + } + + static void renameModulesFile(String javaHome) throws Exception { + String modulesDir = javaHome + File.separator + "lib"; + File origModules = new File(modulesDir, "modules"); + if (!origModules.exists()) { + throw new RuntimeException("modules file not found"); + } + + File renamedModules = new File(modulesDir, "orig_modules"); + if (renamedModules.exists()) { + throw new RuntimeException("found orig_modules unexpectedly"); + } + + boolean success = origModules.renameTo(renamedModules); + if (!success) { + throw new RuntimeException("rename modules file failed"); + } + } + + static ProcessBuilder makeBuilder(String... args) throws Exception { + System.out.print("["); + for (String s : args) { + System.out.print(" " + s); + } + System.out.println(" ]"); + return new ProcessBuilder(args); + } + + private static String copyFakeModulesFromHelloJar() throws Exception { + String classDir = System.getProperty("test.classes"); + String newFile = "hello.modules"; + String path = classDir + File.separator + newFile; + + Files.copy(Paths.get(classDir, "hello.jar"), + Paths.get(classDir, newFile), + StandardCopyOption.REPLACE_EXISTING); + return path; + } +} --- old/test/hotspot/jtreg/runtime/appcds/MultiProcessSharing.java 2019-07-24 08:26:34.301470916 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Run multiple processes with the same archive, ensure they share - * - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @compile test-classes/MultiProcClass.java - * @run driver MultiProcessSharing - */ - -import java.io.File; -import jdk.test.lib.Asserts; -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - - -public class MultiProcessSharing { - static String useWbJar; - static String sharedClass1Jar; - static boolean checkPmap = false; - - public static void main(String[] args) throws Exception { - String wbJar = JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - useWbJar = "-Xbootclasspath/a:" + wbJar; - sharedClass1Jar = JarBuilder.build("shared_class1", "MultiProcClass"); - - // create an archive - OutputAnalyzer out = TestCommon.dump(sharedClass1Jar, - TestCommon.list("MultiProcClass"), useWbJar); - TestCommon.checkDump(out); - - // determine whether OK to use pmap for extra test verification - long myPid = ProcessHandle.current().pid(); - checkPmap = (Platform.isLinux() && (MultiProcClass.runPmap(myPid, false) == 0)); - System.out.println("MultiProcessSharing: checkPmap is " + checkPmap); - - // use an archive in several processes concurrently - int numProcesses = 3; - Thread[] threads = new Thread[numProcesses]; - ProcessHandler[] processHandlers = new ProcessHandler[numProcesses]; - for (int i = 0; i < numProcesses; i++) { - processHandlers[i] = new ProcessHandler(i); - threads[i] = new Thread(processHandlers[i]); - } - - for (Thread t : threads) { - t.start(); - } - - for (Thread t : threads) { - try { - t.join(); - } catch (InterruptedException ie) { - throw ie; - } - } - - // check results - for (ProcessHandler ph : processHandlers) { - TestCommon.checkExec(ph.out); - if (checkPmap && !TestCommon.isUnableToMap(ph.out)) { - checkPmapOutput(ph.out.getOutput()); - } - } - } - - - static class ProcessHandler implements Runnable { - int processNumber; - OutputAnalyzer out; - - ProcessHandler(int processNumber) { - this.processNumber = processNumber; - } - - @Override - public void run() { - try { - out = TestCommon.exec(sharedClass1Jar, - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", useWbJar, - "MultiProcClass", "" + processNumber, "" + checkPmap); - } catch (Exception e) { - throw new RuntimeException("Error occurred when using archive, exec()" + e); - } - } - } - - - private static void checkPmapOutput(String stdio) { - System.out.println("Checking pmap output ..."); - String[] lines = stdio.split("\n"); - - boolean foundJsa = false; - boolean foundReadOnlyJsaSection = false; - - for (String line : lines) { - if (line.contains(TestCommon.getCurrentArchiveName())) - System.out.println(line); - foundJsa = true; - if (line.contains("r--")) { - foundReadOnlyJsaSection = true; - } - - // On certain ARM platforms system maps r/o memory mapped files - // as r/x; see JDK-8145694 for details - if ( (Platform.isARM() || Platform.isAArch64()) && line.contains("r-x") ) { - foundReadOnlyJsaSection = true; - } - } - - Asserts.assertTrue(foundJsa && foundReadOnlyJsaSection); - } - -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/MultiProcessSharing.java 2019-07-24 08:26:33.977470927 -0400 @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Run multiple processes with the same archive, ensure they share + * + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @compile test-classes/MultiProcClass.java + * @run driver MultiProcessSharing + */ + +import java.io.File; +import jdk.test.lib.Asserts; +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + + +public class MultiProcessSharing { + static String useWbJar; + static String sharedClass1Jar; + static boolean checkPmap = false; + + public static void main(String[] args) throws Exception { + String wbJar = JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + useWbJar = "-Xbootclasspath/a:" + wbJar; + sharedClass1Jar = JarBuilder.build("shared_class1", "MultiProcClass"); + + // create an archive + OutputAnalyzer out = TestCommon.dump(sharedClass1Jar, + TestCommon.list("MultiProcClass"), useWbJar); + TestCommon.checkDump(out); + + // determine whether OK to use pmap for extra test verification + long myPid = ProcessHandle.current().pid(); + checkPmap = (Platform.isLinux() && (MultiProcClass.runPmap(myPid, false) == 0)); + System.out.println("MultiProcessSharing: checkPmap is " + checkPmap); + + // use an archive in several processes concurrently + int numProcesses = 3; + Thread[] threads = new Thread[numProcesses]; + ProcessHandler[] processHandlers = new ProcessHandler[numProcesses]; + for (int i = 0; i < numProcesses; i++) { + processHandlers[i] = new ProcessHandler(i); + threads[i] = new Thread(processHandlers[i]); + } + + for (Thread t : threads) { + t.start(); + } + + for (Thread t : threads) { + try { + t.join(); + } catch (InterruptedException ie) { + throw ie; + } + } + + // check results + for (ProcessHandler ph : processHandlers) { + TestCommon.checkExec(ph.out); + if (checkPmap && !TestCommon.isUnableToMap(ph.out)) { + checkPmapOutput(ph.out.getOutput()); + } + } + } + + + static class ProcessHandler implements Runnable { + int processNumber; + OutputAnalyzer out; + + ProcessHandler(int processNumber) { + this.processNumber = processNumber; + } + + @Override + public void run() { + try { + out = TestCommon.exec(sharedClass1Jar, + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", useWbJar, + "MultiProcClass", "" + processNumber, "" + checkPmap); + } catch (Exception e) { + throw new RuntimeException("Error occurred when using archive, exec()" + e); + } + } + } + + + private static void checkPmapOutput(String stdio) { + System.out.println("Checking pmap output ..."); + String[] lines = stdio.split("\n"); + + boolean foundJsa = false; + boolean foundReadOnlyJsaSection = false; + + for (String line : lines) { + if (line.contains(TestCommon.getCurrentArchiveName())) + System.out.println(line); + foundJsa = true; + if (line.contains("r--")) { + foundReadOnlyJsaSection = true; + } + + // On certain ARM platforms system maps r/o memory mapped files + // as r/x; see JDK-8145694 for details + if ( (Platform.isARM() || Platform.isAArch64()) && line.contains("r-x") ) { + foundReadOnlyJsaSection = true; + } + } + + Asserts.assertTrue(foundJsa && foundReadOnlyJsaSection); + } + +} --- old/test/hotspot/jtreg/runtime/appcds/MultiReleaseJars.java 2019-07-24 08:26:34.701470902 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test MultiReleaseJars - * @summary Test multi-release jar with AppCDS. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @run main/othervm/timeout=2400 MultiReleaseJars - */ - -import java.io.File; -import java.io.FileOutputStream; -import java.io.PrintStream; -import java.io.IOException; -import jdk.test.lib.process.OutputAnalyzer; - -public class MultiReleaseJars { - - static final int MAJOR_VERSION = Runtime.version().major(); - static final String MAJOR_VERSION_STRING = String.valueOf(MAJOR_VERSION); - - static String[] getMain() { - String[] sts = { - "package version;", - "public class Main {", - " public static void main(String[] args) {", - " Version version = new Version();", - " System.out.println(\"I am running on version \" + version.getVersion());", - " }", - "}" - }; - return sts; - } - - static String[] getVersion(int version) { - String[] sts = { - "package version;", - "public class Version {", - " public int getVersion(){ return " + version + "; }", - "}" - }; - return sts; - } - - static void writeFile(File file, String... contents) throws Exception { - if (contents == null) { - throw new java.lang.RuntimeException("No input for writing to file" + file); - } - try ( - FileOutputStream fos = new FileOutputStream(file); - PrintStream ps = new PrintStream(fos) - ) { - for (String str : contents) { - ps.println(str); - } - } - } - - /* version.jar entries and files: - * META-INF/ - * META-INF/MANIFEST.MF - * version/ - * version/Main.class - * version/Version.class - * META-INF/versions/ - * META-INF/versions// - * META-INF/versions//version/ - * META-INF/versions//version/Version.class - */ - static void createClassFilesAndJar() throws Exception { - String tempDir = System.getProperty("test.classes"); - File baseDir = new File(tempDir + File.separator + "base"); - File vDir = new File(tempDir + File.separator + MAJOR_VERSION_STRING); - - baseDir.mkdirs(); - vDir.mkdirs(); - - File fileMain = TestCommon.getOutputSourceFile("Main.java"); - writeFile(fileMain, getMain()); - - File fileVersion = TestCommon.getOutputSourceFile("Version.java"); - writeFile(fileVersion, getVersion(7)); - JarBuilder.compile(baseDir.getAbsolutePath(), fileVersion.getAbsolutePath(), "--release", "7"); - JarBuilder.compile(baseDir.getAbsolutePath(), fileMain.getAbsolutePath(), - "-cp", baseDir.getAbsolutePath(), "--release", MAJOR_VERSION_STRING); - - String[] meta = { - "Multi-Release: true", - "Main-Class: version.Main" - }; - File metainf = new File(tempDir, "mf.txt"); - writeFile(metainf, meta); - - fileVersion = TestCommon.getOutputSourceFile("Version.java"); - writeFile(fileVersion, getVersion(MAJOR_VERSION)); - JarBuilder.compile(vDir.getAbsolutePath(), fileVersion.getAbsolutePath(), "--release", MAJOR_VERSION_STRING); - - JarBuilder.build("version", baseDir, metainf.getAbsolutePath(), - "--release", MAJOR_VERSION_STRING, "-C", vDir.getAbsolutePath(), "."); - - // the following jar file is for testing case-insensitive "Multi-Release" - // attibute name - String[] meta2 = { - "multi-Release: true", - "Main-Class: version.Main" - }; - metainf = new File(tempDir, "mf2.txt"); - writeFile(metainf, meta2); - JarBuilder.build("version2", baseDir, metainf.getAbsolutePath(), - "--release", MAJOR_VERSION_STRING, "-C", vDir.getAbsolutePath(), "."); - } - - static void checkExecOutput(OutputAnalyzer output, String expectedOutput) throws Exception { - try { - TestCommon.checkExec(output, expectedOutput); - } catch (java.lang.RuntimeException re) { - String cause = re.getMessage(); - if (!expectedOutput.equals(cause)) { - throw re; - } - } - } - - public static void main(String... args) throws Exception { - // create version.jar which contains Main.class and Version.class. - // Version.class has two versions: 8 and the current version. - createClassFilesAndJar(); - - String mainClass = "version.Main"; - String loadInfo = "[class,load] version.Version source: shared objects file"; - String appClasses[] = {"version/Main", "version/Version"}; - String appJar = TestCommon.getTestJar("version.jar"); - String appJar2 = TestCommon.getTestJar("version2.jar"); - String enableMultiRelease = "-Djdk.util.jar.enableMultiRelease=true"; - String jarVersion = null; - String expectedOutput = null; - - // 1. default to highest version - // if META-INF/versions exists, no other commandline options like -Djdk.util.jar.version and - // -Djdk.util.jar.enableMultiRelease passed to vm - OutputAnalyzer output = TestCommon.dump(appJar, appClasses); - output.shouldContain("Loading classes to share: done."); - output.shouldHaveExitValue(0); - - output = TestCommon.exec(appJar, mainClass); - checkExecOutput(output, "I am running on version " + MAJOR_VERSION_STRING); - - // 2. Test versions 7 and the current major version. - // -Djdk.util.jar.enableMultiRelease=true (or force), default is true. - // a) -Djdk.util.jar.version=7 does not exist in jar. - // It will fallback to the root version which is also 7 in this test. - // b) -Djdk.util.jar.version=MAJOR_VERSION exists in the jar. - for (int i : new int[] {7, MAJOR_VERSION}) { - jarVersion = "-Djdk.util.jar.version=" + i; - expectedOutput = "I am running on version " + i; - output = TestCommon.dump(appJar, appClasses, enableMultiRelease, jarVersion); - output.shouldContain("Loading classes to share: done."); - output.shouldHaveExitValue(0); - - output = TestCommon.exec(appJar, mainClass); - checkExecOutput(output, expectedOutput); - } - - // 3. For unsupported version, 5 and current major version + 1, the multiversion - // will be turned off, so it will use the default (root) version. - for (int i : new int[] {5, MAJOR_VERSION + 1}) { - jarVersion = "-Djdk.util.jar.version=" + i; - output = TestCommon.dump(appJar, appClasses, enableMultiRelease, jarVersion); - output.shouldHaveExitValue(0); - // With the fix for 8172218, multi-release jar is being handled in - // jdk corelib which doesn't emit the following warning message. - //output.shouldContain("JDK" + i + " is not supported in multiple version jars"); - - output = TestCommon.exec(appJar, mainClass); - if (i == 5) - checkExecOutput(output, "I am running on version 7"); - else - checkExecOutput(output, "I am running on version " + MAJOR_VERSION_STRING); - } - - // 4. If explicitly disabled from command line for multiversion jar, it will use default - // version at root regardless multiversion versions exists. - // -Djdk.util.jar.enableMultiRelease=false (not 'true' or 'force') - for (int i = 6; i < MAJOR_VERSION + 1; i++) { - jarVersion = "-Djdk.util.jar.version=" + i; - output = TestCommon.dump(appJar, appClasses, "-Djdk.util.jar.enableMultiRelease=false", jarVersion); - output.shouldHaveExitValue(0); - - output = TestCommon.exec(appJar, mainClass); - expectedOutput = "I am running on version 7"; - checkExecOutput(output, expectedOutput); - } - - // 5. Sanity test with -Xbootclasspath/a - // AppCDS behaves the same as the non-AppCDS case. A multi-release - // jar file in the -Xbootclasspath/a will be ignored. - output = TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + appJar, enableMultiRelease, jarVersion); - output.shouldContain("Loading classes to share: done."); - output.shouldHaveExitValue(0); - - output = TestCommon.exec(appJar, "-Xbootclasspath/a:" + appJar, mainClass); - checkExecOutput(output, "I am running on version 7"); - - // 6. Sanity test case-insensitive "Multi-Release" attribute name - output = TestCommon.dump(appJar2, appClasses); - output.shouldContain("Loading classes to share: done."); - output.shouldHaveExitValue(0); - - output = TestCommon.exec(appJar2, mainClass); - checkExecOutput(output, "I am running on version " + MAJOR_VERSION_STRING); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/MultiReleaseJars.java 2019-07-24 08:26:34.365470913 -0400 @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test MultiReleaseJars + * @summary Test multi-release jar with AppCDS. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @run main/othervm/timeout=2400 MultiReleaseJars + */ + +import java.io.File; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.io.IOException; +import jdk.test.lib.process.OutputAnalyzer; + +public class MultiReleaseJars { + + static final int MAJOR_VERSION = Runtime.version().major(); + static final String MAJOR_VERSION_STRING = String.valueOf(MAJOR_VERSION); + + static String[] getMain() { + String[] sts = { + "package version;", + "public class Main {", + " public static void main(String[] args) {", + " Version version = new Version();", + " System.out.println(\"I am running on version \" + version.getVersion());", + " }", + "}" + }; + return sts; + } + + static String[] getVersion(int version) { + String[] sts = { + "package version;", + "public class Version {", + " public int getVersion(){ return " + version + "; }", + "}" + }; + return sts; + } + + static void writeFile(File file, String... contents) throws Exception { + if (contents == null) { + throw new java.lang.RuntimeException("No input for writing to file" + file); + } + try ( + FileOutputStream fos = new FileOutputStream(file); + PrintStream ps = new PrintStream(fos) + ) { + for (String str : contents) { + ps.println(str); + } + } + } + + /* version.jar entries and files: + * META-INF/ + * META-INF/MANIFEST.MF + * version/ + * version/Main.class + * version/Version.class + * META-INF/versions/ + * META-INF/versions// + * META-INF/versions//version/ + * META-INF/versions//version/Version.class + */ + static void createClassFilesAndJar() throws Exception { + String tempDir = System.getProperty("test.classes"); + File baseDir = new File(tempDir + File.separator + "base"); + File vDir = new File(tempDir + File.separator + MAJOR_VERSION_STRING); + + baseDir.mkdirs(); + vDir.mkdirs(); + + File fileMain = TestCommon.getOutputSourceFile("Main.java"); + writeFile(fileMain, getMain()); + + File fileVersion = TestCommon.getOutputSourceFile("Version.java"); + writeFile(fileVersion, getVersion(7)); + JarBuilder.compile(baseDir.getAbsolutePath(), fileVersion.getAbsolutePath(), "--release", "7"); + JarBuilder.compile(baseDir.getAbsolutePath(), fileMain.getAbsolutePath(), + "-cp", baseDir.getAbsolutePath(), "--release", MAJOR_VERSION_STRING); + + String[] meta = { + "Multi-Release: true", + "Main-Class: version.Main" + }; + File metainf = new File(tempDir, "mf.txt"); + writeFile(metainf, meta); + + fileVersion = TestCommon.getOutputSourceFile("Version.java"); + writeFile(fileVersion, getVersion(MAJOR_VERSION)); + JarBuilder.compile(vDir.getAbsolutePath(), fileVersion.getAbsolutePath(), "--release", MAJOR_VERSION_STRING); + + JarBuilder.build("version", baseDir, metainf.getAbsolutePath(), + "--release", MAJOR_VERSION_STRING, "-C", vDir.getAbsolutePath(), "."); + + // the following jar file is for testing case-insensitive "Multi-Release" + // attibute name + String[] meta2 = { + "multi-Release: true", + "Main-Class: version.Main" + }; + metainf = new File(tempDir, "mf2.txt"); + writeFile(metainf, meta2); + JarBuilder.build("version2", baseDir, metainf.getAbsolutePath(), + "--release", MAJOR_VERSION_STRING, "-C", vDir.getAbsolutePath(), "."); + } + + static void checkExecOutput(OutputAnalyzer output, String expectedOutput) throws Exception { + try { + TestCommon.checkExec(output, expectedOutput); + } catch (java.lang.RuntimeException re) { + String cause = re.getMessage(); + if (!expectedOutput.equals(cause)) { + throw re; + } + } + } + + public static void main(String... args) throws Exception { + // create version.jar which contains Main.class and Version.class. + // Version.class has two versions: 8 and the current version. + createClassFilesAndJar(); + + String mainClass = "version.Main"; + String loadInfo = "[class,load] version.Version source: shared objects file"; + String appClasses[] = {"version/Main", "version/Version"}; + String appJar = TestCommon.getTestJar("version.jar"); + String appJar2 = TestCommon.getTestJar("version2.jar"); + String enableMultiRelease = "-Djdk.util.jar.enableMultiRelease=true"; + String jarVersion = null; + String expectedOutput = null; + + // 1. default to highest version + // if META-INF/versions exists, no other commandline options like -Djdk.util.jar.version and + // -Djdk.util.jar.enableMultiRelease passed to vm + OutputAnalyzer output = TestCommon.dump(appJar, appClasses); + output.shouldContain("Loading classes to share: done."); + output.shouldHaveExitValue(0); + + output = TestCommon.exec(appJar, mainClass); + checkExecOutput(output, "I am running on version " + MAJOR_VERSION_STRING); + + // 2. Test versions 7 and the current major version. + // -Djdk.util.jar.enableMultiRelease=true (or force), default is true. + // a) -Djdk.util.jar.version=7 does not exist in jar. + // It will fallback to the root version which is also 7 in this test. + // b) -Djdk.util.jar.version=MAJOR_VERSION exists in the jar. + for (int i : new int[] {7, MAJOR_VERSION}) { + jarVersion = "-Djdk.util.jar.version=" + i; + expectedOutput = "I am running on version " + i; + output = TestCommon.dump(appJar, appClasses, enableMultiRelease, jarVersion); + output.shouldContain("Loading classes to share: done."); + output.shouldHaveExitValue(0); + + output = TestCommon.exec(appJar, mainClass); + checkExecOutput(output, expectedOutput); + } + + // 3. For unsupported version, 5 and current major version + 1, the multiversion + // will be turned off, so it will use the default (root) version. + for (int i : new int[] {5, MAJOR_VERSION + 1}) { + jarVersion = "-Djdk.util.jar.version=" + i; + output = TestCommon.dump(appJar, appClasses, enableMultiRelease, jarVersion); + output.shouldHaveExitValue(0); + // With the fix for 8172218, multi-release jar is being handled in + // jdk corelib which doesn't emit the following warning message. + //output.shouldContain("JDK" + i + " is not supported in multiple version jars"); + + output = TestCommon.exec(appJar, mainClass); + if (i == 5) + checkExecOutput(output, "I am running on version 7"); + else + checkExecOutput(output, "I am running on version " + MAJOR_VERSION_STRING); + } + + // 4. If explicitly disabled from command line for multiversion jar, it will use default + // version at root regardless multiversion versions exists. + // -Djdk.util.jar.enableMultiRelease=false (not 'true' or 'force') + for (int i = 6; i < MAJOR_VERSION + 1; i++) { + jarVersion = "-Djdk.util.jar.version=" + i; + output = TestCommon.dump(appJar, appClasses, "-Djdk.util.jar.enableMultiRelease=false", jarVersion); + output.shouldHaveExitValue(0); + + output = TestCommon.exec(appJar, mainClass); + expectedOutput = "I am running on version 7"; + checkExecOutput(output, expectedOutput); + } + + // 5. Sanity test with -Xbootclasspath/a + // AppCDS behaves the same as the non-AppCDS case. A multi-release + // jar file in the -Xbootclasspath/a will be ignored. + output = TestCommon.dump(appJar, appClasses, "-Xbootclasspath/a:" + appJar, enableMultiRelease, jarVersion); + output.shouldContain("Loading classes to share: done."); + output.shouldHaveExitValue(0); + + output = TestCommon.exec(appJar, "-Xbootclasspath/a:" + appJar, mainClass); + checkExecOutput(output, "I am running on version 7"); + + // 6. Sanity test case-insensitive "Multi-Release" attribute name + output = TestCommon.dump(appJar2, appClasses); + output.shouldContain("Loading classes to share: done."); + output.shouldHaveExitValue(0); + + output = TestCommon.exec(appJar2, mainClass); + checkExecOutput(output, "I am running on version " + MAJOR_VERSION_STRING); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/NonBootLoaderClasses.java 2019-07-24 08:26:35.093470888 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test NonBootLoaderClasses - * @summary Test to ensure platform and app classes are archived when specified in classlist - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run driver NonBootLoaderClasses - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -public class NonBootLoaderClasses { - public static void main(String[] args) throws Exception { - final String PLATFORM_CLASS = "jdk/dynalink/DynamicLinker"; - final String APP_CLASS = "com/sun/tools/javac/Main"; - String[] classes = {PLATFORM_CLASS, APP_CLASS}; - String classList = - CDSTestUtils.makeClassList(classes).getPath(); - String archiveName = "NonBootLoaderClasses.jsa"; - CDSOptions opts = (new CDSOptions()) - .addPrefix("-XX:ExtraSharedClassListFile=" + classList, "-Djava.class.path=") - .setArchiveName(archiveName); - CDSTestUtils.createArchiveAndCheck(opts); - - // Print the shared dictionary and inspect the output - opts = (new CDSOptions()) - .setUseVersion(false) - .addSuffix("-Djava.class.path=", - "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName, - "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary"); - CDSTestUtils.run(opts) - .assertNormalExit(output -> { - output.shouldContain("archive is valid"); - output.shouldContain(PLATFORM_CLASS.replace('/', '.')); - output.shouldContain(APP_CLASS.replace('/', '.')); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/NonBootLoaderClasses.java 2019-07-24 08:26:34.761470900 -0400 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test NonBootLoaderClasses + * @summary Test to ensure platform and app classes are archived when specified in classlist + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver NonBootLoaderClasses + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class NonBootLoaderClasses { + public static void main(String[] args) throws Exception { + final String PLATFORM_CLASS = "jdk/dynalink/DynamicLinker"; + final String APP_CLASS = "com/sun/tools/javac/Main"; + String[] classes = {PLATFORM_CLASS, APP_CLASS}; + String classList = + CDSTestUtils.makeClassList(classes).getPath(); + String archiveName = "NonBootLoaderClasses.jsa"; + CDSOptions opts = (new CDSOptions()) + .addPrefix("-XX:ExtraSharedClassListFile=" + classList, "-Djava.class.path=") + .setArchiveName(archiveName); + CDSTestUtils.createArchiveAndCheck(opts); + + // Print the shared dictionary and inspect the output + opts = (new CDSOptions()) + .setUseVersion(false) + .addSuffix("-Djava.class.path=", + "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName, + "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary"); + CDSTestUtils.run(opts) + .assertNormalExit(output -> { + output.shouldContain("archive is valid"); + output.shouldContain(PLATFORM_CLASS.replace('/', '.')); + output.shouldContain(APP_CLASS.replace('/', '.')); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/OldClassTest.java 2019-07-24 08:26:35.477470875 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary classes with major version < JDK_6 (50) should not be included in CDS - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.org.objectweb.asm - * java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run build TestCommon JarBuilder - * @run driver OldClassTest - */ - -import java.io.File; -import java.io.FileOutputStream; -import jdk.test.lib.process.OutputAnalyzer; -import java.nio.file.Files; - -import java.util.*; -import jdk.internal.org.objectweb.asm.*; - -public class OldClassTest implements Opcodes { - - public static void main(String[] args) throws Exception { - File jarSrcFile = new File(JarBuilder.getOrCreateHelloJar()); - - File dir = new File(System.getProperty("test.classes", ".")); - File jarFile = new File(dir, "OldClassTest_old.jar"); - String jar = jarFile.getPath(); - - if (!jarFile.exists() || jarFile.lastModified() < jarSrcFile.lastModified()) { - createTestJarFile(jarSrcFile, jarFile); - } else { - System.out.println("Already up-to-date: " + jarFile); - } - - String appClasses[] = TestCommon.list("Hello"); - - // CASE 1: pre-JDK 6 compiled classes should be excluded from the dump - OutputAnalyzer output = TestCommon.dump(jar, appClasses); - TestCommon.checkExecReturn(output, 0, true, "Pre JDK 6 class not supported by CDS"); - - TestCommon.run( - "-cp", jar, - "Hello") - .assertNormalExit("Hello Unicode world (Old)"); - - // CASE 2: if we exlcude old version of this class, we should not pick up - // the newer version of this class in a subsequent classpath element. - String classpath = jar + File.pathSeparator + jarSrcFile.getPath(); - output = TestCommon.dump(classpath, appClasses); - TestCommon.checkExecReturn(output, 0, true, "Pre JDK 6 class not supported by CDS"); - - TestCommon.run( - "-cp", classpath, - "Hello") - .assertNormalExit("Hello Unicode world (Old)"); - } - - static void createTestJarFile(File jarSrcFile, File jarFile) throws Exception { - jarFile.delete(); - Files.copy(jarSrcFile.toPath(), jarFile.toPath()); - - File dir = new File(System.getProperty("test.classes", ".")); - File outdir = new File(dir, "old_class_test_classes"); - outdir.delete(); - outdir.mkdir(); - - writeClassFile(new File(outdir, "Hello.class"), makeOldHello()); - - JarBuilder.update(jarFile.getPath(), outdir.getPath()); - } - - static void writeClassFile(File file, byte bytecodes[]) throws Exception { - try (FileOutputStream fos = new FileOutputStream(file)) { - fos.write(bytecodes); - } - } - -/* makeOldHello() was obtained using JDK8. We use a method name > 128 that would - trigger a call to java.lang.Character.isJavaIdentifierStart() during class - file parsing. - -cat > Hello.java <", "()V", null, null); - mv.visitCode(); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V", false); - mv.visitInsn(RETURN); - mv.visitMaxs(1, 1); - mv.visitEnd(); - } - { - mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null); - mv.visitCode(); - mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); - mv.visitMethodInsn(INVOKESTATIC, "Hello", "\u1234", "()Ljava/lang/String;", false); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); - mv.visitInsn(RETURN); - mv.visitMaxs(2, 1); - mv.visitEnd(); - } - { - mv = cw.visitMethod(ACC_STATIC, "\u1234", "()Ljava/lang/String;", null, null); - mv.visitCode(); - mv.visitLdcInsn("Hello Unicode world (Old)"); - mv.visitInsn(ARETURN); - mv.visitMaxs(1, 0); - mv.visitEnd(); - } - cw.visitEnd(); - - return cw.toByteArray(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/OldClassTest.java 2019-07-24 08:26:35.153470886 -0400 @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary classes with major version < JDK_6 (50) should not be included in CDS + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.org.objectweb.asm + * java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run build TestCommon JarBuilder + * @run driver OldClassTest + */ + +import java.io.File; +import java.io.FileOutputStream; +import jdk.test.lib.process.OutputAnalyzer; +import java.nio.file.Files; + +import java.util.*; +import jdk.internal.org.objectweb.asm.*; + +public class OldClassTest implements Opcodes { + + public static void main(String[] args) throws Exception { + File jarSrcFile = new File(JarBuilder.getOrCreateHelloJar()); + + File dir = new File(System.getProperty("test.classes", ".")); + File jarFile = new File(dir, "OldClassTest_old.jar"); + String jar = jarFile.getPath(); + + if (!jarFile.exists() || jarFile.lastModified() < jarSrcFile.lastModified()) { + createTestJarFile(jarSrcFile, jarFile); + } else { + System.out.println("Already up-to-date: " + jarFile); + } + + String appClasses[] = TestCommon.list("Hello"); + + // CASE 1: pre-JDK 6 compiled classes should be excluded from the dump + OutputAnalyzer output = TestCommon.dump(jar, appClasses); + TestCommon.checkExecReturn(output, 0, true, "Pre JDK 6 class not supported by CDS"); + + TestCommon.run( + "-cp", jar, + "Hello") + .assertNormalExit("Hello Unicode world (Old)"); + + // CASE 2: if we exlcude old version of this class, we should not pick up + // the newer version of this class in a subsequent classpath element. + String classpath = jar + File.pathSeparator + jarSrcFile.getPath(); + output = TestCommon.dump(classpath, appClasses); + TestCommon.checkExecReturn(output, 0, true, "Pre JDK 6 class not supported by CDS"); + + TestCommon.run( + "-cp", classpath, + "Hello") + .assertNormalExit("Hello Unicode world (Old)"); + } + + static void createTestJarFile(File jarSrcFile, File jarFile) throws Exception { + jarFile.delete(); + Files.copy(jarSrcFile.toPath(), jarFile.toPath()); + + File dir = new File(System.getProperty("test.classes", ".")); + File outdir = new File(dir, "old_class_test_classes"); + outdir.delete(); + outdir.mkdir(); + + writeClassFile(new File(outdir, "Hello.class"), makeOldHello()); + + JarBuilder.update(jarFile.getPath(), outdir.getPath()); + } + + static void writeClassFile(File file, byte bytecodes[]) throws Exception { + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(bytecodes); + } + } + +/* makeOldHello() was obtained using JDK8. We use a method name > 128 that would + trigger a call to java.lang.Character.isJavaIdentifierStart() during class + file parsing. + +cat > Hello.java <", "()V", null, null); + mv.visitCode(); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V", false); + mv.visitInsn(RETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null); + mv.visitCode(); + mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); + mv.visitMethodInsn(INVOKESTATIC, "Hello", "\u1234", "()Ljava/lang/String;", false); + mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); + mv.visitInsn(RETURN); + mv.visitMaxs(2, 1); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_STATIC, "\u1234", "()Ljava/lang/String;", null, null); + mv.visitCode(); + mv.visitLdcInsn("Hello Unicode world (Old)"); + mv.visitInsn(ARETURN); + mv.visitMaxs(1, 0); + mv.visitEnd(); + } + cw.visitEnd(); + + return cw.toByteArray(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/PackageSealing.java 2019-07-24 08:26:35.817470863 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary AppCDS handling of package. - * @requires vm.cds - * @library /test/lib - * @modules jdk.jartool/sun.tools.jar - * @compile test-classes/C1.java - * @compile test-classes/C2.java - * @compile test-classes/PackageSealingTest.java - * @compile test-classes/Hello.java - * @run driver PackageSealing - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; - -public class PackageSealing { - public static void main(String args[]) throws Exception { - String[] classList = {"sealed/pkg/C1", "pkg/C2", "PackageSealingTest"}; - String appJar = ClassFileInstaller.writeJar("pkg_seal.jar", - ClassFileInstaller.Manifest.fromSourceFile("test-classes/package_seal.mf"), - "PackageSealingTest", "sealed/pkg/C1", "pkg/C2"); - - String helloJar = JarBuilder.getOrCreateHelloJar(); - String jars = helloJar + File.pathSeparator + appJar; - - // test shared package from -cp path - TestCommon.testDump(jars, TestCommon.list(classList)); - OutputAnalyzer output; - output = TestCommon.exec(jars, "PackageSealingTest"); - TestCommon.checkExec(output, "OK"); - - // test shared package from -Xbootclasspath/a - TestCommon.dump(helloJar, TestCommon.list(classList), - "-Xbootclasspath/a:" + appJar); - output = TestCommon.exec(helloJar, "-Xbootclasspath/a:" + appJar, "PackageSealingTest"); - TestCommon.checkExec(output, "OK"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/PackageSealing.java 2019-07-24 08:26:35.533470873 -0400 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary AppCDS handling of package. + * @requires vm.cds + * @library /test/lib + * @modules jdk.jartool/sun.tools.jar + * @compile test-classes/C1.java + * @compile test-classes/C2.java + * @compile test-classes/PackageSealingTest.java + * @compile test-classes/Hello.java + * @run driver PackageSealing + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class PackageSealing { + public static void main(String args[]) throws Exception { + String[] classList = {"sealed/pkg/C1", "pkg/C2", "PackageSealingTest"}; + String appJar = ClassFileInstaller.writeJar("pkg_seal.jar", + ClassFileInstaller.Manifest.fromSourceFile("test-classes/package_seal.mf"), + "PackageSealingTest", "sealed/pkg/C1", "pkg/C2"); + + String helloJar = JarBuilder.getOrCreateHelloJar(); + String jars = helloJar + File.pathSeparator + appJar; + + // test shared package from -cp path + TestCommon.testDump(jars, TestCommon.list(classList)); + OutputAnalyzer output; + output = TestCommon.exec(jars, "PackageSealingTest"); + TestCommon.checkExec(output, "OK"); + + // test shared package from -Xbootclasspath/a + TestCommon.dump(helloJar, TestCommon.list(classList), + "-Xbootclasspath/a:" + appJar); + output = TestCommon.exec(helloJar, "-Xbootclasspath/a:" + appJar, "PackageSealingTest"); + TestCommon.checkExec(output, "OK"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/ParallelLoad2.java 2019-07-24 08:26:36.209470849 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Load app classes from CDS archive in parallel threads. Similar to ParallelLoad.java, but each class in its own JAR - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/ParallelLoad.java - * @compile test-classes/ParallelClasses.java - * @run driver ParallelLoad2 - */ - -import java.io.File; - -public class ParallelLoad2 { - public static int MAX_CLASSES = 40; - public static void main(String[] args) throws Exception { - JarBuilder.build("parallel_load2", "ParallelLoad", "ParallelLoadThread", "ParallelLoadWatchdog"); - for (int i=0; i---------------------------------------------------------------------"); - System.out.println(msg); - System.out.println("<---------------------------------------------------------------------"); - } - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String appJar2 = JarBuilder.build("PrintSharedArchiveAndExit-more", "HelloMore"); - - String cp = appJar + File.pathSeparator + appJar2; - String lastCheckMsg = "checking shared classpath entry: " + appJar2; // the last JAR to check - - TestCommon.testDump(cp, TestCommon.list("Hello", "HelloMore")); - - log("Normal execution -- all the JAR paths should be checked"); - TestCommon.run( - "-cp", cp, - "-XX:+PrintSharedArchiveAndExit") - .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); - - TestCommon.run( - "-cp", cp, - "-XX:+PrintSharedArchiveAndExit", - "-XX:+PrintSharedDictionary") // Test PrintSharedDictionary as well. - .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg, "java.lang.Object")); - - log("Normal execution -- Make sure -version, help message and app main()\n" + - "class are not invoked. These are checked inside check()."); - TestCommon.run("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "-version") - .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); - - TestCommon.run("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "-help") - .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); - - TestCommon.run("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "Hello") - .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); - - log("Execution with simple errors -- with 'simple' errors like missing or modified\n" + - "JAR files, the VM should try to continue to print the remaining information.\n" + - "Use an invalid Boot CP -- all the JAR paths should be checked"); - TestCommon.run( - "-cp", cp, - "-Xbootclasspath/a:foo.jar", - "-XX:+PrintSharedArchiveAndExit") - .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "[BOOT classpath mismatch, ")); - - log("Use an App CP shorter than the one at dump time -- all the JAR paths should be checked"); - TestCommon.run( - "-cp", ".", - "-XX:+PrintSharedArchiveAndExit") - .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "Run time APP classpath is shorter than the one at dump time: .")); - - log("Use an invalid App CP -- all the JAR paths should be checked.\n" + - "Non-existing jar files will be ignored."); - String invalidCP = "non-existing-dir" + File.pathSeparator + cp; - TestCommon.run( - "-cp", invalidCP, - "-XX:+PrintSharedArchiveAndExit") - .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); - - log("Changed modification time of hello.jar -- all the JAR paths should be checked"); - (new File(appJar)).setLastModified(System.currentTimeMillis() + 2000); - TestCommon.run( - "-cp", cp, - "-XX:+PrintSharedArchiveAndExit") - .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "[Timestamp mismatch]")); - - log("Even if hello.jar is out of date, we should still be able to print the dictionary."); - TestCommon.run( - "-cp", cp, - "-XX:+PrintSharedArchiveAndExit", - "-XX:+PrintSharedDictionary") // Test PrintSharedDictionary as well. - .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "java.lang.Object")); - - - log("Remove hello.jar -- all the JAR paths should be checked"); - (new File(appJar)).delete(); - TestCommon.run( - "-cp", cp, - "-XX:+PrintSharedArchiveAndExit") - .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "[Required classpath entry does not exist: " + appJar + "]")); - - log("Execution with major errors -- with 'major' errors like the JSA file\n" + - "is missing, we should stop immediately to avoid crashing the JVM."); - TestCommon.run( - "-cp", cp, - "-XX:+PrintSharedArchiveAndExit", - "-XX:SharedArchiveFile=./no-such-fileappcds.jsa") - .ifNoMappingFailure(output -> check(output, 1, false, lastCheckMsg)); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/PrintSharedArchiveAndExit.java 2019-07-24 08:26:36.665470833 -0400 @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary test the -XX:+PrintSharedArchiveAndExit flag + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @compile test-classes/HelloMore.java + * @run main/othervm/timeout=3600 PrintSharedArchiveAndExit + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class PrintSharedArchiveAndExit { + private static void check(OutputAnalyzer output, int ret, boolean checkContain, String... matches) throws Exception { + // Tests specific to this test + TestCommon.checkExecReturn(output, ret, checkContain, matches); + + // In all test case, we should never print out the following due to + // PrintSharedArchiveAndExit. JVM should have been terminated + // before reaching these outputs. + TestCommon.checkExecReturn(output, ret, false, + "Usage:", // JVM help message + "java version", // JVM version + "Hello World"); // output from the Hello.class in hello.jar + } + + private static void log(String msg) { + System.out.println(">---------------------------------------------------------------------"); + System.out.println(msg); + System.out.println("<---------------------------------------------------------------------"); + } + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appJar2 = JarBuilder.build("PrintSharedArchiveAndExit-more", "HelloMore"); + + String cp = appJar + File.pathSeparator + appJar2; + String lastCheckMsg = "checking shared classpath entry: " + appJar2; // the last JAR to check + + TestCommon.testDump(cp, TestCommon.list("Hello", "HelloMore")); + + log("Normal execution -- all the JAR paths should be checked"); + TestCommon.run( + "-cp", cp, + "-XX:+PrintSharedArchiveAndExit") + .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); + + TestCommon.run( + "-cp", cp, + "-XX:+PrintSharedArchiveAndExit", + "-XX:+PrintSharedDictionary") // Test PrintSharedDictionary as well. + .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg, "java.lang.Object")); + + log("Normal execution -- Make sure -version, help message and app main()\n" + + "class are not invoked. These are checked inside check()."); + TestCommon.run("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "-version") + .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); + + TestCommon.run("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "-help") + .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); + + TestCommon.run("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "Hello") + .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); + + log("Execution with simple errors -- with 'simple' errors like missing or modified\n" + + "JAR files, the VM should try to continue to print the remaining information.\n" + + "Use an invalid Boot CP -- all the JAR paths should be checked"); + TestCommon.run( + "-cp", cp, + "-Xbootclasspath/a:foo.jar", + "-XX:+PrintSharedArchiveAndExit") + .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "[BOOT classpath mismatch, ")); + + log("Use an App CP shorter than the one at dump time -- all the JAR paths should be checked"); + TestCommon.run( + "-cp", ".", + "-XX:+PrintSharedArchiveAndExit") + .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "Run time APP classpath is shorter than the one at dump time: .")); + + log("Use an invalid App CP -- all the JAR paths should be checked.\n" + + "Non-existing jar files will be ignored."); + String invalidCP = "non-existing-dir" + File.pathSeparator + cp; + TestCommon.run( + "-cp", invalidCP, + "-XX:+PrintSharedArchiveAndExit") + .ifNoMappingFailure(output -> check(output, 0, true, lastCheckMsg)); + + log("Changed modification time of hello.jar -- all the JAR paths should be checked"); + (new File(appJar)).setLastModified(System.currentTimeMillis() + 2000); + TestCommon.run( + "-cp", cp, + "-XX:+PrintSharedArchiveAndExit") + .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "[Timestamp mismatch]")); + + log("Even if hello.jar is out of date, we should still be able to print the dictionary."); + TestCommon.run( + "-cp", cp, + "-XX:+PrintSharedArchiveAndExit", + "-XX:+PrintSharedDictionary") // Test PrintSharedDictionary as well. + .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "java.lang.Object")); + + + log("Remove hello.jar -- all the JAR paths should be checked"); + (new File(appJar)).delete(); + TestCommon.run( + "-cp", cp, + "-XX:+PrintSharedArchiveAndExit") + .ifNoMappingFailure(output -> check(output, 1, true, lastCheckMsg, "[Required classpath entry does not exist: " + appJar + "]")); + + log("Execution with major errors -- with 'major' errors like the JSA file\n" + + "is missing, we should stop immediately to avoid crashing the JVM."); + TestCommon.run( + "-cp", cp, + "-XX:+PrintSharedArchiveAndExit", + "-XX:SharedArchiveFile=./no-such-fileappcds.jsa") + .ifNoMappingFailure(output -> check(output, 1, false, lastCheckMsg)); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/PrintSharedArchiveAndExit.java 2019-07-24 08:26:37.389470808 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 8066670 - * @summary Testing -XX:+PrintSharedArchiveAndExit option - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -public class PrintSharedArchiveAndExit { - public static void main(String[] args) throws Exception { - String archiveName = "PrintSharedArchiveAndExit.jsa"; - CDSOptions opts = (new CDSOptions()).setArchiveName(archiveName); - OutputAnalyzer out = CDSTestUtils.createArchive(opts); - CDSTestUtils.checkDump(out); - - // (1) With a valid archive - opts = (new CDSOptions()) - .setUseVersion(false) - .addSuffix( "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName, - "-XX:+PrintSharedArchiveAndExit", "-version"); - CDSTestUtils.run(opts) - .assertNormalExit(output -> { - output.shouldContain("archive is valid"); - output.shouldNotContain("java version"); // Should not print JVM version - }); - - opts = (new CDSOptions()) - .setUseVersion(false) - .addSuffix( "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName, - "-XX:+PrintSharedArchiveAndExit"); - CDSTestUtils.run(opts) - .assertNormalExit(output -> { - output.shouldContain("archive is valid"); - output.shouldNotContain("Usage:"); // Should not print JVM help message - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/PrintSharedArchiveAndExit1.java 2019-07-24 08:26:37.057470820 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8066670 + * @summary Testing -XX:+PrintSharedArchiveAndExit option + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class PrintSharedArchiveAndExit1 { + public static void main(String[] args) throws Exception { + String archiveName = "PrintSharedArchiveAndExit1.jsa"; + CDSOptions opts = (new CDSOptions()).setArchiveName(archiveName); + OutputAnalyzer out = CDSTestUtils.createArchive(opts); + CDSTestUtils.checkDump(out); + + // (1) With a valid archive + opts = (new CDSOptions()) + .setUseVersion(false) + .addSuffix( "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName, + "-XX:+PrintSharedArchiveAndExit", "-version"); + CDSTestUtils.run(opts) + .assertNormalExit(output -> { + output.shouldContain("archive is valid"); + output.shouldNotContain("java version"); // Should not print JVM version + }); + + opts = (new CDSOptions()) + .setUseVersion(false) + .addSuffix( "-XX:+UnlockDiagnosticVMOptions", "-XX:SharedArchiveFile=./" + archiveName, + "-XX:+PrintSharedArchiveAndExit"); + CDSTestUtils.run(opts) + .assertNormalExit(output -> { + output.shouldContain("archive is valid"); + output.shouldNotContain("Usage:"); // Should not print JVM help message + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/ProhibitedPackage.java 2019-07-24 08:26:37.777470795 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary AppCDS handling of prohibited package. - * @requires vm.cds - * @library /test/lib - * @modules jdk.jartool/sun.tools.jar - * @compile test-classes/ProhibitedHelper.java test-classes/Prohibited.jasm - * @run driver ProhibitedPackage - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; - -public class ProhibitedPackage { - - public static void main(String[] args) throws Exception { - JarBuilder.build("prohibited_pkg", "java/lang/Prohibited", "ProhibitedHelper"); - - String appJar = TestCommon.getTestJar("prohibited_pkg.jar"); - - // Test support for customer loaders - if (Platform.areCustomLoadersSupportedForCDS() && - !TestCommon.isDynamicArchive()) { - String classlist[] = new String[] { - "java/lang/Object id: 1", - "java/lang/Prohibited id: 2 super: 1 source: " + appJar - }; - - // Make sure a class in a prohibited package for a custom loader - // will be ignored during dumping. - TestCommon.dump(appJar, classlist, "-Xlog:cds") - .shouldContain("Dumping") - .shouldContain("[cds] Prohibited package for non-bootstrap classes: java/lang/Prohibited.class") - .shouldHaveExitValue(0); - } - - - // Make sure a class in a prohibited package for a non-custom loader - // will be ignored during dumping. - TestCommon.dump(appJar, - TestCommon.list("java/lang/Prohibited", "ProhibitedHelper"), - "-Xlog:class+load") - .shouldContain("Dumping") - .shouldNotContain("[info][class,load] java.lang.Prohibited source: ") - .shouldHaveExitValue(0); - - // Try loading the class in a prohibited package with various -Xshare - // modes. The class shouldn't be loaded and appropriate exceptions - // are expected. - - OutputAnalyzer output; - - // -Xshare:on - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, "ProhibitedHelper") - .assertNormalExit("Prohibited package name: java.lang"); - - // -Xshare:auto - output = TestCommon.execAuto( - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, "ProhibitedHelper"); - CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); - TestCommon.checkExec(output, opts, "Prohibited package name: java.lang"); - - // -Xshare:off - output = TestCommon.execOff( - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, "ProhibitedHelper"); - output.shouldContain("Prohibited package name: java.lang"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ProhibitedPackage.java 2019-07-24 08:26:37.493470804 -0400 @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary AppCDS handling of prohibited package. + * @requires vm.cds + * @library /test/lib + * @modules jdk.jartool/sun.tools.jar + * @compile test-classes/ProhibitedHelper.java test-classes/Prohibited.jasm + * @run driver ProhibitedPackage + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; + +public class ProhibitedPackage { + + public static void main(String[] args) throws Exception { + JarBuilder.build("prohibited_pkg", "java/lang/Prohibited", "ProhibitedHelper"); + + String appJar = TestCommon.getTestJar("prohibited_pkg.jar"); + + // Test support for customer loaders + if (Platform.areCustomLoadersSupportedForCDS() && + !TestCommon.isDynamicArchive()) { + String classlist[] = new String[] { + "java/lang/Object id: 1", + "java/lang/Prohibited id: 2 super: 1 source: " + appJar + }; + + // Make sure a class in a prohibited package for a custom loader + // will be ignored during dumping. + TestCommon.dump(appJar, classlist, "-Xlog:cds") + .shouldContain("Dumping") + .shouldContain("[cds] Prohibited package for non-bootstrap classes: java/lang/Prohibited.class") + .shouldHaveExitValue(0); + } + + + // Make sure a class in a prohibited package for a non-custom loader + // will be ignored during dumping. + TestCommon.dump(appJar, + TestCommon.list("java/lang/Prohibited", "ProhibitedHelper"), + "-Xlog:class+load") + .shouldContain("Dumping") + .shouldNotContain("[info][class,load] java.lang.Prohibited source: ") + .shouldHaveExitValue(0); + + // Try loading the class in a prohibited package with various -Xshare + // modes. The class shouldn't be loaded and appropriate exceptions + // are expected. + + OutputAnalyzer output; + + // -Xshare:on + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, "ProhibitedHelper") + .assertNormalExit("Prohibited package name: java.lang"); + + // -Xshare:auto + output = TestCommon.execAuto( + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, "ProhibitedHelper"); + CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); + TestCommon.checkExec(output, opts, "Prohibited package name: java.lang"); + + // -Xshare:off + output = TestCommon.execOff( + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, "ProhibitedHelper"); + output.shouldContain("Prohibited package name: java.lang"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/ProtectionDomain.java 2019-07-24 08:26:38.161470781 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary AppCDS handling of protection domain. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/ProtDomain.java - * @compile test-classes/ProtDomainB.java - * @compile test-classes/JimageClassProtDomain.java - * @run driver ProtectionDomain - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class ProtectionDomain { - public static void main(String[] args) throws Exception { - JarBuilder.build("prot_domain", "ProtDomain", "ProtDomainB", "ProtDomainOther", - "ProtDomainBOther", "JimageClassProtDomain"); - - String appJar = TestCommon.getTestJar("prot_domain.jar"); - TestCommon.testDump(appJar, - TestCommon.list("ProtDomain", - "ProtDomainBOther", - "java/util/Dictionary", - "com/sun/tools/javac/Main", - "jdk/nio/zipfs/ZipInfo", - "java/net/URL", - "sun/rmi/rmic/Main", - "com/sun/jndi/dns/DnsName")); - - // First class is loaded from CDS, second class is loaded from JAR - TestCommon.run("-cp", appJar, "ProtDomain") - .assertNormalExit("Protection Domains match"); - - // First class is loaded from JAR, second class is loaded from CDS - TestCommon.run("-cp", appJar, "ProtDomainB") - .assertNormalExit("Protection Domains match"); - - // Test ProtectionDomain for application and extension module classes from the - // "modules" jimage - TestCommon.run("-cp", appJar, "JimageClassProtDomain") - .assertNormalExit(output -> output.shouldNotContain( - "Failed: Protection Domains do not match")); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/ProtectionDomain.java 2019-07-24 08:26:37.833470793 -0400 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary AppCDS handling of protection domain. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/ProtDomain.java + * @compile test-classes/ProtDomainB.java + * @compile test-classes/JimageClassProtDomain.java + * @run driver ProtectionDomain + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class ProtectionDomain { + public static void main(String[] args) throws Exception { + JarBuilder.build("prot_domain", "ProtDomain", "ProtDomainB", "ProtDomainOther", + "ProtDomainBOther", "JimageClassProtDomain"); + + String appJar = TestCommon.getTestJar("prot_domain.jar"); + TestCommon.testDump(appJar, + TestCommon.list("ProtDomain", + "ProtDomainBOther", + "java/util/Dictionary", + "com/sun/tools/javac/Main", + "jdk/nio/zipfs/ZipInfo", + "java/net/URL", + "sun/rmi/rmic/Main", + "com/sun/jndi/dns/DnsName")); + + // First class is loaded from CDS, second class is loaded from JAR + TestCommon.run("-cp", appJar, "ProtDomain") + .assertNormalExit("Protection Domains match"); + + // First class is loaded from JAR, second class is loaded from CDS + TestCommon.run("-cp", appJar, "ProtDomainB") + .assertNormalExit("Protection Domains match"); + + // Test ProtectionDomain for application and extension module classes from the + // "modules" jimage + TestCommon.run("-cp", appJar, "JimageClassProtDomain") + .assertNormalExit(output -> output.shouldNotContain( + "Failed: Protection Domains do not match")); + } +} --- old/test/hotspot/jtreg/runtime/appcds/RelativePath.java 2019-07-24 08:26:38.505470769 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test relative paths specified in the -cp. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @compile test-classes/HelloMore.java - * @run driver RelativePath - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES; -import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; -import java.util.Arrays; -import jdk.test.lib.Platform; - -public class RelativePath { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String appJar2 = JarBuilder.build("AppendClasspath_HelloMore", "HelloMore"); - - // dump an archive with only the jar name in the -cp - int idx = appJar.lastIndexOf(File.separator); - String jarName = appJar.substring(idx + 1); - String jarDir = appJar.substring(0, idx); - TestCommon.testDump(jarDir, jarName, TestCommon.list("Hello")); - - // copy the jar file to another dir. Specify the jar file without - // a directory path. - Path srcPath = Paths.get(appJar); - Path destDir = Files.createTempDirectory(USER_DIR, "deploy"); - Path destPath = destDir.resolve(jarName); - Files.copy(srcPath, destPath, REPLACE_EXISTING, COPY_ATTRIBUTES); - TestCommon.runWithRelativePath( - destDir.toString(), - "-Xshare:on", - "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), - "-cp", jarName + File.pathSeparator + appJar2, - "-Xlog:class+load=trace,class+path=info", - "HelloMore") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldHaveExitValue(0); - }); - - // Long path test - // Create a long directory path and copy the appJar there. - final int MAX_PATH = 260; - destDir = Paths.get(jarDir); - int subDirLen = MAX_PATH - jarDir.length() - 3; - if (subDirLen > 0) { - char[] chars = new char[subDirLen]; - Arrays.fill(chars, 'x'); - String subPath = new String(chars); - destDir = Paths.get(jarDir, subPath); - } - File longDir = destDir.toFile(); - longDir.mkdir(); - String destJar = longDir.getPath() + File.separator + jarName; - Files.copy(Paths.get(appJar), Paths.get(destJar), REPLACE_EXISTING); - // Create an archive with the appJar in the long directory path. - TestCommon.testDump(destJar, TestCommon.list("Hello")); - - // Run with -cp containing the appJar and another jar appended. - TestCommon.run( - "-cp", destJar + File.pathSeparator + appJar2, - "-Xlog:class+load=trace,class+path=info", - "HelloMore") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldHaveExitValue(0); - }); - - // Dump an archive with a specified JAR file in -classpath - TestCommon.testDump(appJar, TestCommon.list("Hello")); - - // compose a relative path to the hello.jar - String newHello = TestCommon.composeRelPath(appJar); - - // create a sym link to the original hello.jar - File linkedHello = null; - if (!Platform.isWindows()) { - linkedHello = TestCommon.createSymLink(appJar); - } - - // PASS:1) same appJar but referred to via a relative path - TestCommon.run( - "-cp", newHello + File.pathSeparator + appJar2, - "-Xlog:class+load=trace,class+path=info", - "HelloMore") - .assertNormalExit(); - - // PASS:2) relative path starting with "." - TestCommon.runWithRelativePath( - jarDir, - "-Xshare:on", - "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), - "-cp", "." + File.separator + jarName + File.pathSeparator + appJar2, - "-Xlog:class+load=trace,class+path=info", - "HelloMore") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldHaveExitValue(0); - }); - - // PASS:3) relative path starting with ".." - idx = jarDir.lastIndexOf(File.separator); - String jarSubDir = jarDir.substring(idx + 1); - TestCommon.runWithRelativePath( - jarDir, - "-Xshare:on", - "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), - "-cp", ".." + File.separator + jarSubDir + File.separator + jarName - + File.pathSeparator + appJar2, - "-Xlog:class+load=trace,class+path=info", - "HelloMore") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldHaveExitValue(0); - }); - - // PASS:4) a jar linked to the original hello.jar - if (!Platform.isWindows()) { - TestCommon.run( - "-cp", linkedHello.getPath() + File.pathSeparator + appJar2, - "HelloMore") - .assertNormalExit(); - } - - final String errorMessage1 = "Unable to use shared archive"; - final String errorMessage2 = "shared class paths mismatch"; - // FAIL: 1) runtime with classpath different from the one used in dump time - // (runtime has an extra jar file prepended to the class path) - TestCommon.run( - "-cp", appJar2 + File.pathSeparator + newHello, - "HelloMore") - .assertAbnormalExit(errorMessage1, errorMessage2); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/RelativePath.java 2019-07-24 08:26:38.217470779 -0400 @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test relative paths specified in the -cp. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @compile test-classes/HelloMore.java + * @run driver RelativePath + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; +import java.util.Arrays; +import jdk.test.lib.Platform; + +public class RelativePath { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appJar2 = JarBuilder.build("AppendClasspath_HelloMore", "HelloMore"); + + // dump an archive with only the jar name in the -cp + int idx = appJar.lastIndexOf(File.separator); + String jarName = appJar.substring(idx + 1); + String jarDir = appJar.substring(0, idx); + TestCommon.testDump(jarDir, jarName, TestCommon.list("Hello")); + + // copy the jar file to another dir. Specify the jar file without + // a directory path. + Path srcPath = Paths.get(appJar); + Path destDir = Files.createTempDirectory(USER_DIR, "deploy"); + Path destPath = destDir.resolve(jarName); + Files.copy(srcPath, destPath, REPLACE_EXISTING, COPY_ATTRIBUTES); + TestCommon.runWithRelativePath( + destDir.toString(), + "-Xshare:on", + "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), + "-cp", jarName + File.pathSeparator + appJar2, + "-Xlog:class+load=trace,class+path=info", + "HelloMore") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldHaveExitValue(0); + }); + + // Long path test + // Create a long directory path and copy the appJar there. + final int MAX_PATH = 260; + destDir = Paths.get(jarDir); + int subDirLen = MAX_PATH - jarDir.length() - 3; + if (subDirLen > 0) { + char[] chars = new char[subDirLen]; + Arrays.fill(chars, 'x'); + String subPath = new String(chars); + destDir = Paths.get(jarDir, subPath); + } + File longDir = destDir.toFile(); + longDir.mkdir(); + String destJar = longDir.getPath() + File.separator + jarName; + Files.copy(Paths.get(appJar), Paths.get(destJar), REPLACE_EXISTING); + // Create an archive with the appJar in the long directory path. + TestCommon.testDump(destJar, TestCommon.list("Hello")); + + // Run with -cp containing the appJar and another jar appended. + TestCommon.run( + "-cp", destJar + File.pathSeparator + appJar2, + "-Xlog:class+load=trace,class+path=info", + "HelloMore") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldHaveExitValue(0); + }); + + // Dump an archive with a specified JAR file in -classpath + TestCommon.testDump(appJar, TestCommon.list("Hello")); + + // compose a relative path to the hello.jar + String newHello = TestCommon.composeRelPath(appJar); + + // create a sym link to the original hello.jar + File linkedHello = null; + if (!Platform.isWindows()) { + linkedHello = TestCommon.createSymLink(appJar); + } + + // PASS:1) same appJar but referred to via a relative path + TestCommon.run( + "-cp", newHello + File.pathSeparator + appJar2, + "-Xlog:class+load=trace,class+path=info", + "HelloMore") + .assertNormalExit(); + + // PASS:2) relative path starting with "." + TestCommon.runWithRelativePath( + jarDir, + "-Xshare:on", + "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), + "-cp", "." + File.separator + jarName + File.pathSeparator + appJar2, + "-Xlog:class+load=trace,class+path=info", + "HelloMore") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldHaveExitValue(0); + }); + + // PASS:3) relative path starting with ".." + idx = jarDir.lastIndexOf(File.separator); + String jarSubDir = jarDir.substring(idx + 1); + TestCommon.runWithRelativePath( + jarDir, + "-Xshare:on", + "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(), + "-cp", ".." + File.separator + jarSubDir + File.separator + jarName + + File.pathSeparator + appJar2, + "-Xlog:class+load=trace,class+path=info", + "HelloMore") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldHaveExitValue(0); + }); + + // PASS:4) a jar linked to the original hello.jar + if (!Platform.isWindows()) { + TestCommon.run( + "-cp", linkedHello.getPath() + File.pathSeparator + appJar2, + "HelloMore") + .assertNormalExit(); + } + + final String errorMessage1 = "Unable to use shared archive"; + final String errorMessage2 = "shared class paths mismatch"; + // FAIL: 1) runtime with classpath different from the one used in dump time + // (runtime has an extra jar file prepended to the class path) + TestCommon.run( + "-cp", appJar2 + File.pathSeparator + newHello, + "HelloMore") + .assertAbnormalExit(errorMessage1, errorMessage2); + + } +} --- old/test/hotspot/jtreg/runtime/appcds/RewriteBytecodesTest.java 2019-07-24 08:26:38.861470757 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Use ClassLoader.defineClass() to load a class with rewritten bytecode. Make sure - * the archived class with the same name is not loaded. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/RewriteBytecodes.java test-classes/Util.java test-classes/Super.java test-classes/Child.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver RewriteBytecodesTest - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; - -public class RewriteBytecodesTest { - public static void main(String[] args) throws Exception { - String wbJar = JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - - String appJar = JarBuilder.build("dynamic_define", "RewriteBytecodes", "Util", "Super", "Child"); - String superClsFile = (new File(System.getProperty("test.classes", "."), "Super.class")).getPath(); - - TestCommon.dump(appJar, TestCommon.list("RewriteBytecodes", "Super", "Child"), - // command-line arguments ... - use_whitebox_jar); - - OutputAnalyzer output = TestCommon.exec(appJar, - // command-line arguments ... - "--add-opens=java.base/java.lang=ALL-UNNAMED", - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "RewriteBytecodes", superClsFile); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/RewriteBytecodesTest.java 2019-07-24 08:26:38.565470767 -0400 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Use ClassLoader.defineClass() to load a class with rewritten bytecode. Make sure + * the archived class with the same name is not loaded. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/RewriteBytecodes.java test-classes/Util.java test-classes/Super.java test-classes/Child.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver RewriteBytecodesTest + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class RewriteBytecodesTest { + public static void main(String[] args) throws Exception { + String wbJar = JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + + String appJar = JarBuilder.build("dynamic_define", "RewriteBytecodes", "Util", "Super", "Child"); + String superClsFile = (new File(System.getProperty("test.classes", "."), "Super.class")).getPath(); + + TestCommon.dump(appJar, TestCommon.list("RewriteBytecodes", "Super", "Child"), + // command-line arguments ... + use_whitebox_jar); + + OutputAnalyzer output = TestCommon.exec(appJar, + // command-line arguments ... + "--add-opens=java.base/java.lang=ALL-UNNAMED", + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "RewriteBytecodes", superClsFile); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java 2019-07-24 08:26:39.253470743 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,481 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary SharedArchiveConsistency - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.compiler - * java.management - * jdk.jartool/sun.tools.jar - * jdk.internal.jvmstat/sun.jvmstat.monitor - * @build sun.hotspot.WhiteBox - * @compile test-classes/Hello.java - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI SharedArchiveConsistency - */ -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.Utils; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.channels.FileChannel; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; -import java.nio.file.StandardOpenOption; -import static java.nio.file.StandardOpenOption.READ; -import static java.nio.file.StandardOpenOption.WRITE; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Random; -import sun.hotspot.WhiteBox; - -public class SharedArchiveConsistency { - public static WhiteBox wb; - public static int offset_magic; // CDSFileMapHeaderBase::_magic - public static int offset_version; // CDSFileMapHeaderBase::_version - public static int offset_jvm_ident; // FileMapHeader::_jvm_ident - public static int sp_offset_crc; // CDSFileMapRegion::_crc - public static int offset_paths_misc_info_size; - public static int file_header_size = -1;// total size of header, variant, need calculation - public static int CDSFileMapRegion_size; // size of CDSFileMapRegion - public static int sp_offset; // offset of CDSFileMapRegion - public static int sp_used_offset; // offset of CDSFileMapRegion::_used - public static int size_t_size; // size of size_t - public static int int_size; // size of int - - public static File jsa; // will be updated during test - public static File orgJsaFile; // kept the original file not touched. - // The following should be consistent with the enum in the C++ MetaspaceShared class - public static String[] shared_region_name = { - "mc", // MiscCode - "rw", // ReadWrite - "ro", // ReadOnly - "md", // MiscData - "first_closed_archive", - "last_closed_archive", - "first_open_archive", - "last_open_archive" - }; - - public static int num_regions = shared_region_name.length; - public static String[] matchMessages = { - "Unable to use shared archive", - "An error has occurred while processing the shared archive file.", - "Checksum verification failed.", - "The shared archive file has been truncated." - }; - - public static void getFileOffsetInfo() throws Exception { - wb = WhiteBox.getWhiteBox(); - offset_magic = wb.getOffsetForName("FileMapHeader::_magic"); - offset_version = wb.getOffsetForName("FileMapHeader::_version"); - offset_jvm_ident = wb.getOffsetForName("FileMapHeader::_jvm_ident"); - sp_offset_crc = wb.getOffsetForName("CDSFileMapRegion::_crc"); - try { - int nonExistOffset = wb.getOffsetForName("FileMapHeader::_non_exist_offset"); - System.exit(-1); // should fail - } catch (Exception e) { - // success - } - - sp_offset = wb.getOffsetForName("FileMapHeader::_space[0]") - offset_magic; - sp_used_offset = wb.getOffsetForName("CDSFileMapRegion::_used") - sp_offset_crc; - size_t_size = wb.getOffsetForName("size_t_size"); - CDSFileMapRegion_size = wb.getOffsetForName("CDSFileMapRegion_size"); - } - - public static int getFileHeaderSize(FileChannel fc) throws Exception { - if (file_header_size != -1) { - return file_header_size; - } - // this is not real header size, it is struct size - int_size = wb.getOffsetForName("int_size"); - file_header_size = wb.getOffsetForName("file_header_size"); - offset_paths_misc_info_size = wb.getOffsetForName("FileMapHeader::_paths_misc_info_size") - - offset_magic; - int path_misc_info_size = (int)readInt(fc, offset_paths_misc_info_size, int_size); - file_header_size += path_misc_info_size; - System.out.println("offset_paths_misc_info_size = " + offset_paths_misc_info_size); - System.out.println("path_misc_info_size = " + path_misc_info_size); - System.out.println("file_header_size = " + file_header_size); - file_header_size = (int)align_up_page(file_header_size); - System.out.println("file_header_size (aligned to page) = " + file_header_size); - return file_header_size; - } - - public static long align_up_page(long l) throws Exception { - // wb is obtained in getFileOffsetInfo() which is called first in main() else we should call - // WhiteBox.getWhiteBox() here first. - int pageSize = wb.getVMPageSize(); - return (l + pageSize -1) & (~ (pageSize - 1)); - } - - private static long getRandomBetween(long start, long end) throws Exception { - if (start > end) { - throw new IllegalArgumentException("start must be less than end"); - } - Random aRandom = Utils.getRandomInstance(); - int d = aRandom.nextInt((int)(end - start)); - if (d < 1) { - d = 1; - } - return start + d; - } - - public static long readInt(FileChannel fc, long offset, int nbytes) throws Exception { - ByteBuffer bb = ByteBuffer.allocate(nbytes); - bb.order(ByteOrder.nativeOrder()); - fc.position(offset); - fc.read(bb); - return (nbytes > 4 ? bb.getLong(0) : bb.getInt(0)); - } - - public static void writeData(FileChannel fc, long offset, ByteBuffer bb) throws Exception { - fc.position(offset); - fc.write(bb); - fc.force(true); - } - - public static FileChannel getFileChannel(File jsaFile) throws Exception { - List arry = new ArrayList(); - arry.add(READ); - arry.add(WRITE); - return FileChannel.open(jsaFile.toPath(), new HashSet(arry)); - } - - public static void modifyJsaContentRandomly(File jsaFile) throws Exception { - FileChannel fc = getFileChannel(jsaFile); - // corrupt random area in the data areas - long[] used = new long[num_regions]; // record used bytes - long start0, start, end, off; - int used_offset, path_info_size; - - int bufSize; - System.out.printf("%-24s%12s%12s%16s\n", "Space Name", "Used bytes", "Reg Start", "Random Offset"); - start0 = getFileHeaderSize(fc); - for (int i = 0; i < num_regions; i++) { - used[i] = get_region_used_size_aligned(fc, i); - start = start0; - for (int j = 0; j < i; j++) { - start += align_up_page(used[j]); - } - end = start + used[i]; - if (start == end) { - continue; // Ignore empty regions - } - off = getRandomBetween(start, end); - System.out.printf("%-24s%12d%12d%16d\n", shared_region_name[i], used[i], start, off); - if (end - off < 1024) { - bufSize = (int)(end - off + 1); - } else { - bufSize = 1024; - } - ByteBuffer bbuf = ByteBuffer.wrap(new byte[bufSize]); - writeData(fc, off, bbuf); - } - if (fc.isOpen()) { - fc.close(); - } - } - - static long get_region_used_size_aligned(FileChannel fc, int region) throws Exception { - long n = sp_offset + CDSFileMapRegion_size * region + sp_used_offset; - long alignment = WhiteBox.getWhiteBox().metaspaceReserveAlignment(); - long used = readInt(fc, n, size_t_size); - used = (used + alignment - 1) & ~(alignment - 1); - return used; - } - - public static boolean modifyJsaContent(int region, File jsaFile) throws Exception { - FileChannel fc = getFileChannel(jsaFile); - byte[] buf = new byte[4096]; - ByteBuffer bbuf = ByteBuffer.wrap(buf); - - long total = 0L; - long[] used = new long[num_regions]; - System.out.printf("%-24s%12s\n", "Space name", "Used bytes"); - for (int i = 0; i < num_regions; i++) { - used[i] = get_region_used_size_aligned(fc, i); - System.out.printf("%-24s%12d\n", shared_region_name[i], used[i]); - total += used[i]; - } - System.out.printf("%-24s%12d\n", "Total: ", total); - long header_size = getFileHeaderSize(fc); - long region_start_offset = header_size; - for (int i=0; i 4 ? bb.getLong(0) : bb.getInt(0)); + } + + public static void writeData(FileChannel fc, long offset, ByteBuffer bb) throws Exception { + fc.position(offset); + fc.write(bb); + fc.force(true); + } + + public static FileChannel getFileChannel(File jsaFile) throws Exception { + List arry = new ArrayList(); + arry.add(READ); + arry.add(WRITE); + return FileChannel.open(jsaFile.toPath(), new HashSet(arry)); + } + + public static void modifyJsaContentRandomly(File jsaFile) throws Exception { + FileChannel fc = getFileChannel(jsaFile); + // corrupt random area in the data areas + long[] used = new long[num_regions]; // record used bytes + long start0, start, end, off; + int used_offset, path_info_size; + + int bufSize; + System.out.printf("%-24s%12s%12s%16s\n", "Space Name", "Used bytes", "Reg Start", "Random Offset"); + start0 = getFileHeaderSize(fc); + for (int i = 0; i < num_regions; i++) { + used[i] = get_region_used_size_aligned(fc, i); + start = start0; + for (int j = 0; j < i; j++) { + start += align_up_page(used[j]); + } + end = start + used[i]; + if (start == end) { + continue; // Ignore empty regions + } + off = getRandomBetween(start, end); + System.out.printf("%-24s%12d%12d%16d\n", shared_region_name[i], used[i], start, off); + if (end - off < 1024) { + bufSize = (int)(end - off + 1); + } else { + bufSize = 1024; + } + ByteBuffer bbuf = ByteBuffer.wrap(new byte[bufSize]); + writeData(fc, off, bbuf); + } + if (fc.isOpen()) { + fc.close(); + } + } + + static long get_region_used_size_aligned(FileChannel fc, int region) throws Exception { + long n = sp_offset + CDSFileMapRegion_size * region + sp_used_offset; + long alignment = WhiteBox.getWhiteBox().metaspaceReserveAlignment(); + long used = readInt(fc, n, size_t_size); + used = (used + alignment - 1) & ~(alignment - 1); + return used; + } + + public static boolean modifyJsaContent(int region, File jsaFile) throws Exception { + FileChannel fc = getFileChannel(jsaFile); + byte[] buf = new byte[4096]; + ByteBuffer bbuf = ByteBuffer.wrap(buf); + + long total = 0L; + long[] used = new long[num_regions]; + System.out.printf("%-24s%12s\n", "Space name", "Used bytes"); + for (int i = 0; i < num_regions; i++) { + used[i] = get_region_used_size_aligned(fc, i); + System.out.printf("%-24s%12d\n", shared_region_name[i], used[i]); + total += used[i]; + } + System.out.printf("%-24s%12d\n", "Total: ", total); + long header_size = getFileHeaderSize(fc); + long region_start_offset = header_size; + for (int i=0; i option - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; - - -// NOTE: This test serves as a sanity test and also as an example for simple -// use of SharedArchiveFile argument. For this reason it DOES NOT use the utility -// methods to form command line to create/use shared archive. -public class SharedArchiveFile { - public static void main(String[] args) throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, - "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", - "-Xshare:dump"); - OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile"); - CDSTestUtils.checkDump(out); - - // -XX:+DumpSharedSpaces should behave the same as -Xshare:dump - pb = ProcessTools.createJavaProcessBuilder(true, - "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", - "-XX:+DumpSharedSpaces"); - out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile"); - CDSTestUtils.checkDump(out); - - pb = ProcessTools.createJavaProcessBuilder(true, - "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", - "-Xshare:on", "-version"); - out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile"); - CDSTestUtils.checkExec(out); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedArchiveFile.java 2019-07-24 08:26:39.321470741 -0400 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8014138 + * @summary Testing new -XX:SharedArchiveFile= option + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + + +// NOTE: This test serves as a sanity test and also as an example for simple +// use of SharedArchiveFile argument. For this reason it DOES NOT use the utility +// methods to form command line to create/use shared archive. +public class SharedArchiveFile { + public static void main(String[] args) throws Exception { + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, + "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", + "-Xshare:dump"); + OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile"); + CDSTestUtils.checkDump(out); + + // -XX:+DumpSharedSpaces should behave the same as -Xshare:dump + pb = ProcessTools.createJavaProcessBuilder(true, + "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", + "-XX:+DumpSharedSpaces"); + out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile"); + CDSTestUtils.checkDump(out); + + pb = ProcessTools.createJavaProcessBuilder(true, + "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", + "-Xshare:on", "-version"); + out = CDSTestUtils.executeAndLog(pb, "SharedArchiveFile"); + CDSTestUtils.checkExec(out); + } +} --- old/test/hotspot/jtreg/runtime/appcds/SharedBaseAddress.java 2019-07-24 08:26:40.005470717 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test SharedBaseAddress - * @summary Test variety of values for SharedBaseAddress, in AppCDS mode, - * making sure VM handles normal values as well as edge values - * w/o a crash. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run main/timeout=240 SharedBaseAddress - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class SharedBaseAddress { - - // shared base address test table - private static final String[] testTable = { - "1g", "8g", "64g","512g", "4t", - "32t", "128t", "0", - "1", "64k", "64M" - }; - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - - for (String testEntry : testTable) { - System.out.println("sharedBaseAddress = " + testEntry); - - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, new String[] {"Hello"}, "-XX:SharedBaseAddress=" + testEntry); - TestCommon.checkDump(dumpOutput, "Loading classes to share"); - - OutputAnalyzer execOutput = TestCommon.exec(appJar, "Hello"); - TestCommon.checkExec(execOutput, "Hello World"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedBaseAddress.java 2019-07-24 08:26:39.669470729 -0400 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test SharedBaseAddress + * @summary Test variety of values for SharedBaseAddress, in AppCDS mode, + * making sure VM handles normal values as well as edge values + * w/o a crash. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run main/timeout=240 SharedBaseAddress + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; + +public class SharedBaseAddress { + + // shared base address test table + private static final String[] testTable = { + "1g", "8g", "64g","512g", "4t", + "32t", "128t", "0", + "1", "64k", "64M" + }; + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + + // First check CDS for default mode + for (String testEntry : testTable) { + String filename = "SharedBaseAddress" + testEntry + ".jsa"; + System.out.println("sharedBaseAddress = " + testEntry); + CDSOptions opts = (new CDSOptions()) + .setArchiveName(filename) + .addPrefix("-XX:SharedBaseAddress=" + testEntry); + + CDSTestUtils.createArchiveAndCheck(opts); + CDSTestUtils.runWithArchiveAndCheck(opts); + } + + // Next check CDS in AppCDS mode + for (String testEntry : testTable) { + System.out.println("sharedBaseAddress = " + testEntry); + + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, new String[] {"Hello"}, "-XX:SharedBaseAddress=" + testEntry); + TestCommon.checkDump(dumpOutput, "Loading classes to share"); + + OutputAnalyzer execOutput = TestCommon.exec(appJar, "Hello"); + TestCommon.checkExec(execOutput, "Hello World"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/SharedPackages.java 2019-07-24 08:26:40.453470701 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary AppCDS handling of package. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/PackageTest.java - * @compile test-classes/JimageClassPackage.java - * @run driver SharedPackages - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class SharedPackages { - public static void main(String[] args) throws Exception { - JarBuilder.build("pkg", "p/PackageTest", "JimageClassPackage"); - - String appJar = TestCommon.getTestJar("pkg.jar"); - TestCommon.testDump(appJar, TestCommon.list("p/PackageTest", - "java/util/Dictionary", - "sun/tools/javac/Main", - "jdk/nio/zipfs/ZipInfo", - "java/net/URL", - "sun/rmi/rmic/Main", - "com/sun/jndi/dns/DnsName")); - - OutputAnalyzer output; - - // Test 1: shared class from Jar on the -cp - output = TestCommon.exec(appJar, "-verbose:class", "p.PackageTest"); - TestCommon.checkExec(output, "Expected package"); - if (!TestCommon.isUnableToMap(output)) - output.shouldContain("Package is not sealed"); - - // Test 2: shared classes from "modules" jimage - output = TestCommon.exec(appJar, "-verbose:class", - "JimageClassPackage"); - if (!TestCommon.isUnableToMap(output)) { - output.shouldNotContain("Unexpected package"); - output.shouldNotContain("Package is not sealed"); - } - - // Test 3: shared class from Jar on the -Xbootclasspath/a - TestCommon.dump( - appJar, TestCommon.list("p/PackageTest"), "-Xbootclasspath/a:" + appJar); - output = TestCommon.exec(appJar, "-Xbootclasspath/a:" + appJar, "p.PackageTest"); - if (!TestCommon.isUnableToMap(output)) { - output.shouldNotContain("Unexpected package"); - output.shouldContain("Package is not sealed"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedPackages.java 2019-07-24 08:26:40.125470713 -0400 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary AppCDS handling of package. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/PackageTest.java + * @compile test-classes/JimageClassPackage.java + * @run driver SharedPackages + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class SharedPackages { + public static void main(String[] args) throws Exception { + JarBuilder.build("pkg", "p/PackageTest", "JimageClassPackage"); + + String appJar = TestCommon.getTestJar("pkg.jar"); + TestCommon.testDump(appJar, TestCommon.list("p/PackageTest", + "java/util/Dictionary", + "sun/tools/javac/Main", + "jdk/nio/zipfs/ZipInfo", + "java/net/URL", + "sun/rmi/rmic/Main", + "com/sun/jndi/dns/DnsName")); + + OutputAnalyzer output; + + // Test 1: shared class from Jar on the -cp + output = TestCommon.exec(appJar, "-verbose:class", "p.PackageTest"); + TestCommon.checkExec(output, "Expected package"); + if (!TestCommon.isUnableToMap(output)) + output.shouldContain("Package is not sealed"); + + // Test 2: shared classes from "modules" jimage + output = TestCommon.exec(appJar, "-verbose:class", + "JimageClassPackage"); + if (!TestCommon.isUnableToMap(output)) { + output.shouldNotContain("Unexpected package"); + output.shouldNotContain("Package is not sealed"); + } + + // Test 3: shared class from Jar on the -Xbootclasspath/a + TestCommon.dump( + appJar, TestCommon.list("p/PackageTest"), "-Xbootclasspath/a:" + appJar); + output = TestCommon.exec(appJar, "-Xbootclasspath/a:" + appJar, "p.PackageTest"); + if (!TestCommon.isUnableToMap(output)) { + output.shouldNotContain("Unexpected package"); + output.shouldContain("Package is not sealed"); + } + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStrings.java 2019-07-24 08:26:40.837470688 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @summary Check to make sure that shared strings in the bootstrap CDS archive - * are actually shared - * @requires vm.cds.archived.java.heap - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @build SharedStringsWb sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox - * @run driver SharedStrings - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; - -public class SharedStrings { - public static void main(String[] args) throws Exception { - // Note: This is a basic sanity test for Shared Strings feature. - // This also serves as a reference on how to use this feature, - // hence the command lines are spelled out instead of using the - // test utils methods. - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - "-XX:+UnlockDiagnosticVMOptions", - "-XX:SharedArchiveFile=./SharedStrings.jsa", - "-Xlog:cds,cds+hashtables", - // Needed for bootclasspath match, for CDS to work with WhiteBox API - "-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"), - "-Xshare:dump"); - - OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "dump"); - CDSTestUtils.checkDump(out, "Shared string table stats"); - - - pb = ProcessTools.createJavaProcessBuilder( - "-XX:+UnlockDiagnosticVMOptions", - "-XX:SharedArchiveFile=./SharedStrings.jsa", - // needed for access to white box test API - "-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"), - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-Xshare:on", "-showversion", "SharedStringsWb"); - - out = CDSTestUtils.executeAndLog(pb, "exec"); - CDSTestUtils.checkExec(out); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedStrings.java 2019-07-24 08:26:40.509470699 -0400 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Check to make sure that shared strings in the bootstrap CDS archive + * are actually shared + * @requires vm.cds.archived.java.heap + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @build SharedStringsWb sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox + * @run driver SharedStrings + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +public class SharedStrings { + public static void main(String[] args) throws Exception { + // Note: This is a basic sanity test for Shared Strings feature. + // This also serves as a reference on how to use this feature, + // hence the command lines are spelled out instead of using the + // test utils methods. + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:SharedArchiveFile=./SharedStrings.jsa", + "-Xlog:cds,cds+hashtables", + // Needed for bootclasspath match, for CDS to work with WhiteBox API + "-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"), + "-Xshare:dump"); + + OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "dump"); + CDSTestUtils.checkDump(out, "Shared string table stats"); + + + pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:SharedArchiveFile=./SharedStrings.jsa", + // needed for access to white box test API + "-Xbootclasspath/a:" + ClassFileInstaller.getJarPath("whitebox.jar"), + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-Xshare:on", "-showversion", "SharedStringsWb"); + + out = CDSTestUtils.executeAndLog(pb, "exec"); + CDSTestUtils.checkExec(out); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStringsDedup.java 2019-07-24 08:26:41.229470674 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test SharedStringsDedup - * @summary Test -Xshare:auto with shared strings and -XX:+UseStringDeduplication - * @requires vm.cds.archived.java.heap - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run driver SharedStringsDedup - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; - -// The main purpose is to test the interaction between shared strings -// and -XX:+UseStringDeduplication. We run in -Xshare:auto mode so -// we don't need to worry about CDS archive mapping failure (which -// doesn't happen often so it won't impact coverage). -public class SharedStringsDedup { - public static void main(String[] args) throws Exception { - OutputAnalyzer out = - CDSTestUtils.createArchive(); - CDSTestUtils.checkDump(out, "Shared string table stats"); - CDSTestUtils.runWithArchiveAndCheck("-XX:+UseStringDeduplication"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedStringsDedup.java 2019-07-24 08:26:40.889470686 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test SharedStringsDedup + * @summary Test -Xshare:auto with shared strings and -XX:+UseStringDeduplication + * @requires vm.cds.archived.java.heap + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver SharedStringsDedup + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; + +// The main purpose is to test the interaction between shared strings +// and -XX:+UseStringDeduplication. We run in -Xshare:auto mode so +// we don't need to worry about CDS archive mapping failure (which +// doesn't happen often so it won't impact coverage). +public class SharedStringsDedup { + public static void main(String[] args) throws Exception { + OutputAnalyzer out = + CDSTestUtils.createArchive(); + CDSTestUtils.checkDump(out, "Shared string table stats"); + CDSTestUtils.runWithArchiveAndCheck("-XX:+UseStringDeduplication"); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStringsRunAuto.java 2019-07-24 08:26:41.613470661 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test SharedStringsAuto - * @summary Test -Xshare:auto with shared strings. - * @requires vm.cds.archived.java.heap - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run driver SharedStringsRunAuto - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; - -public class SharedStringsRunAuto { - public static void main(String[] args) throws Exception { - OutputAnalyzer out = - CDSTestUtils.createArchive(); - CDSTestUtils.checkDump(out, "Shared string table stats"); - CDSTestUtils.runWithArchiveAndCheck(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedStringsRunAuto.java 2019-07-24 08:26:41.289470672 -0400 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test SharedStringsAuto + * @summary Test -Xshare:auto with shared strings. + * @requires vm.cds.archived.java.heap + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver SharedStringsRunAuto + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; + +public class SharedStringsRunAuto { + public static void main(String[] args) throws Exception { + OutputAnalyzer out = + CDSTestUtils.createArchive(); + CDSTestUtils.checkDump(out, "Shared string table stats"); + CDSTestUtils.runWithArchiveAndCheck(); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedStringsWb.java 2019-07-24 08:26:41.957470649 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import sun.hotspot.WhiteBox; - -// This class is used by the test SharedStrings.java -// It should be launched in CDS mode -public class SharedStringsWb { - public static void main(String[] args) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - - if (wb.areSharedStringsIgnored()) { - System.out.println("Shared strings are ignored, assuming PASS"); - return; - } - - // The string below is known to be added to CDS archive - String s = ""; - String internedS = s.intern(); - - // Check that it's a valid string - if (s.getClass() != String.class || !(s instanceof String)) { - throw new RuntimeException("Shared string is not a valid String: FAIL"); - } - - if (wb.isShared(internedS)) { - System.out.println("Found shared string, result: PASS"); - } else { - throw new RuntimeException("String is not shared, result: FAIL"); - } - } -} - - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedStringsWb.java 2019-07-24 08:26:41.665470659 -0400 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.hotspot.WhiteBox; + +// This class is used by the test SharedStrings.java +// It should be launched in CDS mode +public class SharedStringsWb { + public static void main(String[] args) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + + if (wb.areSharedStringsIgnored()) { + System.out.println("Shared strings are ignored, assuming PASS"); + return; + } + + // The string below is known to be added to CDS archive + String s = ""; + String internedS = s.intern(); + + // Check that it's a valid string + if (s.getClass() != String.class || !(s instanceof String)) { + throw new RuntimeException("Shared string is not a valid String: FAIL"); + } + + if (wb.isShared(internedS)) { + System.out.println("Found shared string, result: PASS"); + } else { + throw new RuntimeException("String is not shared, result: FAIL"); + } + } +} + + --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/SharedSymbolTableBucketSize.java 2019-07-24 08:26:42.317470636 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 8059510 - * @summary Test SharedSymbolTableBucketSize option - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -public class SharedSymbolTableBucketSize { - public static void main(String[] args) throws Exception { - int bucket_size = 8; - - OutputAnalyzer output = - CDSTestUtils.createArchive("-XX:SharedSymbolTableBucketSize=" - + Integer.valueOf(bucket_size)); - CDSTestUtils.checkDump(output); - CDSTestUtils.checkMappingFailure(output); - - String s = output.firstMatch("Average bucket size : .*"); - Float f = Float.parseFloat(s.substring(25)); - int size = Math.round(f); - if (size != bucket_size) { - throw new Exception("FAILED: incorrect bucket size " + size + - ", expect " + bucket_size); - } - - // Invalid SharedSymbolTableBucketSize input - String input[] = {"-XX:SharedSymbolTableBucketSize=-1", - "-XX:SharedSymbolTableBucketSize=2.5"}; - for (int i = 0; i < input.length; i++) { - CDSTestUtils.createArchive(input[i]) - .shouldContain("Improperly specified VM option") - .shouldHaveExitValue(1); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SharedSymbolTableBucketSize.java 2019-07-24 08:26:42.013470647 -0400 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8059510 + * @summary Test SharedSymbolTableBucketSize option + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class SharedSymbolTableBucketSize { + public static void main(String[] args) throws Exception { + int bucket_size = 8; + + OutputAnalyzer output = + CDSTestUtils.createArchive("-XX:SharedSymbolTableBucketSize=" + + Integer.valueOf(bucket_size)); + CDSTestUtils.checkDump(output); + CDSTestUtils.checkMappingFailure(output); + + String s = output.firstMatch("Average bucket size : .*"); + Float f = Float.parseFloat(s.substring(25)); + int size = Math.round(f); + if (size != bucket_size) { + throw new Exception("FAILED: incorrect bucket size " + size + + ", expect " + bucket_size); + } + + // Invalid SharedSymbolTableBucketSize input + String input[] = {"-XX:SharedSymbolTableBucketSize=-1", + "-XX:SharedSymbolTableBucketSize=2.5"}; + for (int i = 0; i < input.length; i++) { + CDSTestUtils.createArchive(input[i]) + .shouldContain("Improperly specified VM option") + .shouldHaveExitValue(1); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/SignedJar.java 2019-07-24 08:26:42.669470624 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary AppCDS handling of signed JAR. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver SignedJar - */ - -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; - -public class SignedJar { - public static void main(String[] args) throws Exception { - String unsignedJar = JarBuilder.getOrCreateHelloJar(); - JarBuilder.signJar(); - - // Test class exists in signed JAR - String signedJar = TestCommon.getTestJar("signed_hello.jar"); - OutputAnalyzer output; - output = TestCommon.dump(signedJar, TestCommon.list("Hello")); - TestCommon.checkDump(output, "Skipping Hello: Signed JAR"); - - // At runtime, the Hello class should be loaded from the jar file - // instead of from the shared archive since a class from a signed - // jar shouldn't be dumped into the archive. - output = TestCommon.exec(signedJar, "-verbose:class", "Hello"); - String expectedOutput = ".class,load. Hello source: file:.*signed_hello.jar"; - - try { - output.shouldMatch(expectedOutput); - } catch (Exception e) { - TestCommon.checkCommonExecExceptions(output, e); - } - - // Test class exists in both signed JAR and unsigned JAR - String jars = signedJar + System.getProperty("path.separator") + unsignedJar; - output = TestCommon.dump(jars, TestCommon.list("Hello")); - TestCommon.checkDump(output, "Skipping Hello: Signed JAR"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SignedJar.java 2019-07-24 08:26:42.373470635 -0400 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary AppCDS handling of signed JAR. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver SignedJar + */ + +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; + +public class SignedJar { + public static void main(String[] args) throws Exception { + String unsignedJar = JarBuilder.getOrCreateHelloJar(); + JarBuilder.signJar(); + + // Test class exists in signed JAR + String signedJar = TestCommon.getTestJar("signed_hello.jar"); + OutputAnalyzer output; + output = TestCommon.dump(signedJar, TestCommon.list("Hello")); + TestCommon.checkDump(output, "Skipping Hello: Signed JAR"); + + // At runtime, the Hello class should be loaded from the jar file + // instead of from the shared archive since a class from a signed + // jar shouldn't be dumped into the archive. + output = TestCommon.exec(signedJar, "-verbose:class", "Hello"); + String expectedOutput = ".class,load. Hello source: file:.*signed_hello.jar"; + + try { + output.shouldMatch(expectedOutput); + } catch (Exception e) { + TestCommon.checkCommonExecExceptions(output, e); + } + + // Test class exists in both signed JAR and unsigned JAR + String jars = signedJar + System.getProperty("path.separator") + unsignedJar; + output = TestCommon.dump(jars, TestCommon.list("Hello")); + TestCommon.checkDump(output, "Skipping Hello: Signed JAR"); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/SpaceUtilizationCheck.java 2019-07-24 08:26:43.057470611 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test SpaceUtilizationCheck - * @summary Check if the space utilization for shared spaces is adequate - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * sun.hotspot.WhiteBox$WhiteBoxPermission - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI SpaceUtilizationCheck - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -import java.util.regex.Pattern; -import java.util.regex.Matcher; -import java.util.ArrayList; -import java.util.Hashtable; -import java.lang.Integer; - -public class SpaceUtilizationCheck { - // [1] Each region must have strictly less than - // WhiteBox.metaspaceReserveAlignment() bytes of unused space. - // [2] There must be no gap between two consecutive regions. - - public static void main(String[] args) throws Exception { - // (1) Default VM arguments - test(); - - // (2) Use the now deprecated VM arguments. They should have no effect. - test("-XX:SharedReadWriteSize=128M", - "-XX:SharedReadOnlySize=128M", - "-XX:SharedMiscDataSize=128M", - "-XX:SharedMiscCodeSize=128M"); - } - - static void test(String... extra_options) throws Exception { - OutputAnalyzer output = CDSTestUtils.createArchive(extra_options); - CDSTestUtils.checkDump(output); - Pattern pattern = Pattern.compile("^(..) *space: *([0-9]+).* out of *([0-9]+) bytes .* at 0x([0-9a0-f]+)"); - WhiteBox wb = WhiteBox.getWhiteBox(); - long reserve_alignment = wb.metaspaceReserveAlignment(); - System.out.println("Metaspace::reserve_alignment() = " + reserve_alignment); - - long last_region = -1; - Hashtable checked = new Hashtable<>(); - for (String line : output.getStdout().split("\n")) { - if (line.contains(" space:") && !line.contains("st space:")) { - Matcher matcher = pattern.matcher(line); - if (matcher.find()) { - String name = matcher.group(1); - if (name.equals("s0") || name.equals("s1")) { - // String regions are listed at the end and they may not be fully occupied. - break; - } else { - System.out.println("Checking " + name + " in : " + line); - checked.put(name, name); - } - long used = Long.parseLong(matcher.group(2)); - long capacity = Long.parseLong(matcher.group(3)); - long address = Long.parseLong(matcher.group(4), 16); - long unused = capacity - used; - if (unused < 0) { - throw new RuntimeException("Unused space (" + unused + ") less than 0"); - } - if (unused > reserve_alignment) { - // [1] Check for unused space - throw new RuntimeException("Unused space (" + unused + ") must be smaller than Metaspace::reserve_alignment() (" + - reserve_alignment + ")"); - } - if (last_region >= 0 && address != last_region) { - // [2] Check for no-gap - throw new RuntimeException("Region 0x" + address + " should have started at 0x" + Long.toString(last_region, 16)); - } - last_region = address + capacity; - } - } - } - if (checked.size() != 4) { - throw new RuntimeException("Must have 4 consecutive, fully utilized regions"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SpaceUtilizationCheck.java 2019-07-24 08:26:42.733470622 -0400 @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test SpaceUtilizationCheck + * @summary Check if the space utilization for shared spaces is adequate + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * sun.hotspot.WhiteBox$WhiteBoxPermission + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI SpaceUtilizationCheck + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +import java.util.regex.Pattern; +import java.util.regex.Matcher; +import java.util.ArrayList; +import java.util.Hashtable; +import java.lang.Integer; + +public class SpaceUtilizationCheck { + // [1] Each region must have strictly less than + // WhiteBox.metaspaceReserveAlignment() bytes of unused space. + // [2] There must be no gap between two consecutive regions. + + public static void main(String[] args) throws Exception { + // (1) Default VM arguments + test(); + + // (2) Use the now deprecated VM arguments. They should have no effect. + test("-XX:SharedReadWriteSize=128M", + "-XX:SharedReadOnlySize=128M", + "-XX:SharedMiscDataSize=128M", + "-XX:SharedMiscCodeSize=128M"); + } + + static void test(String... extra_options) throws Exception { + OutputAnalyzer output = CDSTestUtils.createArchive(extra_options); + CDSTestUtils.checkDump(output); + Pattern pattern = Pattern.compile("^(..) *space: *([0-9]+).* out of *([0-9]+) bytes .* at 0x([0-9a0-f]+)"); + WhiteBox wb = WhiteBox.getWhiteBox(); + long reserve_alignment = wb.metaspaceReserveAlignment(); + System.out.println("Metaspace::reserve_alignment() = " + reserve_alignment); + + long last_region = -1; + Hashtable checked = new Hashtable<>(); + for (String line : output.getStdout().split("\n")) { + if (line.contains(" space:") && !line.contains("st space:")) { + Matcher matcher = pattern.matcher(line); + if (matcher.find()) { + String name = matcher.group(1); + if (name.equals("s0") || name.equals("s1")) { + // String regions are listed at the end and they may not be fully occupied. + break; + } else { + System.out.println("Checking " + name + " in : " + line); + checked.put(name, name); + } + long used = Long.parseLong(matcher.group(2)); + long capacity = Long.parseLong(matcher.group(3)); + long address = Long.parseLong(matcher.group(4), 16); + long unused = capacity - used; + if (unused < 0) { + throw new RuntimeException("Unused space (" + unused + ") less than 0"); + } + if (unused > reserve_alignment) { + // [1] Check for unused space + throw new RuntimeException("Unused space (" + unused + ") must be smaller than Metaspace::reserve_alignment() (" + + reserve_alignment + ")"); + } + if (last_region >= 0 && address != last_region) { + // [2] Check for no-gap + throw new RuntimeException("Region 0x" + address + " should have started at 0x" + Long.toString(last_region, 16)); + } + last_region = address + capacity; + } + } + } + if (checked.size() != 4) { + throw new RuntimeException("Must have 4 consecutive, fully utilized regions"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/SpecifySysLoaderProp.java 2019-07-24 08:26:43.393470599 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary If -Djava.system.class.loader=xxx is specified in command-line, disable archived non-system classes - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @compile test-classes/TestClassLoader.java - * @compile test-classes/ReportMyLoader.java - * @compile test-classes/TrySwitchMyLoader.java - * @run driver SpecifySysLoaderProp - */ - -import java.io.*; -import jdk.test.lib.process.OutputAnalyzer; - -public class SpecifySysLoaderProp { - - public static void main(String[] args) throws Exception { - JarBuilder.build("sysloader", "TestClassLoader", "ReportMyLoader", "TrySwitchMyLoader"); - - String jarFileName = "sysloader.jar"; - String appJar = TestCommon.getTestJar(jarFileName); - TestCommon.testDump(appJar, TestCommon.list("ReportMyLoader")); - String warning = "VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified"; - - - // (0) Baseline. Do not specify -Djava.system.class.loader - // The test class should be loaded from archive - TestCommon.run( - "-verbose:class", - "-cp", appJar, - "ReportMyLoader") - .assertNormalExit("[class,load] ReportMyLoader source: shared objects file", - "ReportMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@"); - - // (1) Try to execute the archive with -Djava.system.class.loader=no.such.Klass, - // it should fail - TestCommon.run( - "-cp", appJar, - "-Djava.system.class.loader=no.such.Klass", - "ReportMyLoader") - .assertAbnormalExit(output -> { - output.shouldContain(warning); - output.shouldContain("ClassNotFoundException: no.such.Klass"); - }); - - // (2) Try to execute the archive with -Djava.system.class.loader=TestClassLoader, - // it should run, but archived non-system classes should be disabled - TestCommon.run( - "-verbose:class", - "-cp", appJar, - "-Djava.system.class.loader=TestClassLoader", - "ReportMyLoader") - .assertNormalExit("ReportMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@", //<-this is still printed because TestClassLoader simply delegates to Launcher$AppLoader, but ... - "TestClassLoader.called = true", //<-but this proves that TestClassLoader was indeed called. - "TestClassLoader: loadClass(\"ReportMyLoader\",") //<- this also proves that TestClassLoader was indeed called. - .assertNormalExit(output -> { - output.shouldMatch(".class,load. TestClassLoader source: file:"); - output.shouldMatch(".class,load. ReportMyLoader source: file:.*" + jarFileName); - }); - - // (3) Try to change the java.system.class.loader programmatically after - // the app's main method is executed. This should have no effect in terms of - // changing or switching the actual system class loader that's already in use. - TestCommon.run( - "-verbose:class", - "-cp", appJar, - "TrySwitchMyLoader") - .assertNormalExit("[class,load] ReportMyLoader source: shared objects file", - "TrySwitchMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@", - "ReportMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@", - "TestClassLoader.called = false"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/SpecifySysLoaderProp.java 2019-07-24 08:26:43.101470609 -0400 @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary If -Djava.system.class.loader=xxx is specified in command-line, disable archived non-system classes + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @compile test-classes/TestClassLoader.java + * @compile test-classes/ReportMyLoader.java + * @compile test-classes/TrySwitchMyLoader.java + * @run driver SpecifySysLoaderProp + */ + +import java.io.*; +import jdk.test.lib.process.OutputAnalyzer; + +public class SpecifySysLoaderProp { + + public static void main(String[] args) throws Exception { + JarBuilder.build("sysloader", "TestClassLoader", "ReportMyLoader", "TrySwitchMyLoader"); + + String jarFileName = "sysloader.jar"; + String appJar = TestCommon.getTestJar(jarFileName); + TestCommon.testDump(appJar, TestCommon.list("ReportMyLoader")); + String warning = "VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified"; + + + // (0) Baseline. Do not specify -Djava.system.class.loader + // The test class should be loaded from archive + TestCommon.run( + "-verbose:class", + "-cp", appJar, + "ReportMyLoader") + .assertNormalExit("[class,load] ReportMyLoader source: shared objects file", + "ReportMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@"); + + // (1) Try to execute the archive with -Djava.system.class.loader=no.such.Klass, + // it should fail + TestCommon.run( + "-cp", appJar, + "-Djava.system.class.loader=no.such.Klass", + "ReportMyLoader") + .assertAbnormalExit(output -> { + output.shouldContain(warning); + output.shouldContain("ClassNotFoundException: no.such.Klass"); + }); + + // (2) Try to execute the archive with -Djava.system.class.loader=TestClassLoader, + // it should run, but archived non-system classes should be disabled + TestCommon.run( + "-verbose:class", + "-cp", appJar, + "-Djava.system.class.loader=TestClassLoader", + "ReportMyLoader") + .assertNormalExit("ReportMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@", //<-this is still printed because TestClassLoader simply delegates to Launcher$AppLoader, but ... + "TestClassLoader.called = true", //<-but this proves that TestClassLoader was indeed called. + "TestClassLoader: loadClass(\"ReportMyLoader\",") //<- this also proves that TestClassLoader was indeed called. + .assertNormalExit(output -> { + output.shouldMatch(".class,load. TestClassLoader source: file:"); + output.shouldMatch(".class,load. ReportMyLoader source: file:.*" + jarFileName); + }); + + // (3) Try to change the java.system.class.loader programmatically after + // the app's main method is executed. This should have no effect in terms of + // changing or switching the actual system class loader that's already in use. + TestCommon.run( + "-verbose:class", + "-cp", appJar, + "TrySwitchMyLoader") + .assertNormalExit("[class,load] ReportMyLoader source: shared objects file", + "TrySwitchMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@", + "ReportMyLoader's loader = jdk.internal.loader.ClassLoaders$AppClassLoader@", + "TestClassLoader.called = false"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/TestCommon.java 2019-07-24 08:26:43.761470586 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,665 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import jdk.test.lib.Utils; -import jdk.test.lib.BuildHelper; -import jdk.test.lib.JDKToolFinder; -import jdk.test.lib.Platform; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.cds.CDSTestUtils.Result; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.net.URI; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Path; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.ArrayList; -import java.util.Date; -import java.util.Enumeration; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import java.util.zip.ZipOutputStream; -import jtreg.SkippedException; -import cdsutils.DynamicDumpHelper; - - -/** - * This is a test utility class for common AppCDS test functionality. - * - * Various methods use (String ...) for passing VM options. Note that the order - * of the VM options are important in certain cases. Many methods take arguments like - * - * (String prefix[], String suffix[], String... opts) - * - * Note that the order of the VM options is: - * - * prefix + opts + suffix - */ -public class TestCommon extends CDSTestUtils { - private static final String JSA_FILE_PREFIX = System.getProperty("user.dir") + - File.separator; - - private static final SimpleDateFormat timeStampFormat = - new SimpleDateFormat("HH'h'mm'm'ss's'SSS"); - - private static final String timeoutFactor = - System.getProperty("test.timeout.factor", "1.0"); - - private static String currentArchiveName; - - // Call this method to start new archive with new unique name - public static void startNewArchiveName() { - deletePriorArchives(); - currentArchiveName = getNewArchiveName(); - } - - // Call this method to get current archive name - public static String getCurrentArchiveName() { - return currentArchiveName; - } - - public static void setCurrentArchiveName(String archiveName) { - currentArchiveName = archiveName; - } - - public static String getNewArchiveName() { - return getNewArchiveName(null); - } - - public static String getNewArchiveName(String stem) { - if (stem == null) { - stem = "appcds"; - } - return JSA_FILE_PREFIX + stem + "-" + - timeStampFormat.format(new Date()) + ".jsa"; - } - - // Attempt to clean old archives to preserve space - // Archives are large artifacts (20Mb or more), and much larger than - // most other artifacts created in jtreg testing. - // Therefore it is a good idea to clean the old archives when they are not needed. - // In most cases the deletion attempt will succeed; on rare occasion the - // delete operation will fail since the system or VM process still holds a handle - // to the file; in such cases the File.delete() operation will silently fail, w/o - // throwing an exception, thus allowing testing to continue. - public static void deletePriorArchives() { - File dir = new File(System.getProperty("user.dir")); - String files[] = dir.list(); - for (String name : files) { - if (name.startsWith("appcds-") && name.endsWith(".jsa")) { - if (!(new File(dir, name)).delete()) - System.out.println("deletePriorArchives(): delete failed for file " + name); - } - } - } - - // Create AppCDS archive using most common args - convenience method - // Legacy name preserved for compatibility - public static OutputAnalyzer dump(String appJar, String classList[], - String... suffix) throws Exception { - return createArchive(appJar, classList, suffix); - } - - public static OutputAnalyzer dump(String appJarDir, String appJar, String classList[], - String... suffix) throws Exception { - return createArchive(appJarDir, appJar, classList, suffix); - } - - // Create AppCDS archive using most common args - convenience method - public static OutputAnalyzer createArchive(String appJar, String classList[], - String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar); - opts.setClassList(classList); - opts.addSuffix(suffix); - return createArchive(opts); - } - - public static OutputAnalyzer createArchive(String appJarDir, String appJar, String classList[], - String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar); - opts.setAppJarDir(appJarDir); - opts.setClassList(classList); - opts.addSuffix(suffix); - return createArchive(opts); - } - - // Simulate -Xshare:dump with -XX:ArchiveClassesAtExit. See comments around patchJarForDynamicDump() - private static final Class tmp = DynamicDumpHelper.class; - - // Create AppCDS archive using appcds options - public static OutputAnalyzer createArchive(AppCDSOptions opts) - throws Exception { - ArrayList cmd = new ArrayList(); - startNewArchiveName(); - - for (String p : opts.prefix) cmd.add(p); - - if (opts.appJar != null) { - cmd.add("-cp"); - cmd.add(opts.appJar); - File jf = new File(opts.appJar); - if (DYNAMIC_DUMP && !jf.isDirectory()) { - patchJarForDynamicDump(opts.appJar); - } - } else { - cmd.add("-Djava.class.path="); - } - - if (opts.archiveName == null) { - opts.archiveName = getCurrentArchiveName(); - } - - if (DYNAMIC_DUMP) { - cmd.add("-Xshare:on"); - cmd.add("-XX:ArchiveClassesAtExit=" + opts.archiveName); - - cmd.add("-Xlog:cds"); - cmd.add("-Xlog:cds+dynamic"); - boolean mainModuleSpecified = false; - boolean patchModuleSpecified = false; - for (String s : opts.suffix) { - if (s.length() == 0) { - continue; - } - if (s.equals("-m")) { - mainModuleSpecified = true; - } - if (s.startsWith("--patch-module=")) { - patchModuleSpecified = true; - } - cmd.add(s); - } - - if (opts.appJar != null) { - // classlist is supported only when we have a Jar file to patch (to insert - // cdsutils.DynamicDumpHelper) - if (opts.classList == null) { - throw new RuntimeException("test.dynamic.dump requires classList file"); - } - - if (!mainModuleSpecified && !patchModuleSpecified) { - cmd.add("cdsutils.DynamicDumpHelper"); - File classListFile = makeClassList(opts.classList); - cmd.add(classListFile.getPath()); - } - } else { - if (!mainModuleSpecified && !patchModuleSpecified) { - // If you have an empty classpath, you cannot specify a classlist! - if (opts.classList != null && opts.classList.length > 0) { - throw new RuntimeException("test.dynamic.dump not supported empty classpath with non-empty classlist"); - } - cmd.add("-version"); - } - } - } else { - // static dump - cmd.add("-Xshare:dump"); - cmd.add("-XX:SharedArchiveFile=" + opts.archiveName); - - if (opts.classList != null) { - File classListFile = makeClassList(opts.classList); - cmd.add("-XX:ExtraSharedClassListFile=" + classListFile.getPath()); - } - for (String s : opts.suffix) { - cmd.add(s); - } - } - - String[] cmdLine = cmd.toArray(new String[cmd.size()]); - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine); - if (opts.appJarDir != null) { - pb.directory(new File(opts.appJarDir)); - } - return executeAndLog(pb, "dump"); - } - - // This allows you to run the AppCDS tests with JFR enabled at runtime (though not at - // dump time, as that's uncommon for typical AppCDS users). - // - // To run in this special mode, add the following to your jtreg command-line - // -Dtest.cds.run.with.jfr=true - // - // Some AppCDS tests are not compatible with this mode. See the group - // hotspot_appcds_with_jfr in ../../TEST.ROOT for details. - private static final boolean RUN_WITH_JFR = Boolean.getBoolean("test.cds.run.with.jfr"); - // This method simulates -Xshare:dump with -XX:ArchiveClassesAtExit. This way, we - // can re-use many tests (outside of the ./dynamicArchive directory) for testing - // general features of JDK-8215311 (JEP 350: Dynamic CDS Archives). - // - // We insert the cdsutils/DynamicDumpHelper.class into the first Jar file in - // the classpath. We use this class to load all the classes specified in the classlist. - // - // There's no need to change the run-time command-line: in this special mode, two - // archives are involved. The command-line specifies only the top archive. However, - // the location of the base archive is recorded in the top archive, so it can be - // determined by the JVM at runtime start-up. - // - // To run in this special mode, specify the following in your jtreg command-line - // -Dtest.dynamic.cds.archive=true - // - // Note that some tests are not compatible with this special mode, including - // + Tests in ./dynamicArchive: these tests are specifically written for - // dynamic archive, and do not use TestCommon.createArchive(), which works - // together with patchJarForDynamicDump(). - // + Tests related to cached objects and shared strings: dynamic dumping - // does not support these. - // + Custom loader tests: DynamicDumpHelper doesn't support the required - // classlist syntax. (FIXME). - // + Extra symbols and extra strings. - // See the hotspot_appcds_dynamic in ../../TEST.ROOT for details. - // - // To run all tests that are compatible with this mode: - // cd test/hotspot/jtreg - // jtreg -Dtest.dynamic.cds.archive=true :hotspot_appcds_dynamic - // - private static void patchJarForDynamicDump(String cp) throws Exception { - System.out.println("patchJarForDynamicDump: classpath = " + cp); - String firstJar = cp; - int n = firstJar.indexOf(File.pathSeparator); - if (n > 0) { - firstJar = firstJar.substring(0, n); - } - String classDir = System.getProperty("test.classes"); - String expected1 = classDir + File.separator; - String expected2 = System.getProperty("user.dir") + File.separator; - - if (!firstJar.startsWith(expected1) && !firstJar.startsWith(expected2)) { - throw new RuntimeException("FIXME: jar file not at a supported location ('" - + expected1 + "', or '" + expected2 + "'): " + firstJar); - } - - String replaceJar = firstJar + ".tmp"; - String patchClass = "cdsutils/DynamicDumpHelper.class"; - ZipFile zipFile = new ZipFile(firstJar); - byte[] buf = new byte[1024]; - int len; - if (zipFile.getEntry(patchClass) == null) { - FileOutputStream fout = new FileOutputStream(replaceJar); - final ZipOutputStream zos = new ZipOutputStream(fout); - - zos.putNextEntry(new ZipEntry(patchClass)); - InputStream is = new FileInputStream(classDir + File.separator + patchClass); - while ((len = (is.read(buf))) > 0) { - zos.write(buf, 0, len); - } - zos.closeEntry(); - is.close(); - - for (Enumeration e = zipFile.entries(); e.hasMoreElements(); ) { - ZipEntry entryIn = (ZipEntry) e.nextElement(); - zos.putNextEntry(entryIn); - is = zipFile.getInputStream(entryIn); - while ((len = is.read(buf)) > 0) { - zos.write(buf, 0, len); - } - zos.closeEntry(); - is.close(); - } - - zos.close(); - fout.close(); - zipFile.close(); - - File oldFile = new File(firstJar); - File newFile = new File(replaceJar); - oldFile.delete(); - newFile.renameTo(oldFile); - System.out.println("firstJar = " + firstJar + " Modified"); - } else { - System.out.println("firstJar = " + firstJar); - } - } - - // Execute JVM using AppCDS archive with specified AppCDSOptions - public static OutputAnalyzer runWithArchive(AppCDSOptions opts) - throws Exception { - - ArrayList cmd = new ArrayList(); - - for (String p : opts.prefix) cmd.add(p); - - cmd.add("-Xshare:" + opts.xShareMode); - cmd.add("-showversion"); - cmd.add("-XX:SharedArchiveFile=" + getCurrentArchiveName()); - cmd.add("-Dtest.timeout.factor=" + timeoutFactor); - - if (opts.appJar != null) { - cmd.add("-cp"); - cmd.add(opts.appJar); - } - - for (String s : opts.suffix) cmd.add(s); - - if (RUN_WITH_JFR) { - boolean usesJFR = false; - for (String s : cmd) { - if (s.startsWith("-XX:StartFlightRecording=") || s.startsWith("-XX:FlightRecorderOptions")) { - System.out.println("JFR option might have been specified. Don't interfere: " + s); - usesJFR = true; - break; - } - } - if (!usesJFR) { - System.out.println("JFR option not specified. Enabling JFR ..."); - cmd.add(0, "-XX:StartFlightRecording=dumponexit=true"); - System.out.println(cmd); - } - } - - String[] cmdLine = cmd.toArray(new String[cmd.size()]); - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine); - if (opts.appJarDir != null) { - pb.directory(new File(opts.appJarDir)); - } - return executeAndLog(pb, "exec"); - } - - - public static OutputAnalyzer execCommon(String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()); - opts.addSuffix(suffix); - return runWithArchive(opts); - } - - // This is the new API for running a Java process with CDS enabled. - // See comments in the CDSTestUtils.Result class for how to use this method. - public static Result run(String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()); - opts.addSuffix(suffix); - return new Result(opts, runWithArchive(opts)); - } - - public static Result runWithRelativePath(String jarDir, String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()); - opts.setAppJarDir(jarDir); - opts.addSuffix(suffix); - return new Result(opts, runWithArchive(opts)); - } - - public static OutputAnalyzer exec(String appJar, String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar); - opts.addSuffix(suffix); - return runWithArchive(opts); - } - - public static Result runWithModules(String prefix[], String upgrademodulepath, String modulepath, - String mid, String... testClassArgs) throws Exception { - AppCDSOptions opts = makeModuleOptions(prefix, upgrademodulepath, modulepath, - mid, testClassArgs); - return new Result(opts, runWithArchive(opts)); - } - - public static OutputAnalyzer execAuto(String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()); - opts.addSuffix(suffix).setXShareMode("auto"); - return runWithArchive(opts); - } - - public static OutputAnalyzer execOff(String... suffix) throws Exception { - AppCDSOptions opts = (new AppCDSOptions()); - opts.addSuffix(suffix).setXShareMode("off"); - return runWithArchive(opts); - } - - - private static AppCDSOptions makeModuleOptions(String prefix[], String upgrademodulepath, String modulepath, - String mid, String testClassArgs[]) { - AppCDSOptions opts = (new AppCDSOptions()); - - opts.addPrefix(prefix); - if (upgrademodulepath == null) { - opts.addSuffix("-p", modulepath, "-m", mid); - } else { - opts.addSuffix("--upgrade-module-path", upgrademodulepath, - "-p", modulepath, "-m", mid); - } - opts.addSuffix(testClassArgs); - return opts; - } - - public static OutputAnalyzer execModule(String prefix[], String upgrademodulepath, String modulepath, - String mid, String... testClassArgs) - throws Exception { - AppCDSOptions opts = makeModuleOptions(prefix, upgrademodulepath, modulepath, - mid, testClassArgs); - return runWithArchive(opts); - } - - // A common operation: dump, then check results - public static OutputAnalyzer testDump(String appJar, String classList[], - String... suffix) throws Exception { - OutputAnalyzer output = dump(appJar, classList, suffix); - if (DYNAMIC_DUMP) { - if (isUnableToMap(output)) { - throw new SkippedException(UnableToMapMsg); - } - output.shouldContain("Written dynamic archive"); - } else { - output.shouldContain("Loading classes to share"); - } - output.shouldHaveExitValue(0); - return output; - } - - public static OutputAnalyzer testDump(String appJarDir, String appJar, String classList[], - String... suffix) throws Exception { - OutputAnalyzer output = dump(appJarDir, appJar, classList, suffix); - if (DYNAMIC_DUMP) { - if (isUnableToMap(output)) { - throw new SkippedException(UnableToMapMsg); - } - output.shouldContain("Written dynamic archive"); - } else { - output.shouldContain("Loading classes to share"); - } - output.shouldHaveExitValue(0); - return output; - } - - /** - * Simple test -- dump and execute appJar with the given classList in classlist. - */ - public static OutputAnalyzer test(String appJar, String classList[], String... args) - throws Exception { - testDump(appJar, classList); - - OutputAnalyzer output = exec(appJar, args); - return checkExec(output); - } - - - public static OutputAnalyzer checkExecReturn(OutputAnalyzer output, int ret, - boolean checkContain, String... matches) throws Exception { - try { - for (String s : matches) { - if (checkContain) { - output.shouldContain(s); - } else { - output.shouldNotContain(s); - } - } - output.shouldHaveExitValue(ret); - } catch (Exception e) { - checkCommonExecExceptions(output, e); - } - - return output; - } - - // Convenience concatenation utils - public static String[] list(String ...args) { - return args; - } - - - public static String[] list(String arg, int count) { - ArrayList stringList = new ArrayList(); - for (int i = 0; i < count; i++) { - stringList.add(arg); - } - - String outputArray[] = stringList.toArray(new String[stringList.size()]); - return outputArray; - } - - - public static String[] concat(String... args) { - return list(args); - } - - - public static String[] concat(String prefix[], String... extra) { - ArrayList list = new ArrayList(); - for (String s : prefix) { - list.add(s); - } - for (String s : extra) { - list.add(s); - } - - return list.toArray(new String[list.size()]); - } - - public static String[] concat(String prefix, String[] extra) { - ArrayList list = new ArrayList(); - list.add(prefix); - for (String s : extra) { - list.add(s); - } - - return list.toArray(new String[list.size()]); - } - - // ===================== Concatenate paths - public static String concatPaths(String... paths) { - String prefix = ""; - String s = ""; - for (String p : paths) { - s += prefix; - s += p; - prefix = File.pathSeparator; - } - return s; - } - - - public static String getTestJar(String jar) { - File jarFile = CDSTestUtils.getTestArtifact(jar, true); - if (!jarFile.isFile()) { - throw new RuntimeException("Not a regular file: " + jarFile.getPath()); - } - return jarFile.getPath(); - } - - - public static String getTestDir(String d) { - File dirFile = CDSTestUtils.getTestArtifact(d, true); - if (!dirFile.isDirectory()) { - throw new RuntimeException("Not a directory: " + dirFile.getPath()); - } - return dirFile.getPath(); - } - - public static boolean checkOutputStrings(String outputString1, - String outputString2, - String split_regex) { - String[] sa1 = outputString1.split(split_regex); - String[] sa2 = outputString2.split(split_regex); - Arrays.sort(sa1); - Arrays.sort(sa2); - - int i = 0; - for (String s : sa1) { - if (!s.equals(sa2[i])) { - throw new RuntimeException(s + " is different from " + sa2[i]); - } - i ++; - } - return true; - } - - static Pattern pattern; - - static void findAllClasses(ArrayList list) throws Throwable { - // Find all the classes in the jrt file system - pattern = Pattern.compile("/modules/[a-z.]*[a-z]+/([^-]*)[.]class"); - FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/")); - Path base = fs.getPath("/modules/"); - findAllClassesAtPath(base, list); - } - - private static void findAllClassesAtPath(Path p, ArrayList list) throws Throwable { - try (DirectoryStream stream = Files.newDirectoryStream(p)) { - for (Path entry: stream) { - Matcher matcher = pattern.matcher(entry.toString()); - if (matcher.find()) { - String className = matcher.group(1); - list.add(className); - } - try { - findAllClassesAtPath(entry, list); - } catch (Throwable t) {} - } - } - } - - public static String composeRelPath(String appJar) { - int idx = appJar.lastIndexOf(File.separator); - String jarName = appJar.substring(idx + 1); - String jarDir = appJar.substring(0, idx); - String lastDir = jarDir.substring(jarDir.lastIndexOf(File.separator)); - String relPath = jarDir + File.separator + ".." + File.separator + lastDir; - String newJar = relPath + File.separator + jarName; - return newJar; - } - - - public static File createSymLink(String appJar) throws Exception { - int idx = appJar.lastIndexOf(File.separator); - String jarName = appJar.substring(idx + 1); - String jarDir = appJar.substring(0, idx); - File origJar = new File(jarDir, jarName); - String linkedJarName = "linked_" + jarName; - File linkedJar = null; - if (!Platform.isWindows()) { - linkedJar = new File(jarDir, linkedJarName); - if (linkedJar.exists()) { - linkedJar.delete(); - } - Files.createSymbolicLink(linkedJar.toPath(), origJar.toPath()); - } - return linkedJar; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/TestCommon.java 2019-07-24 08:26:43.449470597 -0400 @@ -0,0 +1,665 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import jdk.test.lib.Utils; +import jdk.test.lib.BuildHelper; +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.Platform; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.cds.CDSTestUtils.Result; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.net.URI; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Date; +import java.util.Enumeration; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; +import jtreg.SkippedException; +import cdsutils.DynamicDumpHelper; + + +/** + * This is a test utility class for common AppCDS test functionality. + * + * Various methods use (String ...) for passing VM options. Note that the order + * of the VM options are important in certain cases. Many methods take arguments like + * + * (String prefix[], String suffix[], String... opts) + * + * Note that the order of the VM options is: + * + * prefix + opts + suffix + */ +public class TestCommon extends CDSTestUtils { + private static final String JSA_FILE_PREFIX = System.getProperty("user.dir") + + File.separator; + + private static final SimpleDateFormat timeStampFormat = + new SimpleDateFormat("HH'h'mm'm'ss's'SSS"); + + private static final String timeoutFactor = + System.getProperty("test.timeout.factor", "1.0"); + + private static String currentArchiveName; + + // Call this method to start new archive with new unique name + public static void startNewArchiveName() { + deletePriorArchives(); + currentArchiveName = getNewArchiveName(); + } + + // Call this method to get current archive name + public static String getCurrentArchiveName() { + return currentArchiveName; + } + + public static void setCurrentArchiveName(String archiveName) { + currentArchiveName = archiveName; + } + + public static String getNewArchiveName() { + return getNewArchiveName(null); + } + + public static String getNewArchiveName(String stem) { + if (stem == null) { + stem = "appcds"; + } + return JSA_FILE_PREFIX + stem + "-" + + timeStampFormat.format(new Date()) + ".jsa"; + } + + // Attempt to clean old archives to preserve space + // Archives are large artifacts (20Mb or more), and much larger than + // most other artifacts created in jtreg testing. + // Therefore it is a good idea to clean the old archives when they are not needed. + // In most cases the deletion attempt will succeed; on rare occasion the + // delete operation will fail since the system or VM process still holds a handle + // to the file; in such cases the File.delete() operation will silently fail, w/o + // throwing an exception, thus allowing testing to continue. + public static void deletePriorArchives() { + File dir = new File(System.getProperty("user.dir")); + String files[] = dir.list(); + for (String name : files) { + if (name.startsWith("appcds-") && name.endsWith(".jsa")) { + if (!(new File(dir, name)).delete()) + System.out.println("deletePriorArchives(): delete failed for file " + name); + } + } + } + + // Create AppCDS archive using most common args - convenience method + // Legacy name preserved for compatibility + public static OutputAnalyzer dump(String appJar, String classList[], + String... suffix) throws Exception { + return createArchive(appJar, classList, suffix); + } + + public static OutputAnalyzer dump(String appJarDir, String appJar, String classList[], + String... suffix) throws Exception { + return createArchive(appJarDir, appJar, classList, suffix); + } + + // Create AppCDS archive using most common args - convenience method + public static OutputAnalyzer createArchive(String appJar, String classList[], + String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar); + opts.setClassList(classList); + opts.addSuffix(suffix); + return createArchive(opts); + } + + public static OutputAnalyzer createArchive(String appJarDir, String appJar, String classList[], + String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar); + opts.setAppJarDir(appJarDir); + opts.setClassList(classList); + opts.addSuffix(suffix); + return createArchive(opts); + } + + // Simulate -Xshare:dump with -XX:ArchiveClassesAtExit. See comments around patchJarForDynamicDump() + private static final Class tmp = DynamicDumpHelper.class; + + // Create AppCDS archive using appcds options + public static OutputAnalyzer createArchive(AppCDSOptions opts) + throws Exception { + ArrayList cmd = new ArrayList(); + startNewArchiveName(); + + for (String p : opts.prefix) cmd.add(p); + + if (opts.appJar != null) { + cmd.add("-cp"); + cmd.add(opts.appJar); + File jf = new File(opts.appJar); + if (DYNAMIC_DUMP && !jf.isDirectory()) { + patchJarForDynamicDump(opts.appJar); + } + } else { + cmd.add("-Djava.class.path="); + } + + if (opts.archiveName == null) { + opts.archiveName = getCurrentArchiveName(); + } + + if (DYNAMIC_DUMP) { + cmd.add("-Xshare:on"); + cmd.add("-XX:ArchiveClassesAtExit=" + opts.archiveName); + + cmd.add("-Xlog:cds"); + cmd.add("-Xlog:cds+dynamic"); + boolean mainModuleSpecified = false; + boolean patchModuleSpecified = false; + for (String s : opts.suffix) { + if (s.length() == 0) { + continue; + } + if (s.equals("-m")) { + mainModuleSpecified = true; + } + if (s.startsWith("--patch-module=")) { + patchModuleSpecified = true; + } + cmd.add(s); + } + + if (opts.appJar != null) { + // classlist is supported only when we have a Jar file to patch (to insert + // cdsutils.DynamicDumpHelper) + if (opts.classList == null) { + throw new RuntimeException("test.dynamic.dump requires classList file"); + } + + if (!mainModuleSpecified && !patchModuleSpecified) { + cmd.add("cdsutils.DynamicDumpHelper"); + File classListFile = makeClassList(opts.classList); + cmd.add(classListFile.getPath()); + } + } else { + if (!mainModuleSpecified && !patchModuleSpecified) { + // If you have an empty classpath, you cannot specify a classlist! + if (opts.classList != null && opts.classList.length > 0) { + throw new RuntimeException("test.dynamic.dump not supported empty classpath with non-empty classlist"); + } + cmd.add("-version"); + } + } + } else { + // static dump + cmd.add("-Xshare:dump"); + cmd.add("-XX:SharedArchiveFile=" + opts.archiveName); + + if (opts.classList != null) { + File classListFile = makeClassList(opts.classList); + cmd.add("-XX:ExtraSharedClassListFile=" + classListFile.getPath()); + } + for (String s : opts.suffix) { + cmd.add(s); + } + } + + String[] cmdLine = cmd.toArray(new String[cmd.size()]); + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine); + if (opts.appJarDir != null) { + pb.directory(new File(opts.appJarDir)); + } + return executeAndLog(pb, "dump"); + } + + // This allows you to run the AppCDS tests with JFR enabled at runtime (though not at + // dump time, as that's uncommon for typical AppCDS users). + // + // To run in this special mode, add the following to your jtreg command-line + // -Dtest.cds.run.with.jfr=true + // + // Some AppCDS tests are not compatible with this mode. See the group + // hotspot_appcds_with_jfr in ../../TEST.ROOT for details. + private static final boolean RUN_WITH_JFR = Boolean.getBoolean("test.cds.run.with.jfr"); + // This method simulates -Xshare:dump with -XX:ArchiveClassesAtExit. This way, we + // can re-use many tests (outside of the ./dynamicArchive directory) for testing + // general features of JDK-8215311 (JEP 350: Dynamic CDS Archives). + // + // We insert the cdsutils/DynamicDumpHelper.class into the first Jar file in + // the classpath. We use this class to load all the classes specified in the classlist. + // + // There's no need to change the run-time command-line: in this special mode, two + // archives are involved. The command-line specifies only the top archive. However, + // the location of the base archive is recorded in the top archive, so it can be + // determined by the JVM at runtime start-up. + // + // To run in this special mode, specify the following in your jtreg command-line + // -Dtest.dynamic.cds.archive=true + // + // Note that some tests are not compatible with this special mode, including + // + Tests in ./dynamicArchive: these tests are specifically written for + // dynamic archive, and do not use TestCommon.createArchive(), which works + // together with patchJarForDynamicDump(). + // + Tests related to cached objects and shared strings: dynamic dumping + // does not support these. + // + Custom loader tests: DynamicDumpHelper doesn't support the required + // classlist syntax. (FIXME). + // + Extra symbols and extra strings. + // See the hotspot_appcds_dynamic in ../../TEST.ROOT for details. + // + // To run all tests that are compatible with this mode: + // cd test/hotspot/jtreg + // jtreg -Dtest.dynamic.cds.archive=true :hotspot_appcds_dynamic + // + private static void patchJarForDynamicDump(String cp) throws Exception { + System.out.println("patchJarForDynamicDump: classpath = " + cp); + String firstJar = cp; + int n = firstJar.indexOf(File.pathSeparator); + if (n > 0) { + firstJar = firstJar.substring(0, n); + } + String classDir = System.getProperty("test.classes"); + String expected1 = classDir + File.separator; + String expected2 = System.getProperty("user.dir") + File.separator; + + if (!firstJar.startsWith(expected1) && !firstJar.startsWith(expected2)) { + throw new RuntimeException("FIXME: jar file not at a supported location ('" + + expected1 + "', or '" + expected2 + "'): " + firstJar); + } + + String replaceJar = firstJar + ".tmp"; + String patchClass = "cdsutils/DynamicDumpHelper.class"; + ZipFile zipFile = new ZipFile(firstJar); + byte[] buf = new byte[1024]; + int len; + if (zipFile.getEntry(patchClass) == null) { + FileOutputStream fout = new FileOutputStream(replaceJar); + final ZipOutputStream zos = new ZipOutputStream(fout); + + zos.putNextEntry(new ZipEntry(patchClass)); + InputStream is = new FileInputStream(classDir + File.separator + patchClass); + while ((len = (is.read(buf))) > 0) { + zos.write(buf, 0, len); + } + zos.closeEntry(); + is.close(); + + for (Enumeration e = zipFile.entries(); e.hasMoreElements(); ) { + ZipEntry entryIn = (ZipEntry) e.nextElement(); + zos.putNextEntry(entryIn); + is = zipFile.getInputStream(entryIn); + while ((len = is.read(buf)) > 0) { + zos.write(buf, 0, len); + } + zos.closeEntry(); + is.close(); + } + + zos.close(); + fout.close(); + zipFile.close(); + + File oldFile = new File(firstJar); + File newFile = new File(replaceJar); + oldFile.delete(); + newFile.renameTo(oldFile); + System.out.println("firstJar = " + firstJar + " Modified"); + } else { + System.out.println("firstJar = " + firstJar); + } + } + + // Execute JVM using AppCDS archive with specified AppCDSOptions + public static OutputAnalyzer runWithArchive(AppCDSOptions opts) + throws Exception { + + ArrayList cmd = new ArrayList(); + + for (String p : opts.prefix) cmd.add(p); + + cmd.add("-Xshare:" + opts.xShareMode); + cmd.add("-showversion"); + cmd.add("-XX:SharedArchiveFile=" + getCurrentArchiveName()); + cmd.add("-Dtest.timeout.factor=" + timeoutFactor); + + if (opts.appJar != null) { + cmd.add("-cp"); + cmd.add(opts.appJar); + } + + for (String s : opts.suffix) cmd.add(s); + + if (RUN_WITH_JFR) { + boolean usesJFR = false; + for (String s : cmd) { + if (s.startsWith("-XX:StartFlightRecording=") || s.startsWith("-XX:FlightRecorderOptions")) { + System.out.println("JFR option might have been specified. Don't interfere: " + s); + usesJFR = true; + break; + } + } + if (!usesJFR) { + System.out.println("JFR option not specified. Enabling JFR ..."); + cmd.add(0, "-XX:StartFlightRecording=dumponexit=true"); + System.out.println(cmd); + } + } + + String[] cmdLine = cmd.toArray(new String[cmd.size()]); + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine); + if (opts.appJarDir != null) { + pb.directory(new File(opts.appJarDir)); + } + return executeAndLog(pb, "exec"); + } + + + public static OutputAnalyzer execCommon(String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()); + opts.addSuffix(suffix); + return runWithArchive(opts); + } + + // This is the new API for running a Java process with CDS enabled. + // See comments in the CDSTestUtils.Result class for how to use this method. + public static Result run(String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()); + opts.addSuffix(suffix); + return new Result(opts, runWithArchive(opts)); + } + + public static Result runWithRelativePath(String jarDir, String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()); + opts.setAppJarDir(jarDir); + opts.addSuffix(suffix); + return new Result(opts, runWithArchive(opts)); + } + + public static OutputAnalyzer exec(String appJar, String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar); + opts.addSuffix(suffix); + return runWithArchive(opts); + } + + public static Result runWithModules(String prefix[], String upgrademodulepath, String modulepath, + String mid, String... testClassArgs) throws Exception { + AppCDSOptions opts = makeModuleOptions(prefix, upgrademodulepath, modulepath, + mid, testClassArgs); + return new Result(opts, runWithArchive(opts)); + } + + public static OutputAnalyzer execAuto(String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()); + opts.addSuffix(suffix).setXShareMode("auto"); + return runWithArchive(opts); + } + + public static OutputAnalyzer execOff(String... suffix) throws Exception { + AppCDSOptions opts = (new AppCDSOptions()); + opts.addSuffix(suffix).setXShareMode("off"); + return runWithArchive(opts); + } + + + private static AppCDSOptions makeModuleOptions(String prefix[], String upgrademodulepath, String modulepath, + String mid, String testClassArgs[]) { + AppCDSOptions opts = (new AppCDSOptions()); + + opts.addPrefix(prefix); + if (upgrademodulepath == null) { + opts.addSuffix("-p", modulepath, "-m", mid); + } else { + opts.addSuffix("--upgrade-module-path", upgrademodulepath, + "-p", modulepath, "-m", mid); + } + opts.addSuffix(testClassArgs); + return opts; + } + + public static OutputAnalyzer execModule(String prefix[], String upgrademodulepath, String modulepath, + String mid, String... testClassArgs) + throws Exception { + AppCDSOptions opts = makeModuleOptions(prefix, upgrademodulepath, modulepath, + mid, testClassArgs); + return runWithArchive(opts); + } + + // A common operation: dump, then check results + public static OutputAnalyzer testDump(String appJar, String classList[], + String... suffix) throws Exception { + OutputAnalyzer output = dump(appJar, classList, suffix); + if (DYNAMIC_DUMP) { + if (isUnableToMap(output)) { + throw new SkippedException(UnableToMapMsg); + } + output.shouldContain("Written dynamic archive"); + } else { + output.shouldContain("Loading classes to share"); + } + output.shouldHaveExitValue(0); + return output; + } + + public static OutputAnalyzer testDump(String appJarDir, String appJar, String classList[], + String... suffix) throws Exception { + OutputAnalyzer output = dump(appJarDir, appJar, classList, suffix); + if (DYNAMIC_DUMP) { + if (isUnableToMap(output)) { + throw new SkippedException(UnableToMapMsg); + } + output.shouldContain("Written dynamic archive"); + } else { + output.shouldContain("Loading classes to share"); + } + output.shouldHaveExitValue(0); + return output; + } + + /** + * Simple test -- dump and execute appJar with the given classList in classlist. + */ + public static OutputAnalyzer test(String appJar, String classList[], String... args) + throws Exception { + testDump(appJar, classList); + + OutputAnalyzer output = exec(appJar, args); + return checkExec(output); + } + + + public static OutputAnalyzer checkExecReturn(OutputAnalyzer output, int ret, + boolean checkContain, String... matches) throws Exception { + try { + for (String s : matches) { + if (checkContain) { + output.shouldContain(s); + } else { + output.shouldNotContain(s); + } + } + output.shouldHaveExitValue(ret); + } catch (Exception e) { + checkCommonExecExceptions(output, e); + } + + return output; + } + + // Convenience concatenation utils + public static String[] list(String ...args) { + return args; + } + + + public static String[] list(String arg, int count) { + ArrayList stringList = new ArrayList(); + for (int i = 0; i < count; i++) { + stringList.add(arg); + } + + String outputArray[] = stringList.toArray(new String[stringList.size()]); + return outputArray; + } + + + public static String[] concat(String... args) { + return list(args); + } + + + public static String[] concat(String prefix[], String... extra) { + ArrayList list = new ArrayList(); + for (String s : prefix) { + list.add(s); + } + for (String s : extra) { + list.add(s); + } + + return list.toArray(new String[list.size()]); + } + + public static String[] concat(String prefix, String[] extra) { + ArrayList list = new ArrayList(); + list.add(prefix); + for (String s : extra) { + list.add(s); + } + + return list.toArray(new String[list.size()]); + } + + // ===================== Concatenate paths + public static String concatPaths(String... paths) { + String prefix = ""; + String s = ""; + for (String p : paths) { + s += prefix; + s += p; + prefix = File.pathSeparator; + } + return s; + } + + + public static String getTestJar(String jar) { + File jarFile = CDSTestUtils.getTestArtifact(jar, true); + if (!jarFile.isFile()) { + throw new RuntimeException("Not a regular file: " + jarFile.getPath()); + } + return jarFile.getPath(); + } + + + public static String getTestDir(String d) { + File dirFile = CDSTestUtils.getTestArtifact(d, true); + if (!dirFile.isDirectory()) { + throw new RuntimeException("Not a directory: " + dirFile.getPath()); + } + return dirFile.getPath(); + } + + public static boolean checkOutputStrings(String outputString1, + String outputString2, + String split_regex) { + String[] sa1 = outputString1.split(split_regex); + String[] sa2 = outputString2.split(split_regex); + Arrays.sort(sa1); + Arrays.sort(sa2); + + int i = 0; + for (String s : sa1) { + if (!s.equals(sa2[i])) { + throw new RuntimeException(s + " is different from " + sa2[i]); + } + i ++; + } + return true; + } + + static Pattern pattern; + + static void findAllClasses(ArrayList list) throws Throwable { + // Find all the classes in the jrt file system + pattern = Pattern.compile("/modules/[a-z.]*[a-z]+/([^-]*)[.]class"); + FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/")); + Path base = fs.getPath("/modules/"); + findAllClassesAtPath(base, list); + } + + private static void findAllClassesAtPath(Path p, ArrayList list) throws Throwable { + try (DirectoryStream stream = Files.newDirectoryStream(p)) { + for (Path entry: stream) { + Matcher matcher = pattern.matcher(entry.toString()); + if (matcher.find()) { + String className = matcher.group(1); + list.add(className); + } + try { + findAllClassesAtPath(entry, list); + } catch (Throwable t) {} + } + } + } + + public static String composeRelPath(String appJar) { + int idx = appJar.lastIndexOf(File.separator); + String jarName = appJar.substring(idx + 1); + String jarDir = appJar.substring(0, idx); + String lastDir = jarDir.substring(jarDir.lastIndexOf(File.separator)); + String relPath = jarDir + File.separator + ".." + File.separator + lastDir; + String newJar = relPath + File.separator + jarName; + return newJar; + } + + + public static File createSymLink(String appJar) throws Exception { + int idx = appJar.lastIndexOf(File.separator); + String jarName = appJar.substring(idx + 1); + String jarDir = appJar.substring(0, idx); + File origJar = new File(jarDir, jarName); + String linkedJarName = "linked_" + jarName; + File linkedJar = null; + if (!Platform.isWindows()) { + linkedJar = new File(jarDir, linkedJarName); + if (linkedJar.exists()) { + linkedJar.delete(); + } + Files.createSymbolicLink(linkedJar.toPath(), origJar.toPath()); + } + return linkedJar; + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/TestInterpreterMethodEntries.java 2019-07-24 08:26:44.117470574 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test InterpreterMethodEntries - * @bug 8169711 - * @summary Test interpreter method entries for intrinsics with CDS (class data sharing) - * and the intrinsic flag enabled during dump and disabled during use of the archive. - * @requires vm.cds - * @comment the test disables intrinsics, so it can't be run w/ AOT'ed java module - * @requires !vm.aot.enabled - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run driver TestInterpreterMethodEntries true false - */ - -/** - * @test InterpreterMethodEntries - * @bug 8169711 - * @summary Test interpreter method entries for intrinsics with CDS (class data sharing) - * and the intrinsic flag disabled during dump and enabled during use of the archive. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run driver TestInterpreterMethodEntries false true - */ - -import java.lang.Math; -import java.util.zip.CRC32; -import java.util.zip.CRC32C; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -public class TestInterpreterMethodEntries { - - public static void main(String[] args) throws Exception { - if (args.length > 1) { - boolean dump = Boolean.parseBoolean(args[0]); - boolean use = Boolean.parseBoolean(args[1]); - - // Dump and use shared archive with different flag combinations - dumpAndUseSharedArchive(dump ? "+" : "-", use ? "+" : "-"); - } else { - // Call intrinsified java.lang.Math::fma() - Math.fma(1.0, 2.0, 3.0); - - byte[] buffer = new byte[256]; - // Call intrinsified java.util.zip.CRC32::update() - CRC32 crc32 = new CRC32(); - crc32.update(buffer, 0, 256); - - // Call intrinsified java.util.zip.CRC32C::updateBytes(..) - CRC32C crc32c = new CRC32C(); - crc32c.update(buffer, 0, 256); - } - } - - private static void dumpAndUseSharedArchive(String dump, String use) throws Exception { - String unlock = "-XX:+UnlockDiagnosticVMOptions"; - - String dumpFMA = "-XX:" + dump + "UseFMA"; - String dumpCRC32 = "-XX:" + dump + "UseCRC32Intrinsics"; - String dumpCRC32C = "-XX:" + dump + "UseCRC32CIntrinsics"; - String useFMA = "-XX:" + use + "UseFMA"; - String useCRC32 = "-XX:" + use + "UseCRC32Intrinsics"; - String useCRC32C = "-XX:" + use + "UseCRC32CIntrinsics"; - - CDSTestUtils.createArchiveAndCheck(unlock, dumpFMA, dumpCRC32, dumpCRC32C); - - CDSOptions opts = (new CDSOptions()) - .addPrefix(unlock, useFMA, useCRC32, useCRC32C, "-showversion") - .addSuffix("TestInterpreterMethodEntries", "run") - .setUseVersion(false); - CDSTestUtils.runWithArchiveAndCheck(opts); - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/TestInterpreterMethodEntries.java 2019-07-24 08:26:43.817470584 -0400 @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test InterpreterMethodEntries + * @bug 8169711 + * @summary Test interpreter method entries for intrinsics with CDS (class data sharing) + * and the intrinsic flag enabled during dump and disabled during use of the archive. + * @requires vm.cds + * @comment the test disables intrinsics, so it can't be run w/ AOT'ed java module + * @requires !vm.aot.enabled + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver TestInterpreterMethodEntries true false + */ + +/** + * @test InterpreterMethodEntries + * @bug 8169711 + * @summary Test interpreter method entries for intrinsics with CDS (class data sharing) + * and the intrinsic flag disabled during dump and enabled during use of the archive. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver TestInterpreterMethodEntries false true + */ + +import java.lang.Math; +import java.util.zip.CRC32; +import java.util.zip.CRC32C; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class TestInterpreterMethodEntries { + + public static void main(String[] args) throws Exception { + if (args.length > 1) { + boolean dump = Boolean.parseBoolean(args[0]); + boolean use = Boolean.parseBoolean(args[1]); + + // Dump and use shared archive with different flag combinations + dumpAndUseSharedArchive(dump ? "+" : "-", use ? "+" : "-"); + } else { + // Call intrinsified java.lang.Math::fma() + Math.fma(1.0, 2.0, 3.0); + + byte[] buffer = new byte[256]; + // Call intrinsified java.util.zip.CRC32::update() + CRC32 crc32 = new CRC32(); + crc32.update(buffer, 0, 256); + + // Call intrinsified java.util.zip.CRC32C::updateBytes(..) + CRC32C crc32c = new CRC32C(); + crc32c.update(buffer, 0, 256); + } + } + + private static void dumpAndUseSharedArchive(String dump, String use) throws Exception { + String unlock = "-XX:+UnlockDiagnosticVMOptions"; + + String dumpFMA = "-XX:" + dump + "UseFMA"; + String dumpCRC32 = "-XX:" + dump + "UseCRC32Intrinsics"; + String dumpCRC32C = "-XX:" + dump + "UseCRC32CIntrinsics"; + String useFMA = "-XX:" + use + "UseFMA"; + String useCRC32 = "-XX:" + use + "UseCRC32Intrinsics"; + String useCRC32C = "-XX:" + use + "UseCRC32CIntrinsics"; + + CDSTestUtils.createArchiveAndCheck(unlock, dumpFMA, dumpCRC32, dumpCRC32C); + + CDSOptions opts = (new CDSOptions()) + .addPrefix(unlock, useFMA, useCRC32, useCRC32C, "-showversion") + .addSuffix("TestInterpreterMethodEntries", "run") + .setUseVersion(false); + CDSTestUtils.runWithArchiveAndCheck(opts); + } +} + --- old/test/hotspot/jtreg/runtime/appcds/TestWithProfiler.java 2019-07-24 08:26:44.461470562 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @bug 8145221 - * @summary After creating an AppCDS archive, run the test with the JFR profiler - * enabled, and keep calling a method in the archive in a tight loop. - * This is to test the safe handling of trampoline functions by the - * profiler. - * @requires vm.hasJFR & vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/MyThread.java - * @compile test-classes/TestWithProfilerHelper.java - * @run driver TestWithProfiler - */ - -import jdk.test.lib.BuildHelper; -import jdk.test.lib.process.OutputAnalyzer; - -public class TestWithProfiler { - public static void main(String[] args) throws Exception { - JarBuilder.build("myThread", "MyThread", "TestWithProfilerHelper"); - String appJar = TestCommon.getTestJar("myThread.jar"); - OutputAnalyzer output = TestCommon.dump(appJar, - TestCommon.list("MyThread", "TestWithProfilerHelper")); - TestCommon.checkDump(output); - output = TestCommon.exec(appJar, - "-XX:+UnlockDiagnosticVMOptions", - "-Xint", - "-XX:+FlightRecorder", - "-XX:StartFlightRecording=duration=15s,filename=myrecording.jfr,settings=profile,dumponexit=true", - "TestWithProfilerHelper"); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/TestWithProfiler.java 2019-07-24 08:26:44.177470572 -0400 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 8145221 + * @summary After creating an AppCDS archive, run the test with the JFR profiler + * enabled, and keep calling a method in the archive in a tight loop. + * This is to test the safe handling of trampoline functions by the + * profiler. + * @requires vm.hasJFR & vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/MyThread.java + * @compile test-classes/TestWithProfilerHelper.java + * @run driver TestWithProfiler + */ + +import jdk.test.lib.BuildHelper; +import jdk.test.lib.process.OutputAnalyzer; + +public class TestWithProfiler { + public static void main(String[] args) throws Exception { + JarBuilder.build("myThread", "MyThread", "TestWithProfilerHelper"); + String appJar = TestCommon.getTestJar("myThread.jar"); + OutputAnalyzer output = TestCommon.dump(appJar, + TestCommon.list("MyThread", "TestWithProfilerHelper")); + TestCommon.checkDump(output); + output = TestCommon.exec(appJar, + "-XX:+UnlockDiagnosticVMOptions", + "-Xint", + "-XX:+FlightRecorder", + "-XX:StartFlightRecording=duration=15s,filename=myrecording.jfr,settings=profile,dumponexit=true", + "TestWithProfilerHelper"); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/TraceLongClasspath.java 2019-07-24 08:26:44.869470548 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary ensure -XX:+TraceClassPaths showing entire expecting app classpath - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @compile test-classes/Super.java - * @run driver TraceLongClasspath - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; - -public class TraceLongClasspath { - - final static String ps = File.pathSeparator; - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String dummyJar = JarBuilder.build("dummy", "Super"); - - String longClassPath = - dummyJar + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/user-patch.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/abc-startup.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/features/com.foobar.db.jdbc7-dms.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/jdk/lib/tools.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/server/lib/someapps.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/../foobar_common/modules/net.xy.batcontrib_1.1.0.0_1-0b3/lib/bat-contrib.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/modules/features/foobar.aas.common.kkkkkkkkkkk.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.common.adapters_11.1.1/foobar.abc.common.adapters.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.plane.adapter_12.1.3/foobar.plane.adapter.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/lib/ccccccccar-common.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/communications/modules/config.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/communications/modules/userprefs-config.jar" + ps + - "/scratch/xxxx/yyyy/XXXXXX/aaaaaaaa/xxxxxxx/xxxxxxxx.us.foobar.com/CommonDomain/config/abc-infra" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/qqqqqq-all-1.6.5.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.thread_11.1.1/foobar.abc.thread.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.thread_11.1.1/thread-rrrrrrr-ext-aas.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.adapter_11.1.1/foobar.abc.adapter.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.ccc_11.1.1/foobar.abc.ccc.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/bbb/lib/commons-configuration.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/bbb/lib/commons-lang.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/bbb/lib/commons-logging.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/foobar.wccore/foobar-ppppppp-api.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/foobar.ooo_12.1.3/ooo-manifest.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/internal/features/rrr_aaxyxx_foobar.rrr.aas.classpath.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.thread_11.1.1/rrrrrrrr-api.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/commons-xxx-1.1.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.mgmt_11.1.1/abc-infra-mgmt.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/eee/archives/eee-eee.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/common/march/lib/marchnet.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/common/march/lib/marchclient.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/common/march/lib/march.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/jlib/iiiloader.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/xxxxxxyyzzzzz/classes-xxxxxxyyzzzzz.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/mmmmmmm/lib/abc_core.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/mmmmmmm/lib/abc_codec.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/mmmmmmm/lib/abc_imageio.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/jdk/lib/tools.jar" + ps + - "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/foobar.ooo_12.1.3/ooo-manifest.jar"; - - String myCP = longClassPath + ps + appJar; - // Dump an archive with a specified JAR file in -classpath - TestCommon.testDump(myCP, TestCommon.list("Hello")); - - // Then try to execute the archive with a different classpath and with -XX:+TraceClassPaths. - // The diagnosis "expecting" app classpath trace should show the entire classpath. - TestCommon.run( - "-XX:+TraceClassPaths", "-Xlog:cds", - "-cp", appJar, - "Hello") - .assertAbnormalExit(output -> { - output.shouldContain("Unable to use shared archive"); - output.shouldContain("shared class paths mismatch"); - // the "expecting" app classpath from -XX:+TraceClassPaths should not - // be truncated - output.shouldContain(myCP); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/TraceLongClasspath.java 2019-07-24 08:26:44.573470558 -0400 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary ensure -XX:+TraceClassPaths showing entire expecting app classpath + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @compile test-classes/Super.java + * @run driver TraceLongClasspath + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class TraceLongClasspath { + + final static String ps = File.pathSeparator; + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String dummyJar = JarBuilder.build("dummy", "Super"); + + String longClassPath = + dummyJar + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/user-patch.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/abc-startup.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/features/com.foobar.db.jdbc7-dms.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/jdk/lib/tools.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/server/lib/someapps.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/../foobar_common/modules/net.xy.batcontrib_1.1.0.0_1-0b3/lib/bat-contrib.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/modules/features/foobar.aas.common.kkkkkkkkkkk.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.common.adapters_11.1.1/foobar.abc.common.adapters.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.plane.adapter_12.1.3/foobar.plane.adapter.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/lib/ccccccccar-common.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/communications/modules/config.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/communications/modules/userprefs-config.jar" + ps + + "/scratch/xxxx/yyyy/XXXXXX/aaaaaaaa/xxxxxxx/xxxxxxxx.us.foobar.com/CommonDomain/config/abc-infra" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/qqqqqq-all-1.6.5.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.thread_11.1.1/foobar.abc.thread.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.thread_11.1.1/thread-rrrrrrr-ext-aas.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.adapter_11.1.1/foobar.abc.adapter.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.ccc_11.1.1/foobar.abc.ccc.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/bbb/lib/commons-configuration.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/bbb/lib/commons-lang.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/bbb/lib/commons-logging.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/foobar.wccore/foobar-ppppppp-api.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/foobar.ooo_12.1.3/ooo-manifest.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/internal/features/rrr_aaxyxx_foobar.rrr.aas.classpath.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.thread_11.1.1/rrrrrrrr-api.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/commons-xxx-1.1.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/abc/abc/modules/foobar.abc.mgmt_11.1.1/abc-infra-mgmt.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/eee/archives/eee-eee.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/common/march/lib/marchnet.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/common/march/lib/marchclient.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/aaserver/common/march/lib/march.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/jlib/iiiloader.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/xxxxxxyyzzzzz/classes-xxxxxxyyzzzzz.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/mmmmmmm/lib/abc_core.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/mmmmmmm/lib/abc_codec.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/wwcontent/cde/iii/components/mmmmmmm/lib/abc_imageio.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/jdk/lib/tools.jar" + ps + + "/scratch/xxxx/yyyy/ZZZZZZ/aaaaaaaaaa/xx/foobar_common/modules/foobar.ooo_12.1.3/ooo-manifest.jar"; + + String myCP = longClassPath + ps + appJar; + // Dump an archive with a specified JAR file in -classpath + TestCommon.testDump(myCP, TestCommon.list("Hello")); + + // Then try to execute the archive with a different classpath and with -XX:+TraceClassPaths. + // The diagnosis "expecting" app classpath trace should show the entire classpath. + TestCommon.run( + "-XX:+TraceClassPaths", "-Xlog:cds", + "-cp", appJar, + "Hello") + .assertAbnormalExit(output -> { + output.shouldContain("Unable to use shared archive"); + output.shouldContain("shared class paths mismatch"); + // the "expecting" app classpath from -XX:+TraceClassPaths should not + // be truncated + output.shouldContain(myCP); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/UnusedCPDuringDump.java 2019-07-24 08:26:45.209470536 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @bug 8209385 - * @summary non-empty dir in -cp should be fine during dump time if only classes - * from the system modules are being loaded even though some are - * defined to the PlatformClassLoader and AppClassLoader. - * @requires vm.cds - * @library /test/lib - * @modules jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run main/othervm -Dtest.cds.copy.child.stdout=false UnusedCPDuringDump - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; - -public class UnusedCPDuringDump { - - public static void main(String[] args) throws Exception { - File dir = new File(System.getProperty("user.dir")); - File emptydir = new File(dir, "emptydir"); - emptydir.mkdir(); - String appJar = JarBuilder.getOrCreateHelloJar(); - - OutputAnalyzer output = TestCommon.dump(dir.getPath(), - TestCommon.list("sun/util/resources/cldr/provider/CLDRLocaleDataMetaInfo", - "com/sun/tools/sjavac/client/ClientMain"), - "-Xlog:class+path=info,class+load=debug"); - TestCommon.checkDump(output, - "[class,load] sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo", - "for instance a 'jdk/internal/loader/ClassLoaders$PlatformClassLoader'", - "[class,load] com.sun.tools.sjavac.client.ClientMain", - "for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'"); - - String jsaOpt = "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(); - TestCommon.run("-cp", appJar, jsaOpt, "-Xlog:class+path=info,class+load=debug", "Hello") - .assertNormalExit("Hello World"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/UnusedCPDuringDump.java 2019-07-24 08:26:44.921470546 -0400 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @bug 8209385 + * @summary non-empty dir in -cp should be fine during dump time if only classes + * from the system modules are being loaded even though some are + * defined to the PlatformClassLoader and AppClassLoader. + * @requires vm.cds + * @library /test/lib + * @modules jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run main/othervm -Dtest.cds.copy.child.stdout=false UnusedCPDuringDump + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class UnusedCPDuringDump { + + public static void main(String[] args) throws Exception { + File dir = new File(System.getProperty("user.dir")); + File emptydir = new File(dir, "emptydir"); + emptydir.mkdir(); + String appJar = JarBuilder.getOrCreateHelloJar(); + + OutputAnalyzer output = TestCommon.dump(dir.getPath(), + TestCommon.list("sun/util/resources/cldr/provider/CLDRLocaleDataMetaInfo", + "com/sun/tools/sjavac/client/ClientMain"), + "-Xlog:class+path=info,class+load=debug"); + TestCommon.checkDump(output, + "[class,load] sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo", + "for instance a 'jdk/internal/loader/ClassLoaders$PlatformClassLoader'", + "[class,load] com.sun.tools.sjavac.client.ClientMain", + "for instance a 'jdk/internal/loader/ClassLoaders$AppClassLoader'"); + + String jsaOpt = "-XX:SharedArchiveFile=" + TestCommon.getCurrentArchiveName(); + TestCommon.run("-cp", appJar, jsaOpt, "-Xlog:class+path=info,class+load=debug", "Hello") + .assertNormalExit("Hello World"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/UseAppCDS_Test.java 2019-07-24 08:26:45.557470524 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -public class UseAppCDS_Test { - // args are from UseAppCDS: - // args[0] = TEST_OUT - public static void main(String[] args) { - System.out.println(args[0]); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/UseAppCDS_Test.java 2019-07-24 08:26:45.249470534 -0400 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +public class UseAppCDS_Test { + // args are from UseAppCDS: + // args[0] = TEST_OUT + public static void main(String[] args) { + System.out.println(args[0]); + } +} --- old/test/hotspot/jtreg/runtime/appcds/VerifierTest.java 2019-07-24 08:26:45.957470510 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,409 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.io.FileOutputStream; -import jdk.test.lib.process.OutputAnalyzer; -import java.nio.file.Files; - -import java.util.*; -import jdk.internal.org.objectweb.asm.*; - -/** - * The testsets contained in this class are executed by ./VerifierTest_*.java, so that - * individual testsets can be executed in parallel to shorten the total time required. - */ -public class VerifierTest implements Opcodes { - // Test verification settings for dumping & runtime - static final String VFY_ALL = "-Xverify:all"; - static final String VFY_REMOTE = "-Xverify:remote"; // default - static final String VFY_NONE = "-XX:+UnlockDiagnosticVMOptions, -XX:-BytecodeVerificationRemote, -XX:-BytecodeVerificationLocal"; - - static final String ERR = - "ERROR: class VerifierTestC was loaded unexpectedly"; - static final String MAP_FAIL = - "shared archive file was created with less restrictive verification setting"; - static final String VFY_ERR = "java.lang.VerifyError"; - static final String PASS_RESULT = "Hi, how are you?"; - static final String VFY_INFO_MESSAGE = - "All non-system classes will be verified (-Xverify:remote) during CDS dump time."; - static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables"; - - enum Testset1Part { - A, B - } - - public static void main(String[] args) throws Exception { - String subCaseId = args[0]; - String jarName_verifier_test_tmp = "verifier_test_tmp" + "_" + subCaseId; - String jarName_verifier_test = "verifier_test" + "_" + subCaseId; - String jarName_greet = "greet" + "_" + subCaseId; - String jarName_hi = "hi" + "_" + subCaseId; - - - JarBuilder.build(jarName_verifier_test_tmp, "VerifierTest0", "VerifierTestA", - "VerifierTestB", "VerifierTestC", "VerifierTestD", "VerifierTestE", - "UnverifiableBase", "UnverifiableIntf", "UnverifiableIntfSub"); - JarBuilder.build(jarName_greet, "Greet"); - JarBuilder.build(jarName_hi, "Hi", "Hi$MyClass"); - - File dir = new File(System.getProperty("test.classes", ".")); - File jarSrcFile = new File(dir, jarName_verifier_test_tmp + ".jar"); - File jarFile = new File(dir, jarName_verifier_test + ".jar"); - String jar = jarFile.getPath(); - - if (!jarFile.exists() || jarFile.lastModified() < jarSrcFile.lastModified()) { - createTestJarFile(jarSrcFile, jarFile); - } else { - System.out.println("Already up-to-date: " + jarFile); - } - - String noAppClasses[] = TestCommon.list(""); - String appClasses[] = TestCommon.list("UnverifiableBase", - "UnverifiableIntf", - "UnverifiableIntfSub", - "VerifierTestA", - "VerifierTestB", - "VerifierTestC", - "VerifierTestD", - "VerifierTestE", - "VerifierTest0"); - - - switch (subCaseId) { - case "0": testset_0(jar, noAppClasses, appClasses); return; - case "1A": testset_1(jar, noAppClasses, appClasses, Testset1Part.A); return; - case "1B": testset_1(jar, noAppClasses, appClasses, Testset1Part.B); return; - case "2": testset_2(jarName_greet, jarName_hi); return; - default: - throw new RuntimeException("Unknown option: " + subCaseId); - } - } - - static void testset_0(String jar, String[] noAppClasses, String[] appClasses) throws Exception { - // Unverifiable classes won't be included in the CDS archive. - // Dumping should not fail. - OutputAnalyzer output = TestCommon.dump(jar, appClasses); - output.shouldHaveExitValue(0); - if (output.getStdout().contains("Loading clases to share")) { - // last entry in appClasses[] is a verifiable class - for (int i = 0; i < (appClasses.length - 1); i++) { - output.shouldContain("Verification failed for " + appClasses[i]); - output.shouldContain("Removed error class: " + appClasses[i]); - } - } - } - - static void checkRuntimeOutput(OutputAnalyzer output, String expected) throws Exception { - output.shouldContain(expected); - if (expected.equals(PASS_RESULT) || - expected.equals(VFY_ERR)) { - output.shouldHaveExitValue(0); - } else { - output.shouldNotHaveExitValue(0); - } - } - - static void testset_1(String jar, String[] noAppClasses, String[] appClasses, Testset1Part part) - throws Exception - { - String config[][] = { - // {dump_list, dumptime_verification_setting, - // runtime_verification_setting, expected_output_str}, - - // Dump app/ext with -Xverify:remote - {"app", VFY_REMOTE, VFY_REMOTE, VFY_ERR}, - {"app", VFY_REMOTE, VFY_ALL, MAP_FAIL}, - {"app", VFY_REMOTE, VFY_NONE, ERR }, - // Dump app/ext with -Xverify:all - {"app", VFY_ALL, VFY_REMOTE, VFY_ERR }, - {"app", VFY_ALL, VFY_ALL, VFY_ERR }, - {"app", VFY_ALL, VFY_NONE, ERR }, - // Dump app/ext with verifier turned off - {"app", VFY_NONE, VFY_REMOTE, VFY_ERR}, - {"app", VFY_NONE, VFY_ALL, MAP_FAIL}, - {"app", VFY_NONE, VFY_NONE, ERR }, - // Dump sys only with -Xverify:remote - {"noApp", VFY_REMOTE, VFY_REMOTE, VFY_ERR}, - {"noApp", VFY_REMOTE, VFY_ALL, VFY_ERR}, - {"noApp", VFY_REMOTE, VFY_NONE, ERR}, - // Dump sys only with -Xverify:all - {"noApp", VFY_ALL, VFY_REMOTE, VFY_ERR}, - {"noApp", VFY_ALL, VFY_ALL, VFY_ERR}, - {"noApp", VFY_ALL, VFY_NONE, ERR}, - // Dump sys only with verifier turned off - {"noApp", VFY_NONE, VFY_REMOTE, VFY_ERR}, - {"noApp", VFY_NONE, VFY_ALL, VFY_ERR}, - {"noApp", VFY_NONE, VFY_NONE, ERR}, - }; - - int loop_start, loop_stop; - - // Further break down testset_1 into two parts (to be invoked from VerifierTest_1A.java - // and VerifierTest_1B.java) to improve parallel test execution time. - switch (part) { - case A: - loop_start = 0; - loop_stop = 9; - break; - case B: - default: - assert part == Testset1Part.B; - loop_start = 9; - loop_stop = config.length; - break; - } - - String prev_dump_setting = ""; - for (int i = loop_start; i < loop_stop; i ++) { - String dump_list[] = config[i][0].equals("app") ? appClasses : - noAppClasses; - String dump_setting = config[i][1]; - String runtime_setting = config[i][2]; - String expected_output_str = config[i][3]; - System.out.println("Test case [" + i + "]: dumping " + config[i][0] + - " with " + dump_setting + - ", run with " + runtime_setting); - if (!dump_setting.equals(prev_dump_setting)) { - String dump_arg1; - String dump_arg2; - String dump_arg3; - // Need to break this into two separate arguments. - if (dump_setting.equals(VFY_NONE)) { - dump_arg1 = "-XX:+UnlockDiagnosticVMOptions"; - dump_arg2 = "-XX:-BytecodeVerificationRemote"; - dump_arg3 = "-XX:-BytecodeVerificationLocal"; - } else { - // Redundant args should be harmless. - dump_arg1 = dump_arg2 = dump_arg3 = dump_setting; - } - - OutputAnalyzer dumpOutput = TestCommon.dump( - jar, dump_list, dump_arg1, dump_arg2, - dump_arg3, CDS_LOGGING, - // FIXME: the following options are for working around a GC - // issue - assert failure when dumping archive with the -Xverify:all - "-Xms256m", - "-Xmx256m"); - if (dump_setting.equals(VFY_NONE) && - runtime_setting.equals(VFY_REMOTE)) { - dumpOutput.shouldContain(VFY_INFO_MESSAGE); - } - } - String runtime_arg1; - String runtime_arg2; - String runtime_arg3; - if (runtime_setting.equals(VFY_NONE)) { - runtime_arg1 = "-XX:+UnlockDiagnosticVMOptions"; - runtime_arg2 = "-XX:-BytecodeVerificationRemote"; - runtime_arg3 = "-XX:-BytecodeVerificationLocal"; - } else { - // Redundant args should be harmless. - runtime_arg1 = runtime_arg2 = runtime_arg3 = runtime_setting; - } - TestCommon.run("-cp", jar, - runtime_arg1, runtime_arg2, runtime_arg3, - "VerifierTest0") - .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str)); - prev_dump_setting = dump_setting; - } - } - - static void testset_2(String jarName_greet, String jarName_hi) throws Exception { - String appClasses[]; - String jar; - - // The following section is for testing the scenarios where - // the classes are verifiable during dump time. - appClasses = TestCommon.list("Hi", - "Greet", - "Hi$MyClass"); - jar = TestCommon.getTestJar(jarName_hi + ".jar") + File.pathSeparator + - TestCommon.getTestJar(jarName_greet + ".jar"); - String config2[][] = { - // {dump_list, dumptime_verification_setting, - // runtime_verification_setting, expected_output_str}, - - // Dump app/ext with -Xverify:remote - {"app", VFY_REMOTE, VFY_REMOTE, PASS_RESULT}, - {"app", VFY_REMOTE, VFY_ALL, MAP_FAIL}, - {"app", VFY_REMOTE, VFY_NONE, PASS_RESULT }, - // Dump app/ext with -Xverify:all - {"app", VFY_ALL, VFY_REMOTE, PASS_RESULT }, - {"app", VFY_ALL, VFY_ALL, PASS_RESULT }, - {"app", VFY_ALL, VFY_NONE, PASS_RESULT }, - // Dump app/ext with verifier turned off - {"app", VFY_NONE, VFY_REMOTE, PASS_RESULT}, - {"app", VFY_NONE, VFY_ALL, MAP_FAIL}, - {"app", VFY_NONE, VFY_NONE, PASS_RESULT }, - }; - String prev_dump_setting = ""; - for (int i = 0; i < config2.length; i ++) { - // config2[i][0] is always set to "app" in this test - String dump_setting = config2[i][1]; - String runtime_setting = config2[i][2]; - String expected_output_str = config2[i][3]; - System.out.println("Test case [" + i + "]: dumping " + config2[i][0] + - " with " + dump_setting + - ", run with " + runtime_setting); - if (!dump_setting.equals(prev_dump_setting)) { - String dump_arg1; - String dump_arg2; - String dump_arg3; - if (dump_setting.equals(VFY_NONE)) { - dump_arg1 = "-XX:+UnlockDiagnosticVMOptions"; - dump_arg2 = "-XX:-BytecodeVerificationRemote"; - dump_arg3 = "-XX:-BytecodeVerificationLocal"; - } else { - // Redundant args should be harmless. - dump_arg1 = dump_arg2 = dump_arg3 = dump_setting; - } - OutputAnalyzer dumpOutput = TestCommon.dump( - jar, appClasses, dump_arg1, dump_arg2, - dump_arg3, CDS_LOGGING, - // FIXME: the following options are for working around a GC - // issue - assert failure when dumping archive with the -Xverify:all - "-Xms256m", - "-Xmx256m"); - if (dump_setting.equals(VFY_NONE) && - runtime_setting.equals(VFY_REMOTE)) { - dumpOutput.shouldContain(VFY_INFO_MESSAGE); - } - } - String runtime_arg1; - String runtime_arg2; - String runtime_arg3; - if (runtime_setting.equals(VFY_NONE)) { - runtime_arg1 = "-XX:+UnlockDiagnosticVMOptions"; - runtime_arg2 = "-XX:-BytecodeVerificationRemote"; - runtime_arg3 = "-XX:-BytecodeVerificationLocal"; - } else { - // Redundant args should be harmless. - runtime_arg1 = runtime_arg2 = runtime_arg3 = runtime_setting; - } - TestCommon.run("-cp", jar, - runtime_arg1, runtime_arg2, runtime_arg3, - "Hi") - .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str)); - prev_dump_setting = dump_setting; - } - } - - static void createTestJarFile(File jarSrcFile, File jarFile) throws Exception { - jarFile.delete(); - Files.copy(jarSrcFile.toPath(), jarFile.toPath()); - - File dir = new File(System.getProperty("test.classes", ".")); - File outdir = new File(dir, "verifier_test_classes"); - outdir.mkdir(); - - writeClassFile(new File(outdir, "UnverifiableBase.class"), makeUnverifiableBase()); - writeClassFile(new File(outdir, "UnverifiableIntf.class"), makeUnverifiableIntf()); - - JarBuilder.update(jarFile.getPath(), outdir.getPath()); - } - - static void writeClassFile(File file, byte bytecodes[]) throws Exception { - try (FileOutputStream fos = new FileOutputStream(file)) { - fos.write(bytecodes); - } - } - - // This was obtained using JDK8: java jdk.internal.org.objectweb.asm.util.ASMifier tmpclasses/UnverifiableBase.class - static byte[] makeUnverifiableBase() throws Exception { - ClassWriter cw = new ClassWriter(0); - FieldVisitor fv; - MethodVisitor mv; - AnnotationVisitor av0; - - cw.visit(V1_8, ACC_SUPER, "UnverifiableBase", null, "java/lang/Object", null); - { - fv = cw.visitField(ACC_FINAL + ACC_STATIC, "x", "LVerifierTest;", null, null); - fv.visitEnd(); - } - { - mv = cw.visitMethod(0, "", "()V", null, null); - mv.visitCode(); - mv.visitVarInsn(ALOAD, 0); - mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V", false); - mv.visitInsn(RETURN); - mv.visitMaxs(1, 1); - mv.visitEnd(); - } - { - mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null); - mv.visitCode(); - mv.visitTypeInsn(NEW, "VerifierTest0"); - mv.visitInsn(DUP); - mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "", "()V", false); - mv.visitFieldInsn(PUTSTATIC, "UnverifiableBase", "x", "LVerifierTest;"); - mv.visitInsn(RETURN); - mv.visitMaxs(2, 0); - mv.visitEnd(); - } - addBadMethod(cw); - cw.visitEnd(); - - return cw.toByteArray(); - } - - // This was obtained using JDK8: java jdk.internal.org.objectweb.asm.util.ASMifier tmpclasses/UnverifiableIntf.class - static byte[] makeUnverifiableIntf() throws Exception { - ClassWriter cw = new ClassWriter(0); - FieldVisitor fv; - MethodVisitor mv; - AnnotationVisitor av0; - - cw.visit(V1_8, ACC_ABSTRACT + ACC_INTERFACE, "UnverifiableIntf", null, "java/lang/Object", null); - - { - fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "x", "LVerifierTest0;", null, null); - fv.visitEnd(); - } - { - mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null); - mv.visitCode(); - mv.visitTypeInsn(NEW, "VerifierTest0"); - mv.visitInsn(DUP); - mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "", "()V", false); - mv.visitFieldInsn(PUTSTATIC, "UnverifiableIntf", "x", "LVerifierTest0;"); - mv.visitInsn(RETURN); - mv.visitMaxs(2, 0); - mv.visitEnd(); - } - addBadMethod(cw); - cw.visitEnd(); - - return cw.toByteArray(); - } - - // Add a bad method to make the class fail verification. - static void addBadMethod(ClassWriter cw) throws Exception { - MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "bad", "()V", null, null); - mv.visitCode(); - mv.visitInsn(ARETURN); // java.lang.VerifyError: Operand stack underflow - mv.visitMaxs(2, 2); - mv.visitEnd(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/VerifierTest.java 2019-07-24 08:26:45.621470521 -0400 @@ -0,0 +1,409 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.io.FileOutputStream; +import jdk.test.lib.process.OutputAnalyzer; +import java.nio.file.Files; + +import java.util.*; +import jdk.internal.org.objectweb.asm.*; + +/** + * The testsets contained in this class are executed by ./VerifierTest_*.java, so that + * individual testsets can be executed in parallel to shorten the total time required. + */ +public class VerifierTest implements Opcodes { + // Test verification settings for dumping & runtime + static final String VFY_ALL = "-Xverify:all"; + static final String VFY_REMOTE = "-Xverify:remote"; // default + static final String VFY_NONE = "-XX:+UnlockDiagnosticVMOptions, -XX:-BytecodeVerificationRemote, -XX:-BytecodeVerificationLocal"; + + static final String ERR = + "ERROR: class VerifierTestC was loaded unexpectedly"; + static final String MAP_FAIL = + "shared archive file was created with less restrictive verification setting"; + static final String VFY_ERR = "java.lang.VerifyError"; + static final String PASS_RESULT = "Hi, how are you?"; + static final String VFY_INFO_MESSAGE = + "All non-system classes will be verified (-Xverify:remote) during CDS dump time."; + static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables"; + + enum Testset1Part { + A, B + } + + public static void main(String[] args) throws Exception { + String subCaseId = args[0]; + String jarName_verifier_test_tmp = "verifier_test_tmp" + "_" + subCaseId; + String jarName_verifier_test = "verifier_test" + "_" + subCaseId; + String jarName_greet = "greet" + "_" + subCaseId; + String jarName_hi = "hi" + "_" + subCaseId; + + + JarBuilder.build(jarName_verifier_test_tmp, "VerifierTest0", "VerifierTestA", + "VerifierTestB", "VerifierTestC", "VerifierTestD", "VerifierTestE", + "UnverifiableBase", "UnverifiableIntf", "UnverifiableIntfSub"); + JarBuilder.build(jarName_greet, "Greet"); + JarBuilder.build(jarName_hi, "Hi", "Hi$MyClass"); + + File dir = new File(System.getProperty("test.classes", ".")); + File jarSrcFile = new File(dir, jarName_verifier_test_tmp + ".jar"); + File jarFile = new File(dir, jarName_verifier_test + ".jar"); + String jar = jarFile.getPath(); + + if (!jarFile.exists() || jarFile.lastModified() < jarSrcFile.lastModified()) { + createTestJarFile(jarSrcFile, jarFile); + } else { + System.out.println("Already up-to-date: " + jarFile); + } + + String noAppClasses[] = TestCommon.list(""); + String appClasses[] = TestCommon.list("UnverifiableBase", + "UnverifiableIntf", + "UnverifiableIntfSub", + "VerifierTestA", + "VerifierTestB", + "VerifierTestC", + "VerifierTestD", + "VerifierTestE", + "VerifierTest0"); + + + switch (subCaseId) { + case "0": testset_0(jar, noAppClasses, appClasses); return; + case "1A": testset_1(jar, noAppClasses, appClasses, Testset1Part.A); return; + case "1B": testset_1(jar, noAppClasses, appClasses, Testset1Part.B); return; + case "2": testset_2(jarName_greet, jarName_hi); return; + default: + throw new RuntimeException("Unknown option: " + subCaseId); + } + } + + static void testset_0(String jar, String[] noAppClasses, String[] appClasses) throws Exception { + // Unverifiable classes won't be included in the CDS archive. + // Dumping should not fail. + OutputAnalyzer output = TestCommon.dump(jar, appClasses); + output.shouldHaveExitValue(0); + if (output.getStdout().contains("Loading clases to share")) { + // last entry in appClasses[] is a verifiable class + for (int i = 0; i < (appClasses.length - 1); i++) { + output.shouldContain("Verification failed for " + appClasses[i]); + output.shouldContain("Removed error class: " + appClasses[i]); + } + } + } + + static void checkRuntimeOutput(OutputAnalyzer output, String expected) throws Exception { + output.shouldContain(expected); + if (expected.equals(PASS_RESULT) || + expected.equals(VFY_ERR)) { + output.shouldHaveExitValue(0); + } else { + output.shouldNotHaveExitValue(0); + } + } + + static void testset_1(String jar, String[] noAppClasses, String[] appClasses, Testset1Part part) + throws Exception + { + String config[][] = { + // {dump_list, dumptime_verification_setting, + // runtime_verification_setting, expected_output_str}, + + // Dump app/ext with -Xverify:remote + {"app", VFY_REMOTE, VFY_REMOTE, VFY_ERR}, + {"app", VFY_REMOTE, VFY_ALL, MAP_FAIL}, + {"app", VFY_REMOTE, VFY_NONE, ERR }, + // Dump app/ext with -Xverify:all + {"app", VFY_ALL, VFY_REMOTE, VFY_ERR }, + {"app", VFY_ALL, VFY_ALL, VFY_ERR }, + {"app", VFY_ALL, VFY_NONE, ERR }, + // Dump app/ext with verifier turned off + {"app", VFY_NONE, VFY_REMOTE, VFY_ERR}, + {"app", VFY_NONE, VFY_ALL, MAP_FAIL}, + {"app", VFY_NONE, VFY_NONE, ERR }, + // Dump sys only with -Xverify:remote + {"noApp", VFY_REMOTE, VFY_REMOTE, VFY_ERR}, + {"noApp", VFY_REMOTE, VFY_ALL, VFY_ERR}, + {"noApp", VFY_REMOTE, VFY_NONE, ERR}, + // Dump sys only with -Xverify:all + {"noApp", VFY_ALL, VFY_REMOTE, VFY_ERR}, + {"noApp", VFY_ALL, VFY_ALL, VFY_ERR}, + {"noApp", VFY_ALL, VFY_NONE, ERR}, + // Dump sys only with verifier turned off + {"noApp", VFY_NONE, VFY_REMOTE, VFY_ERR}, + {"noApp", VFY_NONE, VFY_ALL, VFY_ERR}, + {"noApp", VFY_NONE, VFY_NONE, ERR}, + }; + + int loop_start, loop_stop; + + // Further break down testset_1 into two parts (to be invoked from VerifierTest_1A.java + // and VerifierTest_1B.java) to improve parallel test execution time. + switch (part) { + case A: + loop_start = 0; + loop_stop = 9; + break; + case B: + default: + assert part == Testset1Part.B; + loop_start = 9; + loop_stop = config.length; + break; + } + + String prev_dump_setting = ""; + for (int i = loop_start; i < loop_stop; i ++) { + String dump_list[] = config[i][0].equals("app") ? appClasses : + noAppClasses; + String dump_setting = config[i][1]; + String runtime_setting = config[i][2]; + String expected_output_str = config[i][3]; + System.out.println("Test case [" + i + "]: dumping " + config[i][0] + + " with " + dump_setting + + ", run with " + runtime_setting); + if (!dump_setting.equals(prev_dump_setting)) { + String dump_arg1; + String dump_arg2; + String dump_arg3; + // Need to break this into two separate arguments. + if (dump_setting.equals(VFY_NONE)) { + dump_arg1 = "-XX:+UnlockDiagnosticVMOptions"; + dump_arg2 = "-XX:-BytecodeVerificationRemote"; + dump_arg3 = "-XX:-BytecodeVerificationLocal"; + } else { + // Redundant args should be harmless. + dump_arg1 = dump_arg2 = dump_arg3 = dump_setting; + } + + OutputAnalyzer dumpOutput = TestCommon.dump( + jar, dump_list, dump_arg1, dump_arg2, + dump_arg3, CDS_LOGGING, + // FIXME: the following options are for working around a GC + // issue - assert failure when dumping archive with the -Xverify:all + "-Xms256m", + "-Xmx256m"); + if (dump_setting.equals(VFY_NONE) && + runtime_setting.equals(VFY_REMOTE)) { + dumpOutput.shouldContain(VFY_INFO_MESSAGE); + } + } + String runtime_arg1; + String runtime_arg2; + String runtime_arg3; + if (runtime_setting.equals(VFY_NONE)) { + runtime_arg1 = "-XX:+UnlockDiagnosticVMOptions"; + runtime_arg2 = "-XX:-BytecodeVerificationRemote"; + runtime_arg3 = "-XX:-BytecodeVerificationLocal"; + } else { + // Redundant args should be harmless. + runtime_arg1 = runtime_arg2 = runtime_arg3 = runtime_setting; + } + TestCommon.run("-cp", jar, + runtime_arg1, runtime_arg2, runtime_arg3, + "VerifierTest0") + .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str)); + prev_dump_setting = dump_setting; + } + } + + static void testset_2(String jarName_greet, String jarName_hi) throws Exception { + String appClasses[]; + String jar; + + // The following section is for testing the scenarios where + // the classes are verifiable during dump time. + appClasses = TestCommon.list("Hi", + "Greet", + "Hi$MyClass"); + jar = TestCommon.getTestJar(jarName_hi + ".jar") + File.pathSeparator + + TestCommon.getTestJar(jarName_greet + ".jar"); + String config2[][] = { + // {dump_list, dumptime_verification_setting, + // runtime_verification_setting, expected_output_str}, + + // Dump app/ext with -Xverify:remote + {"app", VFY_REMOTE, VFY_REMOTE, PASS_RESULT}, + {"app", VFY_REMOTE, VFY_ALL, MAP_FAIL}, + {"app", VFY_REMOTE, VFY_NONE, PASS_RESULT }, + // Dump app/ext with -Xverify:all + {"app", VFY_ALL, VFY_REMOTE, PASS_RESULT }, + {"app", VFY_ALL, VFY_ALL, PASS_RESULT }, + {"app", VFY_ALL, VFY_NONE, PASS_RESULT }, + // Dump app/ext with verifier turned off + {"app", VFY_NONE, VFY_REMOTE, PASS_RESULT}, + {"app", VFY_NONE, VFY_ALL, MAP_FAIL}, + {"app", VFY_NONE, VFY_NONE, PASS_RESULT }, + }; + String prev_dump_setting = ""; + for (int i = 0; i < config2.length; i ++) { + // config2[i][0] is always set to "app" in this test + String dump_setting = config2[i][1]; + String runtime_setting = config2[i][2]; + String expected_output_str = config2[i][3]; + System.out.println("Test case [" + i + "]: dumping " + config2[i][0] + + " with " + dump_setting + + ", run with " + runtime_setting); + if (!dump_setting.equals(prev_dump_setting)) { + String dump_arg1; + String dump_arg2; + String dump_arg3; + if (dump_setting.equals(VFY_NONE)) { + dump_arg1 = "-XX:+UnlockDiagnosticVMOptions"; + dump_arg2 = "-XX:-BytecodeVerificationRemote"; + dump_arg3 = "-XX:-BytecodeVerificationLocal"; + } else { + // Redundant args should be harmless. + dump_arg1 = dump_arg2 = dump_arg3 = dump_setting; + } + OutputAnalyzer dumpOutput = TestCommon.dump( + jar, appClasses, dump_arg1, dump_arg2, + dump_arg3, CDS_LOGGING, + // FIXME: the following options are for working around a GC + // issue - assert failure when dumping archive with the -Xverify:all + "-Xms256m", + "-Xmx256m"); + if (dump_setting.equals(VFY_NONE) && + runtime_setting.equals(VFY_REMOTE)) { + dumpOutput.shouldContain(VFY_INFO_MESSAGE); + } + } + String runtime_arg1; + String runtime_arg2; + String runtime_arg3; + if (runtime_setting.equals(VFY_NONE)) { + runtime_arg1 = "-XX:+UnlockDiagnosticVMOptions"; + runtime_arg2 = "-XX:-BytecodeVerificationRemote"; + runtime_arg3 = "-XX:-BytecodeVerificationLocal"; + } else { + // Redundant args should be harmless. + runtime_arg1 = runtime_arg2 = runtime_arg3 = runtime_setting; + } + TestCommon.run("-cp", jar, + runtime_arg1, runtime_arg2, runtime_arg3, + "Hi") + .ifNoMappingFailure(output -> checkRuntimeOutput(output, expected_output_str)); + prev_dump_setting = dump_setting; + } + } + + static void createTestJarFile(File jarSrcFile, File jarFile) throws Exception { + jarFile.delete(); + Files.copy(jarSrcFile.toPath(), jarFile.toPath()); + + File dir = new File(System.getProperty("test.classes", ".")); + File outdir = new File(dir, "verifier_test_classes"); + outdir.mkdir(); + + writeClassFile(new File(outdir, "UnverifiableBase.class"), makeUnverifiableBase()); + writeClassFile(new File(outdir, "UnverifiableIntf.class"), makeUnverifiableIntf()); + + JarBuilder.update(jarFile.getPath(), outdir.getPath()); + } + + static void writeClassFile(File file, byte bytecodes[]) throws Exception { + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(bytecodes); + } + } + + // This was obtained using JDK8: java jdk.internal.org.objectweb.asm.util.ASMifier tmpclasses/UnverifiableBase.class + static byte[] makeUnverifiableBase() throws Exception { + ClassWriter cw = new ClassWriter(0); + FieldVisitor fv; + MethodVisitor mv; + AnnotationVisitor av0; + + cw.visit(V1_8, ACC_SUPER, "UnverifiableBase", null, "java/lang/Object", null); + { + fv = cw.visitField(ACC_FINAL + ACC_STATIC, "x", "LVerifierTest;", null, null); + fv.visitEnd(); + } + { + mv = cw.visitMethod(0, "", "()V", null, null); + mv.visitCode(); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V", false); + mv.visitInsn(RETURN); + mv.visitMaxs(1, 1); + mv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null); + mv.visitCode(); + mv.visitTypeInsn(NEW, "VerifierTest0"); + mv.visitInsn(DUP); + mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "", "()V", false); + mv.visitFieldInsn(PUTSTATIC, "UnverifiableBase", "x", "LVerifierTest;"); + mv.visitInsn(RETURN); + mv.visitMaxs(2, 0); + mv.visitEnd(); + } + addBadMethod(cw); + cw.visitEnd(); + + return cw.toByteArray(); + } + + // This was obtained using JDK8: java jdk.internal.org.objectweb.asm.util.ASMifier tmpclasses/UnverifiableIntf.class + static byte[] makeUnverifiableIntf() throws Exception { + ClassWriter cw = new ClassWriter(0); + FieldVisitor fv; + MethodVisitor mv; + AnnotationVisitor av0; + + cw.visit(V1_8, ACC_ABSTRACT + ACC_INTERFACE, "UnverifiableIntf", null, "java/lang/Object", null); + + { + fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "x", "LVerifierTest0;", null, null); + fv.visitEnd(); + } + { + mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null); + mv.visitCode(); + mv.visitTypeInsn(NEW, "VerifierTest0"); + mv.visitInsn(DUP); + mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "", "()V", false); + mv.visitFieldInsn(PUTSTATIC, "UnverifiableIntf", "x", "LVerifierTest0;"); + mv.visitInsn(RETURN); + mv.visitMaxs(2, 0); + mv.visitEnd(); + } + addBadMethod(cw); + cw.visitEnd(); + + return cw.toByteArray(); + } + + // Add a bad method to make the class fail verification. + static void addBadMethod(ClassWriter cw) throws Exception { + MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "bad", "()V", null, null); + mv.visitCode(); + mv.visitInsn(ARETURN); // java.lang.VerifyError: Operand stack underflow + mv.visitMaxs(2, 2); + mv.visitEnd(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/VerifierTest_0.java 2019-07-24 08:26:46.289470498 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Unverfiable app classes should not be archived. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * @modules jdk.jartool/sun.tools.jar - * java.base/jdk.internal.org.objectweb.asm - * @compile test-classes/Greet.java - * @compile test-classes/Hi.java - * @compile test-classes/VerifierTest0.java - * @run main/othervm/timeout=3600 VerifierTest 0 - */ --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/VerifierTest_0.java 2019-07-24 08:26:46.009470508 -0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Unverfiable app classes should not be archived. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @modules jdk.jartool/sun.tools.jar + * java.base/jdk.internal.org.objectweb.asm + * @compile test-classes/Greet.java + * @compile test-classes/Hi.java + * @compile test-classes/VerifierTest0.java + * @run main/othervm/timeout=3600 VerifierTest 0 + */ --- old/test/hotspot/jtreg/runtime/appcds/VerifierTest_1A.java 2019-07-24 08:26:46.681470484 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Unverfiable app classes should not be archived. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * @modules jdk.jartool/sun.tools.jar - * java.base/jdk.internal.org.objectweb.asm - * @compile test-classes/Greet.java - * @compile test-classes/Hi.java - * @compile test-classes/VerifierTest0.java - * @run main/othervm/timeout=3600 VerifierTest 1A - */ --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/VerifierTest_1A.java 2019-07-24 08:26:46.345470496 -0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Unverfiable app classes should not be archived. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @modules jdk.jartool/sun.tools.jar + * java.base/jdk.internal.org.objectweb.asm + * @compile test-classes/Greet.java + * @compile test-classes/Hi.java + * @compile test-classes/VerifierTest0.java + * @run main/othervm/timeout=3600 VerifierTest 1A + */ --- old/test/hotspot/jtreg/runtime/appcds/VerifierTest_1B.java 2019-07-24 08:26:47.037470472 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Unverfiable app classes should not be archived. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * @modules jdk.jartool/sun.tools.jar - * java.base/jdk.internal.org.objectweb.asm - * @compile test-classes/Greet.java - * @compile test-classes/Hi.java - * @compile test-classes/VerifierTest0.java - * @run main/othervm/timeout=3600 VerifierTest 1B - */ --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/VerifierTest_1B.java 2019-07-24 08:26:46.745470482 -0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Unverfiable app classes should not be archived. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @modules jdk.jartool/sun.tools.jar + * java.base/jdk.internal.org.objectweb.asm + * @compile test-classes/Greet.java + * @compile test-classes/Hi.java + * @compile test-classes/VerifierTest0.java + * @run main/othervm/timeout=3600 VerifierTest 1B + */ --- old/test/hotspot/jtreg/runtime/appcds/VerifierTest_2.java 2019-07-24 08:26:47.385470460 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Unverfiable app classes should not be archived. - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * @modules jdk.jartool/sun.tools.jar - * java.base/jdk.internal.org.objectweb.asm - * @compile test-classes/Greet.java - * @compile test-classes/Hi.java - * @compile test-classes/VerifierTest0.java - * @run main/othervm/timeout=3600 VerifierTest 2 - */ --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/VerifierTest_2.java 2019-07-24 08:26:47.089470470 -0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Unverfiable app classes should not be archived. + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @modules jdk.jartool/sun.tools.jar + * java.base/jdk.internal.org.objectweb.asm + * @compile test-classes/Greet.java + * @compile test-classes/Hi.java + * @compile test-classes/VerifierTest0.java + * @run main/othervm/timeout=3600 VerifierTest 2 + */ --- old/test/hotspot/jtreg/runtime/appcds/WideIloadTest.java 2019-07-24 08:26:47.749470447 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @summary Test 'iload_w' bytecode in shared class - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Iloadw.jasm - * @compile test-classes/IloadwMain.java - * @run driver WideIloadTest - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class WideIloadTest { - public static void main(String args[]) throws Exception { - JarBuilder.build("iload_w", "Iloadw", "IloadwMain"); - String appJar = TestCommon.getTestJar("iload_w.jar"); - OutputAnalyzer dumpOutput = TestCommon.dump(appJar, TestCommon.list( - "Iloadw", "IloadwMain")); - TestCommon.checkDump(dumpOutput); - OutputAnalyzer execOutput = TestCommon.exec(appJar, "IloadwMain"); - TestCommon.checkExec(execOutput, "Passed"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/WideIloadTest.java 2019-07-24 08:26:47.437470458 -0400 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @summary Test 'iload_w' bytecode in shared class + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Iloadw.jasm + * @compile test-classes/IloadwMain.java + * @run driver WideIloadTest + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class WideIloadTest { + public static void main(String args[]) throws Exception { + JarBuilder.build("iload_w", "Iloadw", "IloadwMain"); + String appJar = TestCommon.getTestJar("iload_w.jar"); + OutputAnalyzer dumpOutput = TestCommon.dump(appJar, TestCommon.list( + "Iloadw", "IloadwMain")); + TestCommon.checkDump(dumpOutput); + OutputAnalyzer execOutput = TestCommon.exec(appJar, "IloadwMain"); + TestCommon.checkExec(execOutput, "Passed"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/WrongClasspath.java 2019-07-24 08:26:48.133470434 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary classpath mismatch between dump time and execution time - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver WrongClasspath - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class WrongClasspath { - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - - // Dump an archive with a specified JAR file in -classpath - TestCommon.testDump(appJar, TestCommon.list("Hello")); - - // Then try to execute the archive without -classpath -- it should fail - TestCommon.run( - /* "-cp", appJar, */ // <- uncomment this and the execution should succeed - "-Xlog:cds", - "Hello") - .assertAbnormalExit("Unable to use shared archive", - "shared class paths mismatch"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/WrongClasspath.java 2019-07-24 08:26:47.801470445 -0400 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary classpath mismatch between dump time and execution time + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver WrongClasspath + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class WrongClasspath { + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + + // Dump an archive with a specified JAR file in -classpath + TestCommon.testDump(appJar, TestCommon.list("Hello")); + + // Then try to execute the archive without -classpath -- it should fail + TestCommon.run( + /* "-cp", appJar, */ // <- uncomment this and the execution should succeed + "-Xlog:cds", + "Hello") + .assertAbnormalExit("Unable to use shared archive", + "shared class paths mismatch"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/XShareAutoWithChangedJar.java 2019-07-24 08:26:48.477470422 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test -Xshare:auto for AppCDS - * @requires vm.cds - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/Hello.java - * @run driver XShareAutoWithChangedJar - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class XShareAutoWithChangedJar { - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.build("XShareAutoWithChangedJar", "Hello"); - - // 1. dump - OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello")); - TestCommon.checkDump(output); - - // 2. change the jar - JarBuilder.build("XShareAutoWithChangedJar", "Hello"); - - // 3. exec - output = TestCommon.execAuto("-cp", appJar, "Hello"); - output.shouldContain("Hello World"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/XShareAutoWithChangedJar.java 2019-07-24 08:26:48.185470432 -0400 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test -Xshare:auto for AppCDS + * @requires vm.cds + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/Hello.java + * @run driver XShareAutoWithChangedJar + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class XShareAutoWithChangedJar { + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.build("XShareAutoWithChangedJar", "Hello"); + + // 1. dump + OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello")); + TestCommon.checkDump(output); + + // 2. change the jar + JarBuilder.build("XShareAutoWithChangedJar", "Hello"); + + // 3. exec + output = TestCommon.execAuto("-cp", appJar, "Hello"); + output.shouldContain("Hello World"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/ArchivedIntegerCacheTest.java 2019-07-24 08:26:48.833470409 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test primitive box caches integrity in various scenarios (IntegerCache etc) - * @requires vm.cds.archived.java.heap - * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @compile CheckIntegerCacheApp.java - * @run driver ClassFileInstaller -jar boxCache.jar CheckIntegerCacheApp - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver ArchivedIntegerCacheTest - */ - -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import jdk.test.lib.process.OutputAnalyzer; - -public class ArchivedIntegerCacheTest { - - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("boxCache.jar"); - - Path userDir = Paths.get(System.getProperty("user.dir")); - Path moduleDir = Files.createTempDirectory(userDir, "mods"); - - // - // Dump default archive - // - OutputAnalyzer output = TestCommon.dump(appJar, - TestCommon.list("CheckIntegerCacheApp"), - use_whitebox_jar); - TestCommon.checkDump(output); - - // Test case 1) - // - Default options - System.out.println("----------------------- Test case 1 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckIntegerCacheApp", - "127", - "true"); - TestCommon.checkExec(output); - - // Test case 2) - // - Default archive - // - Larger -XX:AutoBoxCacheMax - System.out.println("----------------------- Test case 2 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-XX:AutoBoxCacheMax=20000", - "CheckIntegerCacheApp", - "20000", - "false"); - TestCommon.checkExec(output); - - // - // Dump with -XX:AutoBoxCacheMax specified - // - output = TestCommon.dump(appJar, - TestCommon.list("CheckIntegerCacheApp"), - "-XX:AutoBoxCacheMax=20000", - use_whitebox_jar); - TestCommon.checkDump(output); - - // Test case 3) - // - Large archived cache - // - Default options - System.out.println("----------------------- Test case 3 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "--module-path", - moduleDir.toString(), - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckIntegerCacheApp", - "127", - "true"); - TestCommon.checkExec(output); - - - // Test case 4) - // - Large archived cache - // - Matching options - System.out.println("----------------------- Test case 4 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "--module-path", - moduleDir.toString(), - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-XX:AutoBoxCacheMax=20000", - "CheckIntegerCacheApp", - "20000", - "true"); - TestCommon.checkExec(output); - - // Test case 5) - // - Large archived cache - // - Larger requested cache - System.out.println("----------------------- Test case 5 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "--module-path", - moduleDir.toString(), - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-XX:AutoBoxCacheMax=30000", - "CheckIntegerCacheApp", - "30000", - "false"); - TestCommon.checkExec(output); - - // Test case 6) - // - Cache is too large to archive - output = TestCommon.dump(appJar, - TestCommon.list("CheckIntegerCacheApp"), - "-XX:AutoBoxCacheMax=2000000", - "-Xmx1g", - "-XX:NewSize=1g", - "-Xlog:cds+heap=info", - "-Xlog:gc+region+cds", - "-Xlog:gc+region=trace", - use_whitebox_jar); - TestCommon.checkDump(output, - "Cannot archive the sub-graph referenced from [Ljava.lang.Integer; object", - "humongous regions have been found and may lead to fragmentation"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/ArchivedIntegerCacheTest.java 2019-07-24 08:26:48.537470420 -0400 @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test primitive box caches integrity in various scenarios (IntegerCache etc) + * @requires vm.cds.archived.java.heap + * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @compile CheckIntegerCacheApp.java + * @run driver ClassFileInstaller -jar boxCache.jar CheckIntegerCacheApp + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver ArchivedIntegerCacheTest + */ + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.process.OutputAnalyzer; + +public class ArchivedIntegerCacheTest { + + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("boxCache.jar"); + + Path userDir = Paths.get(System.getProperty("user.dir")); + Path moduleDir = Files.createTempDirectory(userDir, "mods"); + + // + // Dump default archive + // + OutputAnalyzer output = TestCommon.dump(appJar, + TestCommon.list("CheckIntegerCacheApp"), + use_whitebox_jar); + TestCommon.checkDump(output); + + // Test case 1) + // - Default options + System.out.println("----------------------- Test case 1 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckIntegerCacheApp", + "127", + "true"); + TestCommon.checkExec(output); + + // Test case 2) + // - Default archive + // - Larger -XX:AutoBoxCacheMax + System.out.println("----------------------- Test case 2 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-XX:AutoBoxCacheMax=20000", + "CheckIntegerCacheApp", + "20000", + "false"); + TestCommon.checkExec(output); + + // + // Dump with -XX:AutoBoxCacheMax specified + // + output = TestCommon.dump(appJar, + TestCommon.list("CheckIntegerCacheApp"), + "-XX:AutoBoxCacheMax=20000", + use_whitebox_jar); + TestCommon.checkDump(output); + + // Test case 3) + // - Large archived cache + // - Default options + System.out.println("----------------------- Test case 3 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "--module-path", + moduleDir.toString(), + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckIntegerCacheApp", + "127", + "true"); + TestCommon.checkExec(output); + + + // Test case 4) + // - Large archived cache + // - Matching options + System.out.println("----------------------- Test case 4 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "--module-path", + moduleDir.toString(), + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-XX:AutoBoxCacheMax=20000", + "CheckIntegerCacheApp", + "20000", + "true"); + TestCommon.checkExec(output); + + // Test case 5) + // - Large archived cache + // - Larger requested cache + System.out.println("----------------------- Test case 5 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "--module-path", + moduleDir.toString(), + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-XX:AutoBoxCacheMax=30000", + "CheckIntegerCacheApp", + "30000", + "false"); + TestCommon.checkExec(output); + + // Test case 6) + // - Cache is too large to archive + output = TestCommon.dump(appJar, + TestCommon.list("CheckIntegerCacheApp"), + "-XX:AutoBoxCacheMax=2000000", + "-Xmx1g", + "-XX:NewSize=1g", + "-Xlog:cds+heap=info", + "-Xlog:gc+region+cds", + "-Xlog:gc+region=trace", + use_whitebox_jar); + TestCommon.checkDump(output, + "Cannot archive the sub-graph referenced from [Ljava.lang.Integer; object", + "humongous regions have been found and may lead to fragmentation"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/ArchivedModuleComboTest.java 2019-07-24 08:26:49.213470396 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,190 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test archived system module sub-graph and verify objects are archived. - * @requires vm.cds.archived.java.heap - * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @compile CheckArchivedModuleApp.java - * @run driver ClassFileInstaller -jar app.jar CheckArchivedModuleApp - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver ArchivedModuleComboTest - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; -import sun.hotspot.WhiteBox; - -public class ArchivedModuleComboTest { - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("app.jar"); - - Path userDir = Paths.get(System.getProperty("user.dir")); - Path moduleDir = Files.createTempDirectory(userDir, "mods"); - - // - // Dump without --module-path, without --show-module-resolution - // - OutputAnalyzer output = TestCommon.dump(appJar, - TestCommon.list("CheckArchivedModuleApp"), - use_whitebox_jar); - TestCommon.checkDump(output); - - // Test case 1) - // - Dump without --module-path, without --show-module-resolution - // - Run from -cp only and without --show-module-resolution - // + archived boot layer module ModuleDescriptors should be used - // + archived boot layer configuration should be used - System.out.println("----------------------- Test case 1 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "yes", - "yes"); - TestCommon.checkExec(output); - - // Test case 2) - // - Dump without --module-path, without --show-module-resolution - // - Run from -cp only and with --show-module-resolution - // + archived boot layer module ModuleDescriptors should be used with - // --show-module-resolution (requires resolution) - // + archived boot layer Configuration should not be disabled - System.out.println("----------------------- Test case 2 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "--show-module-resolution", - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "yes", - "no"); - TestCommon.checkExec(output, "root java.base jrt:/java.base"); - - // Test case 3) - // - Dump without --module-path, without --show-module-resolution - // - Run with --module-path - // + archived boot layer module ModuleDescriptors should be disabled - // + archived boot layer Configuration should be disabled - System.out.println("----------------------- Test case 3 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "--module-path", - moduleDir.toString(), - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "no", - "no"); - TestCommon.checkExec(output); - - // - // Dump with --module-path specified (test case 4, 5). Use an - // empty directory as it's simple and still triggers the case - // where system module objects are not archived. - // - output = TestCommon.dump(appJar, - TestCommon.list("CheckArchivedModuleApp"), - "--module-path", - moduleDir.toString(), - use_whitebox_jar); - TestCommon.checkDump(output); - - // Test case 4) - // - Dump with --module-path - // - Run from -cp only, no archived boot layer module ModuleDescriptors - // and Configuration should be found. - System.out.println("----------------------- Test case 4 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "no", - "no"); - TestCommon.checkExec(output); - - // Test case 5) - // - Dump with --module-path - // - Run with --module-path, no archived boot layer module ModuleDescriptors - // and Configuration should be found. - System.out.println("----------------------- Test case 5 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "--module-path", - moduleDir.toString(), - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "no", - "no"); - TestCommon.checkExec(output); - - // - // Dump without --module-path, with --show-module-resolution - // - output = TestCommon.dump(appJar, - TestCommon.list("CheckArchivedModuleApp"), - "--show-module-resolution", - use_whitebox_jar); - TestCommon.checkDump(output, "root java.base jrt:/java.base"); - - // Test case 6) - // - Dump without --module-path, with --show-module-resolution - // - Run from -cp only and without --show-module-resolution - // + archived boot layer module ModuleDescriptors should be used - // + archived boot layer Configuration should be used - System.out.println("----------------------- Test case 6 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "yes", - "yes"); - TestCommon.checkExec(output); - - // Test case 7) - // - Dump without --module-path, with --show-module-resolution - // - Run from -cp only and with --show-module-resolution - // + archived boot layer module ModuleDescriptors should be used with - // --show-module-resolution (requires resolution) - // + archived boot layer Configuration should be disabled - System.out.println("----------------------- Test case 7 ----------------------"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "--show-module-resolution", - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "yes", - "no"); - TestCommon.checkExec(output, "root java.base jrt:/java.base"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/ArchivedModuleComboTest.java 2019-07-24 08:26:48.929470406 -0400 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test archived system module sub-graph and verify objects are archived. + * @requires vm.cds.archived.java.heap + * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @compile CheckArchivedModuleApp.java + * @run driver ClassFileInstaller -jar app.jar CheckArchivedModuleApp + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver ArchivedModuleComboTest + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import sun.hotspot.WhiteBox; + +public class ArchivedModuleComboTest { + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("app.jar"); + + Path userDir = Paths.get(System.getProperty("user.dir")); + Path moduleDir = Files.createTempDirectory(userDir, "mods"); + + // + // Dump without --module-path, without --show-module-resolution + // + OutputAnalyzer output = TestCommon.dump(appJar, + TestCommon.list("CheckArchivedModuleApp"), + use_whitebox_jar); + TestCommon.checkDump(output); + + // Test case 1) + // - Dump without --module-path, without --show-module-resolution + // - Run from -cp only and without --show-module-resolution + // + archived boot layer module ModuleDescriptors should be used + // + archived boot layer configuration should be used + System.out.println("----------------------- Test case 1 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "yes", + "yes"); + TestCommon.checkExec(output); + + // Test case 2) + // - Dump without --module-path, without --show-module-resolution + // - Run from -cp only and with --show-module-resolution + // + archived boot layer module ModuleDescriptors should be used with + // --show-module-resolution (requires resolution) + // + archived boot layer Configuration should not be disabled + System.out.println("----------------------- Test case 2 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "--show-module-resolution", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "yes", + "no"); + TestCommon.checkExec(output, "root java.base jrt:/java.base"); + + // Test case 3) + // - Dump without --module-path, without --show-module-resolution + // - Run with --module-path + // + archived boot layer module ModuleDescriptors should be disabled + // + archived boot layer Configuration should be disabled + System.out.println("----------------------- Test case 3 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "--module-path", + moduleDir.toString(), + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "no", + "no"); + TestCommon.checkExec(output); + + // + // Dump with --module-path specified (test case 4, 5). Use an + // empty directory as it's simple and still triggers the case + // where system module objects are not archived. + // + output = TestCommon.dump(appJar, + TestCommon.list("CheckArchivedModuleApp"), + "--module-path", + moduleDir.toString(), + use_whitebox_jar); + TestCommon.checkDump(output); + + // Test case 4) + // - Dump with --module-path + // - Run from -cp only, no archived boot layer module ModuleDescriptors + // and Configuration should be found. + System.out.println("----------------------- Test case 4 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "no", + "no"); + TestCommon.checkExec(output); + + // Test case 5) + // - Dump with --module-path + // - Run with --module-path, no archived boot layer module ModuleDescriptors + // and Configuration should be found. + System.out.println("----------------------- Test case 5 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "--module-path", + moduleDir.toString(), + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "no", + "no"); + TestCommon.checkExec(output); + + // + // Dump without --module-path, with --show-module-resolution + // + output = TestCommon.dump(appJar, + TestCommon.list("CheckArchivedModuleApp"), + "--show-module-resolution", + use_whitebox_jar); + TestCommon.checkDump(output, "root java.base jrt:/java.base"); + + // Test case 6) + // - Dump without --module-path, with --show-module-resolution + // - Run from -cp only and without --show-module-resolution + // + archived boot layer module ModuleDescriptors should be used + // + archived boot layer Configuration should be used + System.out.println("----------------------- Test case 6 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "yes", + "yes"); + TestCommon.checkExec(output); + + // Test case 7) + // - Dump without --module-path, with --show-module-resolution + // - Run from -cp only and with --show-module-resolution + // + archived boot layer module ModuleDescriptors should be used with + // --show-module-resolution (requires resolution) + // + archived boot layer Configuration should be disabled + System.out.println("----------------------- Test case 7 ----------------------"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "--show-module-resolution", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "yes", + "no"); + TestCommon.checkExec(output, "root java.base jrt:/java.base"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/ArchivedModuleCompareTest.java 2019-07-24 08:26:49.569470384 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Compare archived system modules with non-archived. - * @requires vm.cds.archived.java.heap - * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile PrintSystemModulesApp.java - * @run driver ClassFileInstaller -jar app.jar PrintSystemModulesApp - * @run driver ArchivedModuleCompareTest - */ - -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class ArchivedModuleCompareTest { - public static void main(String[] args) throws Exception { - String appJar = ClassFileInstaller.getJarPath("app.jar"); - - // Test case 1) - // Compare the list of archived system module names with non-archived - // list. They must be the same. - System.out.println("---------------- Test case 1 -----------------"); - OutputAnalyzer output = TestCommon.dump(appJar, - TestCommon.list("PrintSystemModulesApp")); - TestCommon.checkDump(output); - - output = TestCommon.execOff("-cp", appJar, "PrintSystemModulesApp"); - output.shouldHaveExitValue(0); - String bootModules1 = output.getStdout(); - - output = TestCommon.exec(appJar, "PrintSystemModulesApp"); - TestCommon.checkExec(output); - if (output.getStderr().contains("sharing")) { - String bootModules2 = output.getStdout(); - TestCommon.checkOutputStrings(bootModules1, bootModules2, ", "); - } - - // Test case 2) - // Verify --show-module-resolution output with the output from - // -Xshare:off run - System.out.println("---------------- Test case 2 -----------------"); - output = TestCommon.execOff("-cp", appJar, - "--show-module-resolution", - "-version"); - output.shouldHaveExitValue(0); - String moduleResolutionOut1 = output.getStdout(); - - output = TestCommon.exec(appJar, - "--show-module-resolution", - "-version"); - TestCommon.checkExec(output); - if (output.getStderr().contains("sharing")) { - String moduleResolutionOut2 = output.getStdout(); - TestCommon.checkOutputStrings( - moduleResolutionOut1, moduleResolutionOut2, "\n"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/ArchivedModuleCompareTest.java 2019-07-24 08:26:49.301470393 -0400 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Compare archived system modules with non-archived. + * @requires vm.cds.archived.java.heap + * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile PrintSystemModulesApp.java + * @run driver ClassFileInstaller -jar app.jar PrintSystemModulesApp + * @run driver ArchivedModuleCompareTest + */ + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class ArchivedModuleCompareTest { + public static void main(String[] args) throws Exception { + String appJar = ClassFileInstaller.getJarPath("app.jar"); + + // Test case 1) + // Compare the list of archived system module names with non-archived + // list. They must be the same. + System.out.println("---------------- Test case 1 -----------------"); + OutputAnalyzer output = TestCommon.dump(appJar, + TestCommon.list("PrintSystemModulesApp")); + TestCommon.checkDump(output); + + output = TestCommon.execOff("-cp", appJar, "PrintSystemModulesApp"); + output.shouldHaveExitValue(0); + String bootModules1 = output.getStdout(); + + output = TestCommon.exec(appJar, "PrintSystemModulesApp"); + TestCommon.checkExec(output); + if (output.getStderr().contains("sharing")) { + String bootModules2 = output.getStdout(); + TestCommon.checkOutputStrings(bootModules1, bootModules2, ", "); + } + + // Test case 2) + // Verify --show-module-resolution output with the output from + // -Xshare:off run + System.out.println("---------------- Test case 2 -----------------"); + output = TestCommon.execOff("-cp", appJar, + "--show-module-resolution", + "-version"); + output.shouldHaveExitValue(0); + String moduleResolutionOut1 = output.getStdout(); + + output = TestCommon.exec(appJar, + "--show-module-resolution", + "-version"); + TestCommon.checkExec(output); + if (output.getStderr().contains("sharing")) { + String moduleResolutionOut2 = output.getStdout(); + TestCommon.checkOutputStrings( + moduleResolutionOut1, moduleResolutionOut2, "\n"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/ArchivedModuleWithCustomImageTest.java 2019-07-24 08:26:49.993470369 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,185 +0,0 @@ -/** - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @summary Test archived module graph with custom runtime image - * @requires vm.cds.archived.java.heap - * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.module - * java.management - * jdk.jlink - * jdk.compiler - * @build sun.hotspot.WhiteBox - * @compile CheckArchivedModuleApp.java - * @run driver ClassFileInstaller -jar app.jar CheckArchivedModuleApp - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver ArchivedModuleWithCustomImageTest - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.compiler.CompilerUtils; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class ArchivedModuleWithCustomImageTest { - private static final String JAVA_HOME = System.getProperty("java.home"); - private static final String TEST_MODULE = "test"; - private static final Path jdkHome = Paths.get(System.getProperty("test.jdk")); - private static final Path jdkMods = jdkHome.resolve("jmods"); - private static final Path testSrc = Paths.get(System.getProperty("test.src")); - private static final Path src = testSrc.resolve("src").resolve(TEST_MODULE); - private static final Path classes = Paths.get("classes"); - private static final Path jmods = Paths.get("jmods"); - - public static void main(String[] args) throws Throwable { - if (Files.notExists(jdkMods)) { - System.out.println("No jmods/ in test JDK, not supported."); - return; - } - - // compile test module class - if (!CompilerUtils.compile(src, classes)) { - throw new RuntimeException("Compilation failure."); - } - - // create custom runtime image named 'myimage' - Files.createDirectories(jmods); - Path image = Paths.get("myimage"); - runJmod(classes.toString(), TEST_MODULE); - runJlink(image, TEST_MODULE); - - // test using 'myimage' - testArchivedModuleUsingImage(image); - - Files.delete(jmods.resolve(TEST_MODULE + ".jmod")); - } - - private static void runJlink(Path image, String modName) throws Throwable { - Path jlink = Paths.get(JAVA_HOME, "bin", "jlink"); - OutputAnalyzer output = ProcessTools.executeProcess(jlink.toString(), - "--output", image.toString(), - "--add-modules", modName, - "--module-path", jdkMods + File.pathSeparator + jmods); - output.shouldHaveExitValue(0); - } - - private static void runJmod(String cp, String modName) throws Throwable { - Path jmod = Paths.get(JAVA_HOME, "bin", "jmod"); - OutputAnalyzer output = ProcessTools.executeProcess(jmod.toString(), - "create", - "--class-path", cp, - "--module-version", "1.0", - "--main-class", "jdk.test.Test", - jmods.resolve(modName + ".jmod").toString()); - output.shouldHaveExitValue(0); - } - - private static void testArchivedModuleUsingImage(Path image) - throws Throwable { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("app.jar"); - Path customJava = Paths.get(image.toString(), "bin", "java"); - - // -Xshare:dump with custom runtime image - String[] dumpCmd = { - customJava.toString(), - "-XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa", - "-Xshare:dump"}; - printCommand(dumpCmd); - ProcessBuilder pbDump = new ProcessBuilder(); - pbDump.command(dumpCmd); - OutputAnalyzer output = TestCommon.executeAndLog( - pbDump, "custom.runtime.image.dump"); - TestCommon.checkDump(output); - - // Test case 1): - // test archived module graph objects are used with custome runtime image - System.out.println("------------------- Test case 1 -------------------"); - String[] runCmd = {customJava.toString(), - use_whitebox_jar, - "-XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa", - "-cp", - appJar, - "-Xshare:on", - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckArchivedModuleApp", - "yes", - "yes"}; - printCommand(runCmd); - ProcessBuilder pbRun = new ProcessBuilder(); - pbRun.command(runCmd); - output = TestCommon.executeAndLog(pbRun, "custom.runtime.image.run"); - output.shouldHaveExitValue(0); - - - // Test case 2): - // verify --show-module-resolution output - System.out.println("------------------- Test case 2 -------------------"); - - // myimage/bin/java -Xshare:off --show-module-resolution -version - String[] showModuleCmd1 = {customJava.toString(), - "-Xshare:off", - "--show-module-resolution", - "-version"}; - printCommand(showModuleCmd1); - pbRun = new ProcessBuilder(); - pbRun.command(showModuleCmd1); - output = TestCommon.executeAndLog( - pbRun, "custom.runtime.image.showModuleResolution.nocds"); - output.shouldHaveExitValue(0); - String moduleResolutionOut1 = output.getStdout(); - - // myimage/bin/java -Xshare:on --show-module-resolution -version - // -XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa - String[] showModuleCmd2 = { - customJava.toString(), - "-XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa", - "-Xshare:on", - "--show-module-resolution", - "-version"}; - printCommand(showModuleCmd2); - pbRun = new ProcessBuilder(); - pbRun.command(showModuleCmd2); - output = TestCommon.executeAndLog( - pbRun, "custom.runtime.image.showModuleResolution.cds"); - if (output.getStderr().contains("sharing")) { - String moduleResolutionOut2 = output.getStdout(); - TestCommon.checkOutputStrings( - moduleResolutionOut1, moduleResolutionOut2, "\n"); - } - } - - private static void printCommand(String opts[]) { - StringBuilder cmdLine = new StringBuilder(); - for (String cmd : opts) - cmdLine.append(cmd).append(' '); - System.out.println("Command line: [" + cmdLine.toString() + "]"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/ArchivedModuleWithCustomImageTest.java 2019-07-24 08:26:49.669470380 -0400 @@ -0,0 +1,185 @@ +/** + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Test archived module graph with custom runtime image + * @requires vm.cds.archived.java.heap + * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.module + * java.management + * jdk.jlink + * jdk.compiler + * @build sun.hotspot.WhiteBox + * @compile CheckArchivedModuleApp.java + * @run driver ClassFileInstaller -jar app.jar CheckArchivedModuleApp + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver ArchivedModuleWithCustomImageTest + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.compiler.CompilerUtils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class ArchivedModuleWithCustomImageTest { + private static final String JAVA_HOME = System.getProperty("java.home"); + private static final String TEST_MODULE = "test"; + private static final Path jdkHome = Paths.get(System.getProperty("test.jdk")); + private static final Path jdkMods = jdkHome.resolve("jmods"); + private static final Path testSrc = Paths.get(System.getProperty("test.src")); + private static final Path src = testSrc.resolve("src").resolve(TEST_MODULE); + private static final Path classes = Paths.get("classes"); + private static final Path jmods = Paths.get("jmods"); + + public static void main(String[] args) throws Throwable { + if (Files.notExists(jdkMods)) { + System.out.println("No jmods/ in test JDK, not supported."); + return; + } + + // compile test module class + if (!CompilerUtils.compile(src, classes)) { + throw new RuntimeException("Compilation failure."); + } + + // create custom runtime image named 'myimage' + Files.createDirectories(jmods); + Path image = Paths.get("myimage"); + runJmod(classes.toString(), TEST_MODULE); + runJlink(image, TEST_MODULE); + + // test using 'myimage' + testArchivedModuleUsingImage(image); + + Files.delete(jmods.resolve(TEST_MODULE + ".jmod")); + } + + private static void runJlink(Path image, String modName) throws Throwable { + Path jlink = Paths.get(JAVA_HOME, "bin", "jlink"); + OutputAnalyzer output = ProcessTools.executeProcess(jlink.toString(), + "--output", image.toString(), + "--add-modules", modName, + "--module-path", jdkMods + File.pathSeparator + jmods); + output.shouldHaveExitValue(0); + } + + private static void runJmod(String cp, String modName) throws Throwable { + Path jmod = Paths.get(JAVA_HOME, "bin", "jmod"); + OutputAnalyzer output = ProcessTools.executeProcess(jmod.toString(), + "create", + "--class-path", cp, + "--module-version", "1.0", + "--main-class", "jdk.test.Test", + jmods.resolve(modName + ".jmod").toString()); + output.shouldHaveExitValue(0); + } + + private static void testArchivedModuleUsingImage(Path image) + throws Throwable { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("app.jar"); + Path customJava = Paths.get(image.toString(), "bin", "java"); + + // -Xshare:dump with custom runtime image + String[] dumpCmd = { + customJava.toString(), + "-XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa", + "-Xshare:dump"}; + printCommand(dumpCmd); + ProcessBuilder pbDump = new ProcessBuilder(); + pbDump.command(dumpCmd); + OutputAnalyzer output = TestCommon.executeAndLog( + pbDump, "custom.runtime.image.dump"); + TestCommon.checkDump(output); + + // Test case 1): + // test archived module graph objects are used with custome runtime image + System.out.println("------------------- Test case 1 -------------------"); + String[] runCmd = {customJava.toString(), + use_whitebox_jar, + "-XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa", + "-cp", + appJar, + "-Xshare:on", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckArchivedModuleApp", + "yes", + "yes"}; + printCommand(runCmd); + ProcessBuilder pbRun = new ProcessBuilder(); + pbRun.command(runCmd); + output = TestCommon.executeAndLog(pbRun, "custom.runtime.image.run"); + output.shouldHaveExitValue(0); + + + // Test case 2): + // verify --show-module-resolution output + System.out.println("------------------- Test case 2 -------------------"); + + // myimage/bin/java -Xshare:off --show-module-resolution -version + String[] showModuleCmd1 = {customJava.toString(), + "-Xshare:off", + "--show-module-resolution", + "-version"}; + printCommand(showModuleCmd1); + pbRun = new ProcessBuilder(); + pbRun.command(showModuleCmd1); + output = TestCommon.executeAndLog( + pbRun, "custom.runtime.image.showModuleResolution.nocds"); + output.shouldHaveExitValue(0); + String moduleResolutionOut1 = output.getStdout(); + + // myimage/bin/java -Xshare:on --show-module-resolution -version + // -XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa + String[] showModuleCmd2 = { + customJava.toString(), + "-XX:SharedArchiveFile=./ArchivedModuleWithCustomImageTest.jsa", + "-Xshare:on", + "--show-module-resolution", + "-version"}; + printCommand(showModuleCmd2); + pbRun = new ProcessBuilder(); + pbRun.command(showModuleCmd2); + output = TestCommon.executeAndLog( + pbRun, "custom.runtime.image.showModuleResolution.cds"); + if (output.getStderr().contains("sharing")) { + String moduleResolutionOut2 = output.getStdout(); + TestCommon.checkOutputStrings( + moduleResolutionOut1, moduleResolutionOut2, "\n"); + } + } + + private static void printCommand(String opts[]) { + StringBuilder cmdLine = new StringBuilder(); + for (String cmd : opts) + cmdLine.append(cmd).append(' '); + System.out.println("Command line: [" + cmdLine.toString() + "]"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckArchivedModuleApp.java 2019-07-24 08:26:50.365470356 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.lang.module.Configuration; -import java.lang.module.ModuleDescriptor; -import java.util.List; -import java.util.Set; -import sun.hotspot.WhiteBox; - -// -// Test archived system module graph when open archive heap objects are mapped: -// -public class CheckArchivedModuleApp { - static WhiteBox wb; - public static void main(String args[]) throws Exception { - wb = WhiteBox.getWhiteBox(); - - if (!wb.areOpenArchiveHeapObjectsMapped()) { - System.out.println("Archived open_archive_heap objects are not mapped."); - System.out.println("This may happen during normal operation. Test Skipped."); - return; - } - - if (args.length != 2) { - throw new RuntimeException( - "FAILED. Incorrect argument length: " + args.length); - } - - boolean expectArchivedDescriptors = "yes".equals(args[0]); - boolean expectArchivedConfiguration = "yes".equals(args[1]); - // -XX:+EnableJVMCI adds extra system modules, in which case the system - // module objects are not archived. - Boolean enableJVMCI = wb.getBooleanVMFlag("EnableJVMCI"); - if (enableJVMCI != null && enableJVMCI) { - expectArchivedDescriptors = false; - expectArchivedConfiguration = false; - } - - checkModuleDescriptors(expectArchivedDescriptors); - checkConfiguration(expectArchivedConfiguration); - checkEmptyConfiguration(expectArchivedConfiguration); - } - - private static void checkModuleDescriptors(boolean expectArchivedDescriptors) { - Set modules = ModuleLayer.boot().modules(); - for (Module m : modules) { - ModuleDescriptor md = m.getDescriptor(); - String name = md.name(); - if (expectArchivedDescriptors) { - if (wb.isShared(md)) { - System.out.println(name + " is archived. Expected."); - } else { - throw new RuntimeException( - "FAILED. " + name + " is not archived. Expect archived."); - } - } else { - if (!wb.isShared(md)) { - System.out.println(name + " is not archived. Expected."); - } else { - throw new RuntimeException( - "FAILED. " + name + " is archived. Expect not archived."); - } - } - } - } - - private static void checkEmptyConfiguration(boolean expectArchivedConfiguration) { - // Configuration.EMPTY_CONFIGURATION uses the singletons, - // ListN.EMPTY_LIST, SetN.EMPTY_SET and MapN.EMPTY_MAP in - // ImmutableCollections for the 'parents', 'modules' and - // 'graph' fields. The ImmutableCollections singletons - // can be accessed via List.of(), Set.of() and Map.of() APIs. - // Configuration public APIs also allow access to the - // EMPTY_CONFIGURATION's 'parents' and 'modules'. When the - // archived java heap data is enabled at runtime, make sure - // the EMPTY_CONFIGURATION.parents and EMPTY_CONFIGURATION.modules - // are the archived ImmutableCollections singletons. - Configuration emptyCf = Configuration.empty(); - List emptyCfParents = emptyCf.parents(); - Set emptyCfModules = emptyCf.modules(); - if (expectArchivedConfiguration) { - if (emptyCfParents == List.of() && - wb.isShared(emptyCfParents)) { - System.out.println("Empty Configuration has expected parents."); - } else { - throw new RuntimeException( - "FAILED. Unexpected parents for empty Configuration."); - } - if (emptyCfModules == Set.of() && - wb.isShared(emptyCfModules)) { - System.out.println("Empty Configuration has expected module set."); - } else { - throw new RuntimeException( - "FAILED. Unexpected module set for empty Configuration."); - } - } - } - - - - private static void checkConfiguration(boolean expectArchivedConfiguration) { - Configuration cf = ModuleLayer.boot().configuration(); - - if (expectArchivedConfiguration) { - if (wb.isShared(cf)) { - System.out.println("Boot layer configuration is archived. Expected."); - } else { - throw new RuntimeException( - "FAILED. Boot layer configuration is not archived."); - } - } else { - if (!wb.isShared(cf)) { - System.out.println("Boot layer configuration is not archived. Expected."); - } else { - throw new RuntimeException( - "FAILED. Boot layer configuration is archived."); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/CheckArchivedModuleApp.java 2019-07-24 08:26:50.081470366 -0400 @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.lang.module.Configuration; +import java.lang.module.ModuleDescriptor; +import java.util.List; +import java.util.Set; +import sun.hotspot.WhiteBox; + +// +// Test archived system module graph when open archive heap objects are mapped: +// +public class CheckArchivedModuleApp { + static WhiteBox wb; + public static void main(String args[]) throws Exception { + wb = WhiteBox.getWhiteBox(); + + if (!wb.areOpenArchiveHeapObjectsMapped()) { + System.out.println("Archived open_archive_heap objects are not mapped."); + System.out.println("This may happen during normal operation. Test Skipped."); + return; + } + + if (args.length != 2) { + throw new RuntimeException( + "FAILED. Incorrect argument length: " + args.length); + } + + boolean expectArchivedDescriptors = "yes".equals(args[0]); + boolean expectArchivedConfiguration = "yes".equals(args[1]); + // -XX:+EnableJVMCI adds extra system modules, in which case the system + // module objects are not archived. + Boolean enableJVMCI = wb.getBooleanVMFlag("EnableJVMCI"); + if (enableJVMCI != null && enableJVMCI) { + expectArchivedDescriptors = false; + expectArchivedConfiguration = false; + } + + checkModuleDescriptors(expectArchivedDescriptors); + checkConfiguration(expectArchivedConfiguration); + checkEmptyConfiguration(expectArchivedConfiguration); + } + + private static void checkModuleDescriptors(boolean expectArchivedDescriptors) { + Set modules = ModuleLayer.boot().modules(); + for (Module m : modules) { + ModuleDescriptor md = m.getDescriptor(); + String name = md.name(); + if (expectArchivedDescriptors) { + if (wb.isShared(md)) { + System.out.println(name + " is archived. Expected."); + } else { + throw new RuntimeException( + "FAILED. " + name + " is not archived. Expect archived."); + } + } else { + if (!wb.isShared(md)) { + System.out.println(name + " is not archived. Expected."); + } else { + throw new RuntimeException( + "FAILED. " + name + " is archived. Expect not archived."); + } + } + } + } + + private static void checkEmptyConfiguration(boolean expectArchivedConfiguration) { + // Configuration.EMPTY_CONFIGURATION uses the singletons, + // ListN.EMPTY_LIST, SetN.EMPTY_SET and MapN.EMPTY_MAP in + // ImmutableCollections for the 'parents', 'modules' and + // 'graph' fields. The ImmutableCollections singletons + // can be accessed via List.of(), Set.of() and Map.of() APIs. + // Configuration public APIs also allow access to the + // EMPTY_CONFIGURATION's 'parents' and 'modules'. When the + // archived java heap data is enabled at runtime, make sure + // the EMPTY_CONFIGURATION.parents and EMPTY_CONFIGURATION.modules + // are the archived ImmutableCollections singletons. + Configuration emptyCf = Configuration.empty(); + List emptyCfParents = emptyCf.parents(); + Set emptyCfModules = emptyCf.modules(); + if (expectArchivedConfiguration) { + if (emptyCfParents == List.of() && + wb.isShared(emptyCfParents)) { + System.out.println("Empty Configuration has expected parents."); + } else { + throw new RuntimeException( + "FAILED. Unexpected parents for empty Configuration."); + } + if (emptyCfModules == Set.of() && + wb.isShared(emptyCfModules)) { + System.out.println("Empty Configuration has expected module set."); + } else { + throw new RuntimeException( + "FAILED. Unexpected module set for empty Configuration."); + } + } + } + + + + private static void checkConfiguration(boolean expectArchivedConfiguration) { + Configuration cf = ModuleLayer.boot().configuration(); + + if (expectArchivedConfiguration) { + if (wb.isShared(cf)) { + System.out.println("Boot layer configuration is archived. Expected."); + } else { + throw new RuntimeException( + "FAILED. Boot layer configuration is not archived."); + } + } else { + if (!wb.isShared(cf)) { + System.out.println("Boot layer configuration is not archived. Expected."); + } else { + throw new RuntimeException( + "FAILED. Boot layer configuration is archived."); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedMirrorApp.java 2019-07-24 08:26:50.721470344 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.net.URL; -import java.net.URLClassLoader; -import sun.hotspot.WhiteBox; - -// -// Test class mirror objects are cached when open archive heap objects are mapped: -// - Well-known shared library classes: -// java.lang.Object -// java.lang.String -// - Shared application class loaded by the system class loader -// - Shared application class loaded user defined class loader -// -public class CheckCachedMirrorApp { - static WhiteBox wb; - public static void main(String args[]) throws Exception { - String path = args[0]; - URL url = new File(path).toURI().toURL(); - URL[] urls = new URL[] {url}; - - URLClassLoader loader = new URLClassLoader(urls); - Class hello = loader.loadClass("Hello"); - System.out.println("Loaded " + hello + " from " + url + " using loader " + loader); - - wb = WhiteBox.getWhiteBox(); - - if (!wb.areOpenArchiveHeapObjectsMapped()) { - System.out.println("Archived open_archive_heap objects are not mapped."); - System.out.println("This may happen during normal operation. Test Skipped."); - return; - } - - // Well-known shared library classes - Class object_class = Object.class; - checkMirror(object_class, true); - Class string_class = String.class; - checkMirror(string_class, true); - - // Shared app class - Class app_class = CheckCachedMirrorApp.class; - checkMirror(app_class, true); - - // Hello is shared class and loaded by the 'loader' defined in current app. - // It should not have cached resolved_references. - Class class_with_user_defined_loader = hello; - checkMirror(class_with_user_defined_loader, false); - } - - static void checkMirror(Class c, boolean mirrorShouldBeArchived) { - System.out.print("Check cached mirror for " + c); - if (wb.isSharedClass(c)) { - // Check if the Class object is cached - if (mirrorShouldBeArchived && wb.isShared(c)) { - System.out.println(c + " mirror is cached. Expected."); - } else if (!mirrorShouldBeArchived && !wb.isShared(c)) { - System.out.println(c + " mirror is not cached. Expected."); - } else if (mirrorShouldBeArchived && !wb.isShared(c)) { - throw new RuntimeException( - "FAILED. " + c + " mirror is not cached."); - } else { - throw new RuntimeException( - "FAILED. " + c + " mirror should not be cached."); - } - } else { - System.out.println("Class " + c + "is not shared, skipping the check for mirror"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/CheckCachedMirrorApp.java 2019-07-24 08:26:50.413470354 -0400 @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; +import sun.hotspot.WhiteBox; + +// +// Test class mirror objects are cached when open archive heap objects are mapped: +// - Well-known shared library classes: +// java.lang.Object +// java.lang.String +// - Shared application class loaded by the system class loader +// - Shared application class loaded user defined class loader +// +public class CheckCachedMirrorApp { + static WhiteBox wb; + public static void main(String args[]) throws Exception { + String path = args[0]; + URL url = new File(path).toURI().toURL(); + URL[] urls = new URL[] {url}; + + URLClassLoader loader = new URLClassLoader(urls); + Class hello = loader.loadClass("Hello"); + System.out.println("Loaded " + hello + " from " + url + " using loader " + loader); + + wb = WhiteBox.getWhiteBox(); + + if (!wb.areOpenArchiveHeapObjectsMapped()) { + System.out.println("Archived open_archive_heap objects are not mapped."); + System.out.println("This may happen during normal operation. Test Skipped."); + return; + } + + // Well-known shared library classes + Class object_class = Object.class; + checkMirror(object_class, true); + Class string_class = String.class; + checkMirror(string_class, true); + + // Shared app class + Class app_class = CheckCachedMirrorApp.class; + checkMirror(app_class, true); + + // Hello is shared class and loaded by the 'loader' defined in current app. + // It should not have cached resolved_references. + Class class_with_user_defined_loader = hello; + checkMirror(class_with_user_defined_loader, false); + } + + static void checkMirror(Class c, boolean mirrorShouldBeArchived) { + System.out.print("Check cached mirror for " + c); + if (wb.isSharedClass(c)) { + // Check if the Class object is cached + if (mirrorShouldBeArchived && wb.isShared(c)) { + System.out.println(c + " mirror is cached. Expected."); + } else if (!mirrorShouldBeArchived && !wb.isShared(c)) { + System.out.println(c + " mirror is not cached. Expected."); + } else if (mirrorShouldBeArchived && !wb.isShared(c)) { + throw new RuntimeException( + "FAILED. " + c + " mirror is not cached."); + } else { + throw new RuntimeException( + "FAILED. " + c + " mirror should not be cached."); + } + } else { + System.out.println("Class " + c + "is not shared, skipping the check for mirror"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedMirrorTest.java 2019-07-24 08:26:51.117470330 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test archived mirror - * @requires vm.cds.archived.java.heap - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @compile CheckCachedMirrorApp.java - * @compile ../test-classes/Hello.java - * @run driver ClassFileInstaller -jar app.jar CheckCachedMirrorApp - * @run driver ClassFileInstaller -jar hello.jar Hello - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver CheckCachedMirrorTest - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class CheckCachedMirrorTest { - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("app.jar"); - String helloJarPath = ClassFileInstaller.getJarPath("hello.jar"); - - String classlist[] = new String[] { - "CheckCachedMirrorApp", // built-in app loader - "java/lang/Object id: 1", // boot loader - "Hello id: 2 super: 1 source: " + helloJarPath // custom loader - }; - - TestCommon.testDump(appJar, classlist, use_whitebox_jar); - OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-Xlog:cds=debug", - "CheckCachedMirrorApp", - helloJarPath); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/CheckCachedMirrorTest.java 2019-07-24 08:26:50.785470341 -0400 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test archived mirror + * @requires vm.cds.archived.java.heap + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @compile CheckCachedMirrorApp.java + * @compile ../test-classes/Hello.java + * @run driver ClassFileInstaller -jar app.jar CheckCachedMirrorApp + * @run driver ClassFileInstaller -jar hello.jar Hello + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver CheckCachedMirrorTest + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class CheckCachedMirrorTest { + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("app.jar"); + String helloJarPath = ClassFileInstaller.getJarPath("hello.jar"); + + String classlist[] = new String[] { + "CheckCachedMirrorApp", // built-in app loader + "java/lang/Object id: 1", // boot loader + "Hello id: 2 super: 1 source: " + helloJarPath // custom loader + }; + + TestCommon.testDump(appJar, classlist, use_whitebox_jar); + OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xlog:cds=debug", + "CheckCachedMirrorApp", + helloJarPath); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferences.java 2019-07-24 08:26:51.513470316 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test resolved_references - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @compile CheckCachedResolvedReferencesApp.java - * @compile ../test-classes/Hello.java - * @run driver ClassFileInstaller -jar app.jar CheckCachedResolvedReferencesApp - * @run driver ClassFileInstaller -jar hello.jar Hello - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver CheckCachedResolvedReferences - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class CheckCachedResolvedReferences { - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("app.jar"); - String helloJarPath = ClassFileInstaller.getJarPath("hello.jar"); - - String classlist[] = new String[] { - "CheckCachedResolvedReferencesApp", // built-in app loader - "java/lang/Object id: 1", // boot loader - "Hello id: 2 super: 1 source: " + helloJarPath // custom loader - }; - - TestCommon.testDump(appJar, classlist, use_whitebox_jar); - OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "CheckCachedResolvedReferencesApp", - helloJarPath); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/CheckCachedResolvedReferences.java 2019-07-24 08:26:51.217470326 -0400 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test resolved_references + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @compile CheckCachedResolvedReferencesApp.java + * @compile ../test-classes/Hello.java + * @run driver ClassFileInstaller -jar app.jar CheckCachedResolvedReferencesApp + * @run driver ClassFileInstaller -jar hello.jar Hello + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver CheckCachedResolvedReferences + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class CheckCachedResolvedReferences { + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("app.jar"); + String helloJarPath = ClassFileInstaller.getJarPath("hello.jar"); + + String classlist[] = new String[] { + "CheckCachedResolvedReferencesApp", // built-in app loader + "java/lang/Object id: 1", // boot loader + "Hello id: 2 super: 1 source: " + helloJarPath // custom loader + }; + + TestCommon.testDump(appJar, classlist, use_whitebox_jar); + OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "CheckCachedResolvedReferencesApp", + helloJarPath); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferencesApp.java 2019-07-24 08:26:51.901470303 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.net.URL; -import java.net.URLClassLoader; -import sun.hotspot.WhiteBox; - -public class CheckCachedResolvedReferencesApp { - public static void main(String args[]) throws Exception { - String path = args[0]; - URL url = new File(path).toURI().toURL(); - URL[] urls = new URL[] {url}; - - URLClassLoader loader = new URLClassLoader(urls); - Class hello = loader.loadClass("Hello"); - System.out.println("Loaded " + hello + " from " + url + " using loader " + loader); - - WhiteBox wb = WhiteBox.getWhiteBox(); - - if (!wb.areOpenArchiveHeapObjectsMapped()) { - System.out.println("Archived open_archive_heap objects are not mapped."); - System.out.println("This may happen during normal operation. Test Skipped."); - return; - } - - // CheckCachedResolvedReferencesApp is shared class and loaded by the - // AppClassLoader. It should have cached resolved_references. - if (wb.isSharedClass(CheckCachedResolvedReferencesApp.class)) { - Object refs1 = wb.getResolvedReferences(CheckCachedResolvedReferencesApp.class); - if (refs1 != null && wb.isShared(refs1)) { - System.out.println( - "resolved references from CheckCachedResolvedReferencesApp is cached"); - } else { - throw new RuntimeException( - "FAILED. CheckCachedResolvedReferencesApp has no cached resolved references"); - } - } - - // Hello is shared class and loaded by the 'loader' defined in current app. - // It should not have cached resolved_references. - if (wb.isSharedClass(hello)) { - Object refs2 = wb.getResolvedReferences(hello); - if (refs2 != null) { - if (!wb.isShared(refs2)) { - System.out.println("resolved references from hello is not cached"); - } else { - throw new RuntimeException( - "FAILED. Hello has unexpected cached resolved references"); - } - } else { - throw new RuntimeException("FAILED. Hello has no resolved references"); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/CheckCachedResolvedReferencesApp.java 2019-07-24 08:26:51.609470313 -0400 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; +import sun.hotspot.WhiteBox; + +public class CheckCachedResolvedReferencesApp { + public static void main(String args[]) throws Exception { + String path = args[0]; + URL url = new File(path).toURI().toURL(); + URL[] urls = new URL[] {url}; + + URLClassLoader loader = new URLClassLoader(urls); + Class hello = loader.loadClass("Hello"); + System.out.println("Loaded " + hello + " from " + url + " using loader " + loader); + + WhiteBox wb = WhiteBox.getWhiteBox(); + + if (!wb.areOpenArchiveHeapObjectsMapped()) { + System.out.println("Archived open_archive_heap objects are not mapped."); + System.out.println("This may happen during normal operation. Test Skipped."); + return; + } + + // CheckCachedResolvedReferencesApp is shared class and loaded by the + // AppClassLoader. It should have cached resolved_references. + if (wb.isSharedClass(CheckCachedResolvedReferencesApp.class)) { + Object refs1 = wb.getResolvedReferences(CheckCachedResolvedReferencesApp.class); + if (refs1 != null && wb.isShared(refs1)) { + System.out.println( + "resolved references from CheckCachedResolvedReferencesApp is cached"); + } else { + throw new RuntimeException( + "FAILED. CheckCachedResolvedReferencesApp has no cached resolved references"); + } + } + + // Hello is shared class and loaded by the 'loader' defined in current app. + // It should not have cached resolved_references. + if (wb.isSharedClass(hello)) { + Object refs2 = wb.getResolvedReferences(hello); + if (refs2 != null) { + if (!wb.isShared(refs2)) { + System.out.println("resolved references from hello is not cached"); + } else { + throw new RuntimeException( + "FAILED. Hello has unexpected cached resolved references"); + } + } else { + throw new RuntimeException("FAILED. Hello has no resolved references"); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckIntegerCacheApp.java 2019-07-24 08:26:52.217470292 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -// -// Help test archived box cache consistency. -// -// Takes two arguments: -// 0: the expected maximum value expected to be archived -// 1: if the values are expected to be retrieved from the archive or not -// (only applies to IntegerCache; other caches should always be mapped -// from archive) -// -public class CheckIntegerCacheApp { - static WhiteBox wb; - - public static void main(String[] args) throws Exception { - wb = WhiteBox.getWhiteBox(); - - if (!wb.areOpenArchiveHeapObjectsMapped()) { - System.out.println("This may happen during normal operation. Test Skipped."); - return; - } - - if (args.length != 2) { - throw new RuntimeException( - "FAILED. Incorrect argument length: " + args.length); - } - - boolean archivedExpected = Boolean.parseBoolean(args[1]); - - // Base JLS compliance check - for (int i = -128; i <= 127; i++) { - if (Integer.valueOf(i) != Integer.valueOf(i)) { - throw new RuntimeException( - "FAILED. All values in range [-128, 127] should be interned in cache: " + i); - } - if (Byte.valueOf((byte)i) != Byte.valueOf((byte)i)) { - throw new RuntimeException( - "FAILED. All Byte values in range [-128, 127] should be interned in cache: " + (byte)i); - } - if (Short.valueOf((short)i) != Short.valueOf((short)i)) { - throw new RuntimeException( - "FAILED. All Short values in range [-128, 127] should be interned in cache: " + (byte)i); - } - if (Long.valueOf(i) != Long.valueOf(i)) { - throw new RuntimeException( - "FAILED. All Long values in range [-128, 127] should be interned in cache: " + i); - } - checkArchivedAsExpected(archivedExpected, Integer.valueOf(i)); - checkArchivedAsExpected(true, Byte.valueOf((byte)i)); - checkArchivedAsExpected(true, Short.valueOf((short)i)); - checkArchivedAsExpected(true, Long.valueOf(i)); - - // Character cache only values 0 through 127 - if (i >= 0) { - if (Character.valueOf((char)i) != Character.valueOf((char)i)) { - throw new RuntimeException( - "FAILED. All Character values in range [0, 127] should be interned in cache: " + i); - } - checkArchivedAsExpected(true, Character.valueOf((char)i)); - } - } - - int high = Integer.parseInt(args[0]); - if (Integer.valueOf(high) != Integer.valueOf(high)) { - throw new RuntimeException( - "FAILED. Value expected to be retrieved from cache: " + high); - } - checkArchivedAsExpected(archivedExpected, Integer.valueOf(high)); - - if (Integer.valueOf(high + 1) == Integer.valueOf(high + 1)) { - throw new RuntimeException( - "FAILED. Value not expected to be retrieved from cache: " + high); - } - checkArchivedAsExpected(false, Integer.valueOf(high + 1)); - checkArchivedAsExpected(false, Short.valueOf((short)128)); - checkArchivedAsExpected(false, Long.valueOf(128)); - checkArchivedAsExpected(false, Character.valueOf((char)128)); - } - - private static void checkArchivedAsExpected(boolean archivedExpected, Object value) { - if (archivedExpected) { - if (!wb.isShared(value)) { - throw new RuntimeException( - "FAILED. Value expected to be archived: " + value + - " of type " + value.getClass().getName()); - } - } else { - if (wb.isShared(value)) { - throw new RuntimeException( - "FAILED. Value not expected to be archived: " + value + - " of type " + value.getClass().getName()); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/CheckIntegerCacheApp.java 2019-07-24 08:26:51.949470301 -0400 @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +// +// Help test archived box cache consistency. +// +// Takes two arguments: +// 0: the expected maximum value expected to be archived +// 1: if the values are expected to be retrieved from the archive or not +// (only applies to IntegerCache; other caches should always be mapped +// from archive) +// +public class CheckIntegerCacheApp { + static WhiteBox wb; + + public static void main(String[] args) throws Exception { + wb = WhiteBox.getWhiteBox(); + + if (!wb.areOpenArchiveHeapObjectsMapped()) { + System.out.println("This may happen during normal operation. Test Skipped."); + return; + } + + if (args.length != 2) { + throw new RuntimeException( + "FAILED. Incorrect argument length: " + args.length); + } + + boolean archivedExpected = Boolean.parseBoolean(args[1]); + + // Base JLS compliance check + for (int i = -128; i <= 127; i++) { + if (Integer.valueOf(i) != Integer.valueOf(i)) { + throw new RuntimeException( + "FAILED. All values in range [-128, 127] should be interned in cache: " + i); + } + if (Byte.valueOf((byte)i) != Byte.valueOf((byte)i)) { + throw new RuntimeException( + "FAILED. All Byte values in range [-128, 127] should be interned in cache: " + (byte)i); + } + if (Short.valueOf((short)i) != Short.valueOf((short)i)) { + throw new RuntimeException( + "FAILED. All Short values in range [-128, 127] should be interned in cache: " + (byte)i); + } + if (Long.valueOf(i) != Long.valueOf(i)) { + throw new RuntimeException( + "FAILED. All Long values in range [-128, 127] should be interned in cache: " + i); + } + checkArchivedAsExpected(archivedExpected, Integer.valueOf(i)); + checkArchivedAsExpected(true, Byte.valueOf((byte)i)); + checkArchivedAsExpected(true, Short.valueOf((short)i)); + checkArchivedAsExpected(true, Long.valueOf(i)); + + // Character cache only values 0 through 127 + if (i >= 0) { + if (Character.valueOf((char)i) != Character.valueOf((char)i)) { + throw new RuntimeException( + "FAILED. All Character values in range [0, 127] should be interned in cache: " + i); + } + checkArchivedAsExpected(true, Character.valueOf((char)i)); + } + } + + int high = Integer.parseInt(args[0]); + if (Integer.valueOf(high) != Integer.valueOf(high)) { + throw new RuntimeException( + "FAILED. Value expected to be retrieved from cache: " + high); + } + checkArchivedAsExpected(archivedExpected, Integer.valueOf(high)); + + if (Integer.valueOf(high + 1) == Integer.valueOf(high + 1)) { + throw new RuntimeException( + "FAILED. Value not expected to be retrieved from cache: " + high); + } + checkArchivedAsExpected(false, Integer.valueOf(high + 1)); + checkArchivedAsExpected(false, Short.valueOf((short)128)); + checkArchivedAsExpected(false, Long.valueOf(128)); + checkArchivedAsExpected(false, Character.valueOf((char)128)); + } + + private static void checkArchivedAsExpected(boolean archivedExpected, Object value) { + if (archivedExpected) { + if (!wb.isShared(value)) { + throw new RuntimeException( + "FAILED. Value expected to be archived: " + value + + " of type " + value.getClass().getName()); + } + } else { + if (wb.isShared(value)) { + throw new RuntimeException( + "FAILED. Value not expected to be archived: " + value + + " of type " + value.getClass().getName()); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/DifferentHeapSizes.java 2019-07-24 08:26:52.597470278 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test automatic relocation of archive heap regions dur to heap size changes. - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm/timeout=160 -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. DifferentHeapSizes - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; -import jdk.test.lib.cds.CDSTestUtils; - -public class DifferentHeapSizes { - static final String DEDUP = "-XX:+UseStringDeduplication"; // This increases code coverage. - - static class Scenario { - int dumpSize; // in MB - int runSizes[]; // in MB - Scenario(int ds, int... rs) { - dumpSize = ds; - runSizes = rs; - } - } - - static Scenario[] scenarios = { - // dump -Xmx , run -Xmx - new Scenario( 32, 32, 64, 512, 2048, 4097, 16374, 31000), - new Scenario( 128, 32, 64, 512, 2048, 4097, 16374, 31000, 40000), - new Scenario( 2048, 32, 512, 2600, 4097, 8500, 31000, 40000), - new Scenario( 17000, 32, 512, 2048, 4097, 8500, 31000, 40000), - new Scenario( 31000, 32, 512, 2048, 4097, 8500, 17000, 40000) - }; - - public static void main(String[] args) throws Exception { - JarBuilder.getOrCreateHelloJar(); - String appJar = TestCommon.getTestJar("hello.jar"); - String appClasses[] = TestCommon.list("Hello"); - - for (Scenario s : scenarios) { - String dumpXmx = "-Xmx" + s.dumpSize + "m"; - OutputAnalyzer output = TestCommon.dump(appJar, appClasses, dumpXmx); - - for (int runSize : s.runSizes) { - String runXmx = "-Xmx" + runSize + "m"; - CDSTestUtils.Result result = TestCommon.run("-cp", appJar, "-showversion", - "-Xlog:cds", runXmx, DEDUP, "Hello"); - if (runSize < 32768) { - result - .assertNormalExit("Hello World") - .assertNormalExit(out -> { - out.shouldNotContain(CDSTestUtils.MSG_RANGE_NOT_WITHIN_HEAP); - out.shouldNotContain(CDSTestUtils.MSG_RANGE_ALREADT_IN_USE); - }); - } else { - result.assertAbnormalExit(CDSTestUtils.MSG_COMPRESSION_MUST_BE_USED); - } - } - } - - // Test various settings of -XX:HeapBaseMinAddress that would trigger - // "CDS heap data need to be relocated because the desired range ... is outside of the heap" - long default_base = WhiteBox.getWhiteBox().getSizeTVMFlag("HeapBaseMinAddress").longValue(); - long M = 1024 * 1024; - long bases[] = new long[] { - /* dump xmx */ /* run xmx */ /* dump base */ /* run base */ - 128 * M, 128 * M, default_base, default_base + 256L * 1024 * 1024, - 128 * M, 16376 * M, 0x0000000119200000L, -1, - }; - - for (int i = 0; i < bases.length; i += 4) { - String dump_xmx = getXmx(bases[i+0]); - String run_xmx = getXmx(bases[i+1]); - String dump_base = getHeapBaseMinAddress(bases[i+2]); - String run_base = getHeapBaseMinAddress(bases[i+3]); - - TestCommon.dump(appJar, appClasses, dump_xmx, dump_base); - TestCommon.run("-cp", appJar, "-showversion", "-Xlog:cds", run_xmx, run_base, DEDUP, "Hello") - .assertNormalExit("Hello World") - .assertNormalExit(out -> { - out.shouldNotContain(CDSTestUtils.MSG_RANGE_NOT_WITHIN_HEAP); - out.shouldNotContain(CDSTestUtils.MSG_RANGE_ALREADT_IN_USE); - }); - } - } - - static String getXmx(long value) { - if (value < 0) { - return "-showversion"; // This is a harmless command line arg - } else { - return "-Xmx" + (value / 1024 / 1024) + "m"; - } - } - static String getHeapBaseMinAddress(long value) { - if (value < 0) { - return "-showversion"; // This is a harmless command line arg - } else { - return "-XX:HeapBaseMinAddress=0x" + Long.toHexString(value); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/DifferentHeapSizes.java 2019-07-24 08:26:52.273470290 -0400 @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test automatic relocation of archive heap regions dur to heap size changes. + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run main/othervm/timeout=160 -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. DifferentHeapSizes + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; +import jdk.test.lib.cds.CDSTestUtils; + +public class DifferentHeapSizes { + static final String DEDUP = "-XX:+UseStringDeduplication"; // This increases code coverage. + + static class Scenario { + int dumpSize; // in MB + int runSizes[]; // in MB + Scenario(int ds, int... rs) { + dumpSize = ds; + runSizes = rs; + } + } + + static Scenario[] scenarios = { + // dump -Xmx , run -Xmx + new Scenario( 32, 32, 64, 512, 2048, 4097, 16374, 31000), + new Scenario( 128, 32, 64, 512, 2048, 4097, 16374, 31000, 40000), + new Scenario( 2048, 32, 512, 2600, 4097, 8500, 31000, 40000), + new Scenario( 17000, 32, 512, 2048, 4097, 8500, 31000, 40000), + new Scenario( 31000, 32, 512, 2048, 4097, 8500, 17000, 40000) + }; + + public static void main(String[] args) throws Exception { + JarBuilder.getOrCreateHelloJar(); + String appJar = TestCommon.getTestJar("hello.jar"); + String appClasses[] = TestCommon.list("Hello"); + + for (Scenario s : scenarios) { + String dumpXmx = "-Xmx" + s.dumpSize + "m"; + OutputAnalyzer output = TestCommon.dump(appJar, appClasses, dumpXmx); + + for (int runSize : s.runSizes) { + String runXmx = "-Xmx" + runSize + "m"; + CDSTestUtils.Result result = TestCommon.run("-cp", appJar, "-showversion", + "-Xlog:cds", runXmx, DEDUP, "Hello"); + if (runSize < 32768) { + result + .assertNormalExit("Hello World") + .assertNormalExit(out -> { + out.shouldNotContain(CDSTestUtils.MSG_RANGE_NOT_WITHIN_HEAP); + out.shouldNotContain(CDSTestUtils.MSG_RANGE_ALREADT_IN_USE); + }); + } else { + result.assertAbnormalExit(CDSTestUtils.MSG_COMPRESSION_MUST_BE_USED); + } + } + } + + // Test various settings of -XX:HeapBaseMinAddress that would trigger + // "CDS heap data need to be relocated because the desired range ... is outside of the heap" + long default_base = WhiteBox.getWhiteBox().getSizeTVMFlag("HeapBaseMinAddress").longValue(); + long M = 1024 * 1024; + long bases[] = new long[] { + /* dump xmx */ /* run xmx */ /* dump base */ /* run base */ + 128 * M, 128 * M, default_base, default_base + 256L * 1024 * 1024, + 128 * M, 16376 * M, 0x0000000119200000L, -1, + }; + + for (int i = 0; i < bases.length; i += 4) { + String dump_xmx = getXmx(bases[i+0]); + String run_xmx = getXmx(bases[i+1]); + String dump_base = getHeapBaseMinAddress(bases[i+2]); + String run_base = getHeapBaseMinAddress(bases[i+3]); + + TestCommon.dump(appJar, appClasses, dump_xmx, dump_base); + TestCommon.run("-cp", appJar, "-showversion", "-Xlog:cds", run_xmx, run_base, DEDUP, "Hello") + .assertNormalExit("Hello World") + .assertNormalExit(out -> { + out.shouldNotContain(CDSTestUtils.MSG_RANGE_NOT_WITHIN_HEAP); + out.shouldNotContain(CDSTestUtils.MSG_RANGE_ALREADT_IN_USE); + }); + } + } + + static String getXmx(long value) { + if (value < 0) { + return "-showversion"; // This is a harmless command line arg + } else { + return "-Xmx" + (value / 1024 / 1024) + "m"; + } + } + static String getHeapBaseMinAddress(long value) { + if (value < 0) { + return "-showversion"; // This is a harmless command line arg + } else { + return "-XX:HeapBaseMinAddress=0x" + Long.toHexString(value); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.config.txt 2019-07-24 08:26:52.981470265 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,3 +0,0 @@ -VERSION: 1.0 -@SECTION: String -26: shared_string_from_MyInner --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/DumpTimeVerifyFailure.config.txt 2019-07-24 08:26:52.705470275 -0400 @@ -0,0 +1,3 @@ +VERSION: 1.0 +@SECTION: String +26: shared_string_from_MyInner --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.java 2019-07-24 08:26:53.325470253 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Dump time should not crash if any class with shared strings fails verification due to missing dependencies. - * @bug 8186789 - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @compile MyOuter.java MyException.java - * @run driver DumpTimeVerifyFailure - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class DumpTimeVerifyFailure { - public static void main(String[] args) throws Exception { - // App classes (see MyOuter.java): - // MyOuter - // MyInnder$MyOuter extends MyOuter - // MyException - // - // MyOuter$MyInner.test() throws MyException. - // The missingMyException.jar file only includes MyOuter and - // MyOuter$MyInner classes, but not the MyException class. - // At dump time, MyOuter and MyOuter$MyInner classes fail - // verification due to missing MyException class. - String[] ARCHIVE_CLASSES = {"MyOuter", "MyOuter$MyInner"}; - String appJar = JarBuilder.build("missingMyException", ARCHIVE_CLASSES); - - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, ARCHIVE_CLASSES, - "-Xlog:verification", - "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("DumpTimeVerifyFailure.config.txt")); - TestCommon.checkDump(dumpOutput, "Loading classes to share"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/DumpTimeVerifyFailure.java 2019-07-24 08:26:53.037470263 -0400 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Dump time should not crash if any class with shared strings fails verification due to missing dependencies. + * @bug 8186789 + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @compile MyOuter.java MyException.java + * @run driver DumpTimeVerifyFailure + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class DumpTimeVerifyFailure { + public static void main(String[] args) throws Exception { + // App classes (see MyOuter.java): + // MyOuter + // MyInnder$MyOuter extends MyOuter + // MyException + // + // MyOuter$MyInner.test() throws MyException. + // The missingMyException.jar file only includes MyOuter and + // MyOuter$MyInner classes, but not the MyException class. + // At dump time, MyOuter and MyOuter$MyInner classes fail + // verification due to missing MyException class. + String[] ARCHIVE_CLASSES = {"MyOuter", "MyOuter$MyInner"}; + String appJar = JarBuilder.build("missingMyException", ARCHIVE_CLASSES); + + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, ARCHIVE_CLASSES, + "-Xlog:verification", + "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("DumpTimeVerifyFailure.config.txt")); + TestCommon.checkDump(dumpOutput, "Loading classes to share"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStress.config.txt 2019-07-24 08:26:53.729470239 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,3 +0,0 @@ -VERSION: 1.0 -@SECTION: String -25: GCStressApp_shared_string --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/GCStress.config.txt 2019-07-24 08:26:53.441470249 -0400 @@ -0,0 +1,3 @@ +VERSION: 1.0 +@SECTION: String +25: GCStressApp_shared_string --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressApp.java 2019-07-24 08:26:54.089470226 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.*; -import java.util.*; -import sun.hotspot.WhiteBox; - -// All strings in archived classes are shared -public class GCStressApp { - static WhiteBox wb = WhiteBox.getWhiteBox(); - static int[] arr; - - static String get_shared_string() { - String shared_str = "GCStressApp_shared_string"; - return shared_str; - } - - static String get_shared_string1() { - String shared_str1 = "GCStressApp_shared_string1"; - return shared_str1; - } - - static void allocAlot() { - try { - Random random = new Random(); - for (int i = 0; i < 1024 * 1024; i++) { - int len = random.nextInt(10000); - arr = new int[len]; - } - } catch (java.lang.OutOfMemoryError e) { } - } - - static void runGC() { - wb.fullGC(); - } - - public static void main(String args[]) throws Exception { - if (!wb.isSharedClass(GCStressApp.class)) { - System.out.println("GCStressApp is not shared. Possibly there was a mapping failure."); - return; - } - - if (wb.areSharedStringsIgnored()) { - System.out.println("Shared strings are ignored."); - return; - } - - Object refs = wb.getResolvedReferences(GCStressApp.class); - if (wb.isShared(refs)) { - String shared_str = get_shared_string(); - String shared_str1 = get_shared_string1(); - - if (!wb.isShared(shared_str)) { - throw new RuntimeException("FAILED. GCStressApp_shared_string is not shared"); - } - - if (!wb.isShared(shared_str1)) { - throw new RuntimeException("FAILED. GCStressApp_shared_string1 is not shared"); - } - - allocAlot(); - runGC(); - runGC(); - runGC(); - - System.out.println("Passed"); - } else { - System.out.println( - "No cached resolved references. Open archive heap data is not used."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/GCStressApp.java 2019-07-24 08:26:53.793470237 -0400 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.*; +import java.util.*; +import sun.hotspot.WhiteBox; + +// All strings in archived classes are shared +public class GCStressApp { + static WhiteBox wb = WhiteBox.getWhiteBox(); + static int[] arr; + + static String get_shared_string() { + String shared_str = "GCStressApp_shared_string"; + return shared_str; + } + + static String get_shared_string1() { + String shared_str1 = "GCStressApp_shared_string1"; + return shared_str1; + } + + static void allocAlot() { + try { + Random random = new Random(); + for (int i = 0; i < 1024 * 1024; i++) { + int len = random.nextInt(10000); + arr = new int[len]; + } + } catch (java.lang.OutOfMemoryError e) { } + } + + static void runGC() { + wb.fullGC(); + } + + public static void main(String args[]) throws Exception { + if (!wb.isSharedClass(GCStressApp.class)) { + System.out.println("GCStressApp is not shared. Possibly there was a mapping failure."); + return; + } + + if (wb.areSharedStringsIgnored()) { + System.out.println("Shared strings are ignored."); + return; + } + + Object refs = wb.getResolvedReferences(GCStressApp.class); + if (wb.isShared(refs)) { + String shared_str = get_shared_string(); + String shared_str1 = get_shared_string1(); + + if (!wb.isShared(shared_str)) { + throw new RuntimeException("FAILED. GCStressApp_shared_string is not shared"); + } + + if (!wb.isShared(shared_str1)) { + throw new RuntimeException("FAILED. GCStressApp_shared_string1 is not shared"); + } + + allocAlot(); + runGC(); + runGC(); + runGC(); + + System.out.println("Passed"); + } else { + System.out.println( + "No cached resolved references. Open archive heap data is not used."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressTest.java 2019-07-24 08:26:54.473470213 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @compile GCStressApp.java - * @run driver ClassFileInstaller -jar gcstress.jar GCStressApp - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver GCStressTest - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class GCStressTest { - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("gcstress.jar"); - String appClasses[] = TestCommon.list("GCStressApp"); - - OutputAnalyzer output = TestCommon.dump(appJar, appClasses, - use_whitebox_jar, - "-Xms20M", "-Xmx20M"); - output = TestCommon.exec(appJar, use_whitebox_jar, - "-Xlog:cds=info", - "-Xms20M", "-Xmx20M", - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI","GCStressApp"); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/GCStressTest.java 2019-07-24 08:26:54.141470225 -0400 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @compile GCStressApp.java + * @run driver ClassFileInstaller -jar gcstress.jar GCStressApp + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver GCStressTest + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class GCStressTest { + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("gcstress.jar"); + String appClasses[] = TestCommon.list("GCStressApp"); + + OutputAnalyzer output = TestCommon.dump(appJar, appClasses, + use_whitebox_jar, + "-Xms20M", "-Xmx20M"); + output = TestCommon.exec(appJar, use_whitebox_jar, + "-Xlog:cds=info", + "-Xms20M", "-Xmx20M", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI","GCStressApp"); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/InstrumentationAgent.mf 2019-07-24 08:26:54.917470198 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -Premain-Class: InstrumentationRegisterClassFileTransformer -Agent-Class: InstrumentationRegisterClassFileTransformer -Can-Retransform-Classes: true -Can-Redefine-Classes: true --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/InstrumentationAgent.mf 2019-07-24 08:26:54.585470209 -0400 @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Premain-Class: InstrumentationRegisterClassFileTransformer +Agent-Class: InstrumentationRegisterClassFileTransformer +Can-Retransform-Classes: true +Can-Redefine-Classes: true --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/MirrorWithReferenceFieldsApp.java 2019-07-24 08:26:55.309470184 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.net.URL; -import sun.hotspot.WhiteBox; - -// -// - Test static final String field with initial value in cached mirror should be also archived. -// - GC should not crash when reference fields in cached mirror are updated at runtime -// - Reference fields are updated to point to runtime created objects -// - Reference fields are nullified -// -public class MirrorWithReferenceFieldsApp { - - // Static String field with initial value - static final String archived_field = "abc"; - - // Static object field - static Object non_archived_field_1; - - // Instance field - Integer non_archived_field_2; - - public MirrorWithReferenceFieldsApp() { - non_archived_field_1 = new Object(); - non_archived_field_2 = new Integer(1); - } - - public static void main(String args[]) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - - if (!wb.areOpenArchiveHeapObjectsMapped()) { - System.out.println("Archived open_archive_heap objects are not mapped."); - System.out.println("This may happen during normal operation. Test Skipped."); - return; - } - - MirrorWithReferenceFieldsApp m = new MirrorWithReferenceFieldsApp(); - m.test(wb); - } - - public void test(WhiteBox wb) { - Class c = MirrorWithReferenceFieldsApp.class; - if (wb.isSharedClass(c)) { - // Check if the Class object is cached - if (wb.isShared(c)) { - System.out.println(c + " mirror is cached. Expected."); - } else { - throw new RuntimeException( - "FAILED. " + c + " mirror should be cached."); - } - - // Check fields - - if (wb.isShared(archived_field)) { - System.out.println("archived_field is archived as excepted"); - } else { - throw new RuntimeException( - "FAILED. archived_field is not archived."); - } - - // GC should not crash - System.gc(); - System.gc(); - System.gc(); - - non_archived_field_1 = null; - non_archived_field_2 = null; - - System.gc(); - System.gc(); - System.gc(); - - System.out.println("Done."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/MirrorWithReferenceFieldsApp.java 2019-07-24 08:26:54.973470196 -0400 @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.net.URL; +import sun.hotspot.WhiteBox; + +// +// - Test static final String field with initial value in cached mirror should be also archived. +// - GC should not crash when reference fields in cached mirror are updated at runtime +// - Reference fields are updated to point to runtime created objects +// - Reference fields are nullified +// +public class MirrorWithReferenceFieldsApp { + + // Static String field with initial value + static final String archived_field = "abc"; + + // Static object field + static Object non_archived_field_1; + + // Instance field + Integer non_archived_field_2; + + public MirrorWithReferenceFieldsApp() { + non_archived_field_1 = new Object(); + non_archived_field_2 = new Integer(1); + } + + public static void main(String args[]) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + + if (!wb.areOpenArchiveHeapObjectsMapped()) { + System.out.println("Archived open_archive_heap objects are not mapped."); + System.out.println("This may happen during normal operation. Test Skipped."); + return; + } + + MirrorWithReferenceFieldsApp m = new MirrorWithReferenceFieldsApp(); + m.test(wb); + } + + public void test(WhiteBox wb) { + Class c = MirrorWithReferenceFieldsApp.class; + if (wb.isSharedClass(c)) { + // Check if the Class object is cached + if (wb.isShared(c)) { + System.out.println(c + " mirror is cached. Expected."); + } else { + throw new RuntimeException( + "FAILED. " + c + " mirror should be cached."); + } + + // Check fields + + if (wb.isShared(archived_field)) { + System.out.println("archived_field is archived as excepted"); + } else { + throw new RuntimeException( + "FAILED. archived_field is not archived."); + } + + // GC should not crash + System.gc(); + System.gc(); + System.gc(); + + non_archived_field_1 = null; + non_archived_field_2 = null; + + System.gc(); + System.gc(); + System.gc(); + + System.out.println("Done."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/MirrorWithReferenceFieldsTest.java 2019-07-24 08:26:55.705470170 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test archived mirror with reference fields - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @compile MirrorWithReferenceFieldsApp.java - * @run driver ClassFileInstaller -jar app.jar MirrorWithReferenceFieldsApp - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver MirrorWithReferenceFieldsTest - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class MirrorWithReferenceFieldsTest { - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("app.jar"); - - String classlist[] = new String[] { - "MirrorWithReferenceFieldsApp", - }; - - TestCommon.testDump(appJar, classlist, use_whitebox_jar); - OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-XX:+VerifyAfterGC", - "MirrorWithReferenceFieldsApp"); - try { - TestCommon.checkExec(output, "Done"); - } catch (Exception e) { - output.shouldContain("Archived open_archive_heap objects are not mapped"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/MirrorWithReferenceFieldsTest.java 2019-07-24 08:26:55.373470182 -0400 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test archived mirror with reference fields + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @compile MirrorWithReferenceFieldsApp.java + * @run driver ClassFileInstaller -jar app.jar MirrorWithReferenceFieldsApp + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver MirrorWithReferenceFieldsTest + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class MirrorWithReferenceFieldsTest { + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("app.jar"); + + String classlist[] = new String[] { + "MirrorWithReferenceFieldsApp", + }; + + TestCommon.testDump(appJar, classlist, use_whitebox_jar); + OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-XX:+VerifyAfterGC", + "MirrorWithReferenceFieldsApp"); + try { + TestCommon.checkExec(output, "Done"); + } catch (Exception e) { + output.shouldContain("Archived open_archive_heap objects are not mapped"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/MyException.java 2019-07-24 08:26:56.125470155 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -public class MyException extends Exception { - public MyException(String msg) { - super(msg); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/MyException.java 2019-07-24 08:26:55.809470166 -0400 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +public class MyException extends Exception { + public MyException(String msg) { + super(msg); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/MyOuter.java 2019-07-24 08:26:56.509470142 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -public class MyOuter { - public void exp() throws MyException { - throw new MyException("MyOuter exception"); - } - - public void test() throws Exception { - System.out.println("MyOuter"); - try { - exp(); - } catch (MyException e) { - } - } - - public static final class MyInner extends MyOuter { - static String myString = "shared_string_from_MyInner"; - public void test() { - System.out.println("MyInner"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/MyOuter.java 2019-07-24 08:26:56.177470154 -0400 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +public class MyOuter { + public void exp() throws MyException { + throw new MyException("MyOuter exception"); + } + + public void test() throws Exception { + System.out.println("MyOuter"); + try { + exp(); + } catch (MyException e) { + } + } + + public static final class MyInner extends MyOuter { + static String myString = "shared_string_from_MyInner"; + public void test() { + System.out.println("MyInner"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/OpenArchiveRegion.java 2019-07-24 08:26:56.885470129 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test open archive heap regions - * @requires vm.cds.archived.java.heap - * @comment This test explicitly chooses the type of GC to be used by sub-processes. It may conflict with the GC type set - * via the -vmoptions command line option of JTREG. vm.gc==null will help the test case to discard the explicitly passed - * vm options. - * @requires (vm.gc=="null") - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java - * @run driver OpenArchiveRegion - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class OpenArchiveRegion { - public static void main(String[] args) throws Exception { - JarBuilder.getOrCreateHelloJar(); - String appJar = TestCommon.getTestJar("hello.jar"); - String appClasses[] = TestCommon.list("Hello"); - - // Dump with open archive heap region, requires G1 GC - OutputAnalyzer output = TestCommon.dump(appJar, appClasses); - TestCommon.checkDump(output, "oa0 space:"); - output.shouldNotContain("oa0 space: 0 ["); - output = TestCommon.exec(appJar, "Hello"); - TestCommon.checkExec(output, "Hello World"); - output = TestCommon.exec(appJar, "-XX:+UseSerialGC", "Hello"); - TestCommon.checkExec(output, "Hello World"); - - // Dump with open archive heap region disabled when G1 GC is not in use - output = TestCommon.dump(appJar, appClasses, "-XX:+UseParallelGC"); - TestCommon.checkDump(output); - output.shouldNotContain("oa0 space:"); - output = TestCommon.exec(appJar, "Hello"); - TestCommon.checkExec(output, "Hello World"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/OpenArchiveRegion.java 2019-07-24 08:26:56.561470140 -0400 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test open archive heap regions + * @requires vm.cds.archived.java.heap + * @comment This test explicitly chooses the type of GC to be used by sub-processes. It may conflict with the GC type set + * via the -vmoptions command line option of JTREG. vm.gc==null will help the test case to discard the explicitly passed + * vm options. + * @requires (vm.gc=="null") + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java + * @run driver OpenArchiveRegion + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class OpenArchiveRegion { + public static void main(String[] args) throws Exception { + JarBuilder.getOrCreateHelloJar(); + String appJar = TestCommon.getTestJar("hello.jar"); + String appClasses[] = TestCommon.list("Hello"); + + // Dump with open archive heap region, requires G1 GC + OutputAnalyzer output = TestCommon.dump(appJar, appClasses); + TestCommon.checkDump(output, "oa0 space:"); + output.shouldNotContain("oa0 space: 0 ["); + output = TestCommon.exec(appJar, "Hello"); + TestCommon.checkExec(output, "Hello World"); + output = TestCommon.exec(appJar, "-XX:+UseSerialGC", "Hello"); + TestCommon.checkExec(output, "Hello World"); + + // Dump with open archive heap region disabled when G1 GC is not in use + output = TestCommon.dump(appJar, appClasses, "-XX:+UseParallelGC"); + TestCommon.checkDump(output); + output.shouldNotContain("oa0 space:"); + output = TestCommon.exec(appJar, "Hello"); + TestCommon.checkExec(output, "Hello World"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/PrimitiveTypesApp.java 2019-07-24 08:26:57.261470116 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,205 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.reflect.Field; -import sun.hotspot.WhiteBox; - -// -// Test primitive type class mirror objects are cached when open archive heap -// objects are mapped. -// -public class PrimitiveTypesApp { - public static void main(String[] args) { - WhiteBox wb = WhiteBox.getWhiteBox(); - if (!wb.areOpenArchiveHeapObjectsMapped()) { - System.out.println("Archived open_archive_heap objects are not mapped."); - System.out.println("This may happen during normal operation. Test Skipped."); - return; - } - - FieldsTest ft = new FieldsTest(); - ft.testBoolean(wb); - ft.testByte(wb); - ft.testChar(wb); - ft.testInt(wb); - ft.testShort(wb); - ft.testLong(wb); - ft.testFloat(wb); - ft.testDouble(wb); - } -} - -class FieldsTest { - public boolean f_boolean; - public byte f_byte; - public char f_char; - public int f_int; - public short f_short; - public long f_long; - public float f_float; - public double f_double; - - FieldsTest() { - f_byte = 1; - f_boolean = false; - f_char = 'a'; - f_int = 1; - f_short = 100; - f_long = 2018L; - f_float = 1.0f; - f_double = 2.5; - } - - void testBoolean(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_boolean"); - f.setBoolean(this, true); - if (!f_boolean) { - throw new RuntimeException("FAILED. Field f_boolean has unexpected value: " + f_boolean); - } - checkPrimitiveType(wb, f, Boolean.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void testByte(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_byte"); - f.setByte(this, (byte)9); - if (f_byte != (byte)9) { - throw new RuntimeException("FAILED. Field f_byte has unexpected value: " + f_byte); - } - checkPrimitiveType(wb, f, Byte.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void testChar(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_char"); - f.setChar(this, 'b'); - if (f_char != 'b') { - throw new RuntimeException("FAILED. Field f_char has unexpected value: " + f_char); - } - checkPrimitiveType(wb, f, Character.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void testInt(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_int"); - f.setInt(this, 9999); - if (f_int != 9999) { - throw new RuntimeException("FAILED. Field f_int has unexpected value: " + f_int); - } - checkPrimitiveType(wb, f, Integer.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void testShort(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_short"); - f.setShort(this, (short)99); - if (f_short != 99) { - throw new RuntimeException("FAILED. Field f_short has unexpected value: " + f_short); - } - checkPrimitiveType(wb, f, Short.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void testLong(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_long"); - f.setLong(this, 99L); - if (f_long != 99L) { - throw new RuntimeException("FAILED. Field f_long has unexpected value: " + f_long); - } - checkPrimitiveType(wb, f, Long.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void testFloat(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_float"); - f.setFloat(this, 9.9f); - if (f_float != 9.9f) { - throw new RuntimeException("FAILED. Field f_float has unexpected value: " + f_float); - } - checkPrimitiveType(wb, f, Float.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void testDouble(WhiteBox wb) { - try { - Field f = this.getClass().getDeclaredField("f_double"); - f.setDouble(this, 9.9); - if (f_double != 9.9) { - throw new RuntimeException("FAILED. Field f_double has unexpected value: " + f_double); - } - checkPrimitiveType(wb, f, Double.TYPE); - } catch (NoSuchFieldException nsfe) { - throw new RuntimeException(nsfe); - } catch (IllegalAccessException iae) { - throw new RuntimeException(iae); - } - } - - void checkPrimitiveType(WhiteBox wb, Field f, Class t) { - Class c = f.getType(); - if (!(c.isPrimitive() && c == t)) { - throw new RuntimeException("FAILED. " + c + " is not primitive type " + t); - } - if (wb.isShared(c)) { - System.out.println(c + " is cached, expected"); - } else { - throw new RuntimeException("FAILED. " + c + " is not cached."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/PrimitiveTypesApp.java 2019-07-24 08:26:56.985470126 -0400 @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.reflect.Field; +import sun.hotspot.WhiteBox; + +// +// Test primitive type class mirror objects are cached when open archive heap +// objects are mapped. +// +public class PrimitiveTypesApp { + public static void main(String[] args) { + WhiteBox wb = WhiteBox.getWhiteBox(); + if (!wb.areOpenArchiveHeapObjectsMapped()) { + System.out.println("Archived open_archive_heap objects are not mapped."); + System.out.println("This may happen during normal operation. Test Skipped."); + return; + } + + FieldsTest ft = new FieldsTest(); + ft.testBoolean(wb); + ft.testByte(wb); + ft.testChar(wb); + ft.testInt(wb); + ft.testShort(wb); + ft.testLong(wb); + ft.testFloat(wb); + ft.testDouble(wb); + } +} + +class FieldsTest { + public boolean f_boolean; + public byte f_byte; + public char f_char; + public int f_int; + public short f_short; + public long f_long; + public float f_float; + public double f_double; + + FieldsTest() { + f_byte = 1; + f_boolean = false; + f_char = 'a'; + f_int = 1; + f_short = 100; + f_long = 2018L; + f_float = 1.0f; + f_double = 2.5; + } + + void testBoolean(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_boolean"); + f.setBoolean(this, true); + if (!f_boolean) { + throw new RuntimeException("FAILED. Field f_boolean has unexpected value: " + f_boolean); + } + checkPrimitiveType(wb, f, Boolean.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void testByte(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_byte"); + f.setByte(this, (byte)9); + if (f_byte != (byte)9) { + throw new RuntimeException("FAILED. Field f_byte has unexpected value: " + f_byte); + } + checkPrimitiveType(wb, f, Byte.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void testChar(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_char"); + f.setChar(this, 'b'); + if (f_char != 'b') { + throw new RuntimeException("FAILED. Field f_char has unexpected value: " + f_char); + } + checkPrimitiveType(wb, f, Character.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void testInt(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_int"); + f.setInt(this, 9999); + if (f_int != 9999) { + throw new RuntimeException("FAILED. Field f_int has unexpected value: " + f_int); + } + checkPrimitiveType(wb, f, Integer.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void testShort(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_short"); + f.setShort(this, (short)99); + if (f_short != 99) { + throw new RuntimeException("FAILED. Field f_short has unexpected value: " + f_short); + } + checkPrimitiveType(wb, f, Short.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void testLong(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_long"); + f.setLong(this, 99L); + if (f_long != 99L) { + throw new RuntimeException("FAILED. Field f_long has unexpected value: " + f_long); + } + checkPrimitiveType(wb, f, Long.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void testFloat(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_float"); + f.setFloat(this, 9.9f); + if (f_float != 9.9f) { + throw new RuntimeException("FAILED. Field f_float has unexpected value: " + f_float); + } + checkPrimitiveType(wb, f, Float.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void testDouble(WhiteBox wb) { + try { + Field f = this.getClass().getDeclaredField("f_double"); + f.setDouble(this, 9.9); + if (f_double != 9.9) { + throw new RuntimeException("FAILED. Field f_double has unexpected value: " + f_double); + } + checkPrimitiveType(wb, f, Double.TYPE); + } catch (NoSuchFieldException nsfe) { + throw new RuntimeException(nsfe); + } catch (IllegalAccessException iae) { + throw new RuntimeException(iae); + } + } + + void checkPrimitiveType(WhiteBox wb, Field f, Class t) { + Class c = f.getType(); + if (!(c.isPrimitive() && c == t)) { + throw new RuntimeException("FAILED. " + c + " is not primitive type " + t); + } + if (wb.isShared(c)) { + System.out.println(c + " is cached, expected"); + } else { + throw new RuntimeException("FAILED. " + c + " is not cached."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/PrimitiveTypesTest.java 2019-07-24 08:26:57.657470102 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test archived primitive type mirrors - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @compile PrimitiveTypesApp.java - * @run driver ClassFileInstaller -jar app.jar PrimitiveTypesApp FieldsTest - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver PrimitiveTypesTest - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class PrimitiveTypesTest { - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("app.jar"); - - String classlist[] = new String[] { - "PrimitiveTypesApp", - "FieldsTest" - }; - - TestCommon.testDump(appJar, classlist, use_whitebox_jar); - OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-XX:+VerifyAfterGC", - "PrimitiveTypesApp"); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/PrimitiveTypesTest.java 2019-07-24 08:26:57.325470114 -0400 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test archived primitive type mirrors + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @compile PrimitiveTypesApp.java + * @run driver ClassFileInstaller -jar app.jar PrimitiveTypesApp FieldsTest + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver PrimitiveTypesTest + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class PrimitiveTypesTest { + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("app.jar"); + + String classlist[] = new String[] { + "PrimitiveTypesApp", + "FieldsTest" + }; + + TestCommon.testDump(appJar, classlist, use_whitebox_jar); + OutputAnalyzer output = TestCommon.exec(appJar, use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-XX:+VerifyAfterGC", + "PrimitiveTypesApp"); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/PrintSystemModulesApp.java 2019-07-24 08:26:58.097470087 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -// -// Print the system module names -// -public class PrintSystemModulesApp { - public static void main(String args[]) throws Exception { - String modules = ModuleLayer.boot().toString(); - System.out.println(modules + ", "); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/PrintSystemModulesApp.java 2019-07-24 08:26:57.773470098 -0400 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// +// Print the system module names +// +public class PrintSystemModulesApp { + public static void main(String args[]) throws Exception { + String modules = ModuleLayer.boot().toString(); + System.out.println(modules + ", "); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassApp.java 2019-07-24 08:26:58.461470074 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.instrument.ClassDefinition; -import java.lang.instrument.Instrumentation; -import java.lang.instrument.UnmodifiableClassException; -import java.net.URL; -import java.net.URLClassLoader; -import java.io.File; -import java.security.CodeSigner; -import java.security.CodeSource; -import java.security.ProtectionDomain; -import sun.hotspot.WhiteBox; - -public class RedefineClassApp { - static WhiteBox wb = WhiteBox.getWhiteBox(); - - public static interface Intf { // Loaded from Boot class loader (-Xbootclasspath/a). - public String get(); - } - public static class Bar implements Intf { // Loaded from Boot class loader. - public String get() { - return "buzz"; - } - } - public static class Foo implements Intf { // Loaded from AppClassLoader - public String get() { - return "buzz"; - } - } - - static int numTests = 0; - static int failed = 0; - static Instrumentation instrumentation; - - public static void main(String args[]) throws Throwable { - if (wb.areSharedStringsIgnored()) { - System.out.println("Shared strings are ignored."); - return; - } - - File bootJar = new File(args[0]); - File appJar = new File(args[1]); - - instrumentation = InstrumentationRegisterClassFileTransformer.getInstrumentation(); - System.out.println("INFO: instrumentation = " + instrumentation); - - testBootstrapCDS("Bootstrap Loader", bootJar); - testAppCDSv1("Application Loader", appJar); - - if (failed > 0) { - throw new RuntimeException("FINAL RESULT: " + failed + " out of " + numTests + " test case(s) have failed"); - } else { - System.out.println("FINAL RESULT: All " + numTests + " test case(s) have passed!"); - } - - // Full GC. The cached objects in adjustable archive heap regions are - // scanned. The archive regions are verified. No error should be - // reported. - wb.fullGC(); - } - - static void testBootstrapCDS(String group, File jar) throws Throwable { - doTest(group, new Bar(), jar); - } - - static void testAppCDSv1(String group, File jar) throws Throwable { - doTest(group, new Foo(), jar); - } - - static void checkArchivedMirrorObject(Class klass) { - if (wb.areOpenArchiveHeapObjectsMapped()) { - if (!wb.isShared(klass)) { - failed ++; - System.out.println("FAILED. " + klass + " mirror object is not archived"); - return; - } - } - } - - static void doTest(String group, Intf object, File jar) throws Throwable { - numTests ++; - - Class klass = object.getClass(); - System.out.println(); - System.out.println("++++++++++++++++++++++++++"); - System.out.println("Test group: " + group); - System.out.println("Testing with classloader = " + klass.getClassLoader()); - System.out.println("Testing with class = " + klass); - System.out.println("Test is shared = " + wb.isSharedClass(klass)); - System.out.println("++++++++++++++++++++++++++"); - - // Check archived mirror object before redefine - checkArchivedMirrorObject(klass); - - // Call get() before redefine. All strings in archived classes are shared. - String res = object.get(); - System.out.println("get() returns " + res); - if (res.equals("buzz") && wb.isShared(res)) { - System.out.println("get() returns " + res + ", string is shared"); - } else { - if (!res.equals("buzz")) { - System.out.println("FAILED. buzz is expected but got " + res); - } else { - System.out.println("FAILED. " + res + " is not shared"); - } - failed ++; - return; - } - res = null; // release the local reference to the string - - // Run GC - System.gc(); - System.gc(); - System.gc(); - - // Redefine the shared class - byte[] buff = Util.getClassFileFromJar(jar, klass.getName()); - Util.replace(buff, "buzz", "huzz"); - String f = "(failed)"; - try { - instrumentation.redefineClasses(new ClassDefinition(klass, buff)); - f = object.get(); - } catch (UnmodifiableClassException|UnsupportedOperationException e) { - e.printStackTrace(); - } - if (f.equals("huzz")) { - System.out.println("PASSED: object.get() after redefinition returns " + f); - } else { - System.out.println("FAILED: object.get() after redefinition returns " + f); - failed ++; - } - - // Run GC. Should not crash. - System.gc(); - System.gc(); - System.gc(); - - // Check archived mirror object after redefine and GC - checkArchivedMirrorObject(klass); - - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++ (done)\n\n"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/RedefineClassApp.java 2019-07-24 08:26:58.161470085 -0400 @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.instrument.ClassDefinition; +import java.lang.instrument.Instrumentation; +import java.lang.instrument.UnmodifiableClassException; +import java.net.URL; +import java.net.URLClassLoader; +import java.io.File; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.security.ProtectionDomain; +import sun.hotspot.WhiteBox; + +public class RedefineClassApp { + static WhiteBox wb = WhiteBox.getWhiteBox(); + + public static interface Intf { // Loaded from Boot class loader (-Xbootclasspath/a). + public String get(); + } + public static class Bar implements Intf { // Loaded from Boot class loader. + public String get() { + return "buzz"; + } + } + public static class Foo implements Intf { // Loaded from AppClassLoader + public String get() { + return "buzz"; + } + } + + static int numTests = 0; + static int failed = 0; + static Instrumentation instrumentation; + + public static void main(String args[]) throws Throwable { + if (wb.areSharedStringsIgnored()) { + System.out.println("Shared strings are ignored."); + return; + } + + File bootJar = new File(args[0]); + File appJar = new File(args[1]); + + instrumentation = InstrumentationRegisterClassFileTransformer.getInstrumentation(); + System.out.println("INFO: instrumentation = " + instrumentation); + + testBootstrapCDS("Bootstrap Loader", bootJar); + testAppCDSv1("Application Loader", appJar); + + if (failed > 0) { + throw new RuntimeException("FINAL RESULT: " + failed + " out of " + numTests + " test case(s) have failed"); + } else { + System.out.println("FINAL RESULT: All " + numTests + " test case(s) have passed!"); + } + + // Full GC. The cached objects in adjustable archive heap regions are + // scanned. The archive regions are verified. No error should be + // reported. + wb.fullGC(); + } + + static void testBootstrapCDS(String group, File jar) throws Throwable { + doTest(group, new Bar(), jar); + } + + static void testAppCDSv1(String group, File jar) throws Throwable { + doTest(group, new Foo(), jar); + } + + static void checkArchivedMirrorObject(Class klass) { + if (wb.areOpenArchiveHeapObjectsMapped()) { + if (!wb.isShared(klass)) { + failed ++; + System.out.println("FAILED. " + klass + " mirror object is not archived"); + return; + } + } + } + + static void doTest(String group, Intf object, File jar) throws Throwable { + numTests ++; + + Class klass = object.getClass(); + System.out.println(); + System.out.println("++++++++++++++++++++++++++"); + System.out.println("Test group: " + group); + System.out.println("Testing with classloader = " + klass.getClassLoader()); + System.out.println("Testing with class = " + klass); + System.out.println("Test is shared = " + wb.isSharedClass(klass)); + System.out.println("++++++++++++++++++++++++++"); + + // Check archived mirror object before redefine + checkArchivedMirrorObject(klass); + + // Call get() before redefine. All strings in archived classes are shared. + String res = object.get(); + System.out.println("get() returns " + res); + if (res.equals("buzz") && wb.isShared(res)) { + System.out.println("get() returns " + res + ", string is shared"); + } else { + if (!res.equals("buzz")) { + System.out.println("FAILED. buzz is expected but got " + res); + } else { + System.out.println("FAILED. " + res + " is not shared"); + } + failed ++; + return; + } + res = null; // release the local reference to the string + + // Run GC + System.gc(); + System.gc(); + System.gc(); + + // Redefine the shared class + byte[] buff = Util.getClassFileFromJar(jar, klass.getName()); + Util.replace(buff, "buzz", "huzz"); + String f = "(failed)"; + try { + instrumentation.redefineClasses(new ClassDefinition(klass, buff)); + f = object.get(); + } catch (UnmodifiableClassException|UnsupportedOperationException e) { + e.printStackTrace(); + } + if (f.equals("huzz")) { + System.out.println("PASSED: object.get() after redefinition returns " + f); + } else { + System.out.println("FAILED: object.get() after redefinition returns " + f); + failed ++; + } + + // Run GC. Should not crash. + System.gc(); + System.gc(); + System.gc(); + + // Check archived mirror object after redefine and GC + checkArchivedMirrorObject(klass); + + System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++ (done)\n\n"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassTest.java 2019-07-24 08:26:58.813470062 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Redefine shared class. GC should not cause crash with cached resolved_references. - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes /test/hotspot/jtreg/runtime/appcds/jvmti - * @requires vm.cds.archived.java.heap - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * @build sun.hotspot.WhiteBox - * RedefineClassApp - * InstrumentationClassFileTransformer - * InstrumentationRegisterClassFileTransformer - * @run driver RedefineClassTest - */ - -import com.sun.tools.attach.VirtualMachine; -import com.sun.tools.attach.VirtualMachineDescriptor; -import java.io.File; -import java.util.List; -import jdk.test.lib.Asserts; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class RedefineClassTest { - public static String bootClasses[] = { - "RedefineClassApp$Intf", - "RedefineClassApp$Bar", - "sun.hotspot.WhiteBox", - }; - public static String appClasses[] = { - "RedefineClassApp", - "RedefineClassApp$Foo", - }; - public static String sharedClasses[] = TestCommon.concat(bootClasses, appClasses); - - public static String agentClasses[] = { - "InstrumentationClassFileTransformer", - "InstrumentationRegisterClassFileTransformer", - "Util", - }; - - public static void main(String[] args) throws Throwable { - runTest(); - } - - public static void runTest() throws Throwable { - String bootJar = - ClassFileInstaller.writeJar("RedefineClassBoot.jar", bootClasses); - String appJar = - ClassFileInstaller.writeJar("RedefineClassApp.jar", appClasses); - String agentJar = - ClassFileInstaller.writeJar("InstrumentationAgent.jar", - ClassFileInstaller.Manifest.fromSourceFile("InstrumentationAgent.mf"), - agentClasses); - - String bootCP = "-Xbootclasspath/a:" + bootJar; - - String agentCmdArg; - agentCmdArg = "-javaagent:" + agentJar; - - TestCommon.testDump(appJar, sharedClasses, bootCP, "-Xlog:gc+region=trace"); - - OutputAnalyzer out = TestCommon.execAuto("-cp", appJar, - bootCP, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-Xlog:cds=info", - agentCmdArg, - "RedefineClassApp", bootJar, appJar); - out.reportDiagnosticSummary(); - - CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); - TestCommon.checkExec(out, opts); - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/RedefineClassTest.java 2019-07-24 08:26:58.517470072 -0400 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Redefine shared class. GC should not cause crash with cached resolved_references. + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes /test/hotspot/jtreg/runtime/cds/jvmti + * @requires vm.cds.archived.java.heap + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * @build sun.hotspot.WhiteBox + * RedefineClassApp + * InstrumentationClassFileTransformer + * InstrumentationRegisterClassFileTransformer + * @run driver RedefineClassTest + */ + +import com.sun.tools.attach.VirtualMachine; +import com.sun.tools.attach.VirtualMachineDescriptor; +import java.io.File; +import java.util.List; +import jdk.test.lib.Asserts; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class RedefineClassTest { + public static String bootClasses[] = { + "RedefineClassApp$Intf", + "RedefineClassApp$Bar", + "sun.hotspot.WhiteBox", + }; + public static String appClasses[] = { + "RedefineClassApp", + "RedefineClassApp$Foo", + }; + public static String sharedClasses[] = TestCommon.concat(bootClasses, appClasses); + + public static String agentClasses[] = { + "InstrumentationClassFileTransformer", + "InstrumentationRegisterClassFileTransformer", + "Util", + }; + + public static void main(String[] args) throws Throwable { + runTest(); + } + + public static void runTest() throws Throwable { + String bootJar = + ClassFileInstaller.writeJar("RedefineClassBoot.jar", bootClasses); + String appJar = + ClassFileInstaller.writeJar("RedefineClassApp.jar", appClasses); + String agentJar = + ClassFileInstaller.writeJar("InstrumentationAgent.jar", + ClassFileInstaller.Manifest.fromSourceFile("InstrumentationAgent.mf"), + agentClasses); + + String bootCP = "-Xbootclasspath/a:" + bootJar; + + String agentCmdArg; + agentCmdArg = "-javaagent:" + agentJar; + + TestCommon.testDump(appJar, sharedClasses, bootCP, "-Xlog:gc+region=trace"); + + OutputAnalyzer out = TestCommon.execAuto("-cp", appJar, + bootCP, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xlog:cds=info", + agentCmdArg, + "RedefineClassApp", bootJar, appJar); + out.reportDiagnosticSummary(); + + CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); + TestCommon.checkExec(out, opts); + } +} + --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/src/test/jdk/test/Test.java 2019-07-24 08:26:59.249470047 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,39 +0,0 @@ -/** - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.test; - -public class Test { - public static void main(String[] args) { - ClassLoader scl = ClassLoader.getSystemClassLoader(); - ClassLoader cl1 = Test.class.getClassLoader(); - Module testModule = Test.class.getModule(); - ClassLoader cl2 = ModuleLayer.boot().findLoader(testModule.getName()); - - if (cl1 != scl) - throw new RuntimeException("Not loaded by system class loader"); - if (cl2 != scl) - throw new RuntimeException("Not associated with system class loader"); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/src/test/jdk/test/Test.java 2019-07-24 08:26:58.925470058 -0400 @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test; + +public class Test { + public static void main(String[] args) { + ClassLoader scl = ClassLoader.getSystemClassLoader(); + ClassLoader cl1 = Test.class.getClassLoader(); + Module testModule = Test.class.getModule(); + ClassLoader cl2 = ModuleLayer.boot().findLoader(testModule.getName()); + + if (cl1 != scl) + throw new RuntimeException("Not loaded by system class loader"); + if (cl2 != scl) + throw new RuntimeException("Not associated with system class loader"); + + } +} --- old/test/hotspot/jtreg/runtime/appcds/cacheObject/src/test/module-info.java 2019-07-24 08:26:59.645470033 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -module test { -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cacheObject/src/test/module-info.java 2019-07-24 08:26:59.309470045 -0400 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +module test { +} --- old/test/hotspot/jtreg/runtime/appcds/cdsutils/DynamicDumpHelper.java 2019-07-24 08:26:59.997470021 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package cdsutils; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -/** - * This class is used to simulate -Xshare:dump with -XX:ArchiveClassesAtExit. - * It loads all classes specified in a classlist file. See patchJarForDynamicDump() - * in ../TestCommon.java for details. - */ -public class DynamicDumpHelper { - public static void main(String args[]) throws Throwable { - File file = new File(args[0]); - - System.out.println("Loading classes to share..."); - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - String line; - while ((line = br.readLine()) != null) { - //System.out.println("Loading class: " + line); - line = line.replace('/', '.'); - try { - Class.forName(line); - } catch (java.lang.ClassNotFoundException ex) { - try { - Class.forName(line, true, null); - } catch (java.lang.ClassNotFoundException cnfe) { - System.out.println("Preload Warning: Cannot find " + line.replace('.', '/')); - } - } catch (Throwable t) { - System.out.println("Error: failed to load \"" + line + "\": " + t); - } - } - } - System.out.println("Loading classes to share: done."); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/cdsutils/DynamicDumpHelper.java 2019-07-24 08:26:59.709470031 -0400 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package cdsutils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; + +/** + * This class is used to simulate -Xshare:dump with -XX:ArchiveClassesAtExit. + * It loads all classes specified in a classlist file. See patchJarForDynamicDump() + * in ../TestCommon.java for details. + */ +public class DynamicDumpHelper { + public static void main(String args[]) throws Throwable { + File file = new File(args[0]); + + System.out.println("Loading classes to share..."); + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String line; + while ((line = br.readLine()) != null) { + //System.out.println("Loading class: " + line); + line = line.replace('/', '.'); + try { + Class.forName(line); + } catch (java.lang.ClassNotFoundException ex) { + try { + Class.forName(line, true, null); + } catch (java.lang.ClassNotFoundException cnfe) { + System.out.println("Preload Warning: Cannot find " + line.replace('.', '/')); + } + } catch (Throwable t) { + System.out.println("Error: failed to load \"" + line + "\": " + t); + } + } + } + System.out.println("Loading classes to share: done."); + } +} --- old/test/hotspot/jtreg/runtime/appcds/condy/CondyHello.jasm 2019-07-24 08:27:00.389470007 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * This test uses ldc to load an integer value via a condy bootstrap method. - */ - -class CondyHello - version 55:0 -{ - -public static Method condyBSM:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;" - throws java/lang/Throwable - stack 4 locals 6 -{ - sipush 12345; - invokestatic Method java/lang/Integer.valueOf:"(I)Ljava/lang/Integer;"; - areturn; -} - -public static Method I:"()I" - stack 1 locals 0 -{ - ldc Dynamic REF_invokeStatic:CondyHello.condyBSM:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;":I:"I"; - ireturn; -} - -public static Method doit:"()I" - stack 4 locals 1 -{ - invokestatic Method I:"()I"; - ireturn; -} - -} // end Class CondyHello --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/condy/CondyHello.jasm 2019-07-24 08:27:00.061470018 -0400 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * This test uses ldc to load an integer value via a condy bootstrap method. + */ + +class CondyHello + version 55:0 +{ + +public static Method condyBSM:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;" + throws java/lang/Throwable + stack 4 locals 6 +{ + sipush 12345; + invokestatic Method java/lang/Integer.valueOf:"(I)Ljava/lang/Integer;"; + areturn; +} + +public static Method I:"()I" + stack 1 locals 0 +{ + ldc Dynamic REF_invokeStatic:CondyHello.condyBSM:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;":I:"I"; + ireturn; +} + +public static Method doit:"()I" + stack 4 locals 1 +{ + invokestatic Method I:"()I"; + ireturn; +} + +} // end Class CondyHello --- old/test/hotspot/jtreg/runtime/appcds/condy/CondyHelloApp.java 2019-07-24 08:27:00.789469993 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import sun.hotspot.WhiteBox; - -public class CondyHelloApp { - public static void main(String[] args) throws Throwable { - int n; - if ((n = CondyHello.doit()) != 12345) { - throw new java.lang.RuntimeException("Expected 12345 but got " + n); - } else { - System.out.println("n = " + n + " (as expected)"); - } - WhiteBox wb = WhiteBox.getWhiteBox(); - if (wb.isSharedClass(CondyHelloApp.class)) { - if (!wb.isSharedClass(CondyHello.class)) { - throw new java.lang.RuntimeException("CondyHello should be in shared space but is not."); - } else { - System.out.println("CondyHello.class is shared (as expected)"); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/condy/CondyHelloApp.java 2019-07-24 08:27:00.449470005 -0400 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.hotspot.WhiteBox; + +public class CondyHelloApp { + public static void main(String[] args) throws Throwable { + int n; + if ((n = CondyHello.doit()) != 12345) { + throw new java.lang.RuntimeException("Expected 12345 but got " + n); + } else { + System.out.println("n = " + n + " (as expected)"); + } + WhiteBox wb = WhiteBox.getWhiteBox(); + if (wb.isSharedClass(CondyHelloApp.class)) { + if (!wb.isSharedClass(CondyHello.class)) { + throw new java.lang.RuntimeException("CondyHello should be in shared space but is not."); + } else { + System.out.println("CondyHello.class is shared (as expected)"); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/condy/CondyHelloTest.java 2019-07-24 08:27:01.169469980 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @summary Make sure CDS works with a minimal test case that uses a CONSTANT_Dynamic constant-pool entry - * @requires (vm.cds) - * @modules java.base/jdk.internal.misc - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @build CondyHello - * @build sun.hotspot.WhiteBox CondyHelloTest CondyHelloApp - * @run driver ClassFileInstaller -jar condy_hello.jar CondyHello CondyHelloApp - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver CondyHelloTest - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class CondyHelloTest { - - static String classes[] = { - "CondyHello", - "CondyHelloApp", - }; - - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("condy_hello.jar"); - - TestCommon.dump(appJar, TestCommon.list(classes), use_whitebox_jar); - - TestCommon.run("-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-cp", appJar, - use_whitebox_jar, - "CondyHelloApp") - .assertNormalExit(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/condy/CondyHelloTest.java 2019-07-24 08:27:00.845469991 -0400 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Make sure CDS works with a minimal test case that uses a CONSTANT_Dynamic constant-pool entry + * @requires (vm.cds) + * @modules java.base/jdk.internal.misc + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @build CondyHello + * @build sun.hotspot.WhiteBox CondyHelloTest CondyHelloApp + * @run driver ClassFileInstaller -jar condy_hello.jar CondyHello CondyHelloApp + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver CondyHelloTest + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class CondyHelloTest { + + static String classes[] = { + "CondyHello", + "CondyHelloApp", + }; + + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("condy_hello.jar"); + + TestCommon.dump(appJar, TestCommon.list(classes), use_whitebox_jar); + + TestCommon.run("-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-cp", appJar, + use_whitebox_jar, + "CondyHelloApp") + .assertNormalExit(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatA.java 2019-07-24 08:27:01.593469965 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Tests the format checking of class list format. - * - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java - * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java - * @run driver ClassListFormatA - */ - -public class ClassListFormatA extends ClassListFormatBase { - static { - // Uncomment the following line to run only one of the test cases - // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE A1"; - } - - public static void main(String[] args) throws Throwable { - String appJar = JarBuilder.getOrCreateHelloJar(); - String customJarPath = JarBuilder.build("ClassListFormatA", "CustomLoadee", - "CustomLoadee2", "CustomInterface2_ia", "CustomInterface2_ib"); - //---------------------------------------------------------------------- - // TESTGROUP A: general bad input - //---------------------------------------------------------------------- - dumpShouldFail( - "TESTCASE A1: bad input - interface: instead of interfaces:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee interface: 1" - ), - "Unknown input:"); - - dumpShouldFail( - "TESTCASE A2: bad input - negative IDs not allowed", - appJar, classlist( - "Hello", - "java/lang/Object id: -1" - ), - "Error: negative integers not allowed"); - - dumpShouldFail( - "TESTCASE A3: bad input - bad ID (not an integer)", - appJar, classlist( - "Hello", - "java/lang/Object id: xyz" - ), - "Error: expected integer"); - - if (false) { - // FIXME - classFileParser.cpp needs fixing. - dumpShouldFail( - "TESTCASE A4: bad input - bad ID (integer too big)", - appJar, classlist( - "Hello", - "java/lang/Object id: 2147483648" // <- this is 0x80000000 - ), - "Error: expected integer"); - - // FIXME - dumpShouldFail( - "TESTCASE A5: bad input - bad ID (integer too big)", - appJar, classlist( - "Hello", - "java/lang/Object id: 21474836489" // bigger than 32-bit! - ), - "Error: expected integer"); - } - - // Good input: - dumpShouldPass( - "TESTCASE A6: extraneous spaces, tab characters and trailing new line characters", - appJar, classlist( - "Hello ", // trailing spaces - "java/lang/Object\tid:\t1", // \t instead of ' ' - "CustomLoadee id: 2 super: 1 source: " + customJarPath, - "CustomInterface2_ia id: 3 super: 1 source: " + customJarPath + " ", - "CustomInterface2_ib id: 4 super: 1 source: " + customJarPath + "\t\t\r" , - "CustomLoadee2 id: 5 super: 1 interfaces: 3 4 source: " + customJarPath // preceding spaces - )); - - int _max_allowed_line = 4096; // Must match ClassListParser::_max_allowed_line in C code. - int _line_buf_extra = 10; // Must match ClassListParser::_line_buf_extra in C code. - StringBuffer sbuf = new StringBuffer(); - for (int i=0; i<_max_allowed_line+1; i++) { - sbuf.append("x"); - } - - dumpShouldFail( - "TESTCASE A7: bad input - line too long", - appJar, classlist( - sbuf.toString() - ), - "input line too long (must be no longer than " + _max_allowed_line + " chars"); - - for (int i=0; i<_line_buf_extra + 1000; i++) { - sbuf.append("X"); - } - - dumpShouldFail( - "TESTCASE A8: bad input - line too long: try to overflow C buffer", - appJar, classlist( - sbuf.toString() - ), - "input line too long (must be no longer than " + _max_allowed_line + " chars"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/ClassListFormatA.java 2019-07-24 08:27:01.273469976 -0400 @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Tests the format checking of class list format. + * + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java + * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java + * @run driver ClassListFormatA + */ + +public class ClassListFormatA extends ClassListFormatBase { + static { + // Uncomment the following line to run only one of the test cases + // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE A1"; + } + + public static void main(String[] args) throws Throwable { + String appJar = JarBuilder.getOrCreateHelloJar(); + String customJarPath = JarBuilder.build("ClassListFormatA", "CustomLoadee", + "CustomLoadee2", "CustomInterface2_ia", "CustomInterface2_ib"); + //---------------------------------------------------------------------- + // TESTGROUP A: general bad input + //---------------------------------------------------------------------- + dumpShouldFail( + "TESTCASE A1: bad input - interface: instead of interfaces:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee interface: 1" + ), + "Unknown input:"); + + dumpShouldFail( + "TESTCASE A2: bad input - negative IDs not allowed", + appJar, classlist( + "Hello", + "java/lang/Object id: -1" + ), + "Error: negative integers not allowed"); + + dumpShouldFail( + "TESTCASE A3: bad input - bad ID (not an integer)", + appJar, classlist( + "Hello", + "java/lang/Object id: xyz" + ), + "Error: expected integer"); + + if (false) { + // FIXME - classFileParser.cpp needs fixing. + dumpShouldFail( + "TESTCASE A4: bad input - bad ID (integer too big)", + appJar, classlist( + "Hello", + "java/lang/Object id: 2147483648" // <- this is 0x80000000 + ), + "Error: expected integer"); + + // FIXME + dumpShouldFail( + "TESTCASE A5: bad input - bad ID (integer too big)", + appJar, classlist( + "Hello", + "java/lang/Object id: 21474836489" // bigger than 32-bit! + ), + "Error: expected integer"); + } + + // Good input: + dumpShouldPass( + "TESTCASE A6: extraneous spaces, tab characters and trailing new line characters", + appJar, classlist( + "Hello ", // trailing spaces + "java/lang/Object\tid:\t1", // \t instead of ' ' + "CustomLoadee id: 2 super: 1 source: " + customJarPath, + "CustomInterface2_ia id: 3 super: 1 source: " + customJarPath + " ", + "CustomInterface2_ib id: 4 super: 1 source: " + customJarPath + "\t\t\r" , + "CustomLoadee2 id: 5 super: 1 interfaces: 3 4 source: " + customJarPath // preceding spaces + )); + + int _max_allowed_line = 4096; // Must match ClassListParser::_max_allowed_line in C code. + int _line_buf_extra = 10; // Must match ClassListParser::_line_buf_extra in C code. + StringBuffer sbuf = new StringBuffer(); + for (int i=0; i<_max_allowed_line+1; i++) { + sbuf.append("x"); + } + + dumpShouldFail( + "TESTCASE A7: bad input - line too long", + appJar, classlist( + sbuf.toString() + ), + "input line too long (must be no longer than " + _max_allowed_line + " chars"); + + for (int i=0; i<_line_buf_extra + 1000; i++) { + sbuf.append("X"); + } + + dumpShouldFail( + "TESTCASE A8: bad input - line too long: try to overflow C buffer", + appJar, classlist( + sbuf.toString() + ), + "input line too long (must be no longer than " + _max_allowed_line + " chars"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatB.java 2019-07-24 08:27:01.993469951 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. - * - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java - * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java - * @run driver ClassListFormatB - */ - -public class ClassListFormatB extends ClassListFormatBase { - static { - // Uncomment the following line to run only one of the test cases - // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE B1"; - } - - public static void main(String[] args) throws Throwable { - String appJar = JarBuilder.getOrCreateHelloJar(); - String customJarPath = JarBuilder.build("ClassListFormatB", "CustomLoadee", - "CustomLoadee2", "CustomInterface2_ia", "CustomInterface2_ib"); - //---------------------------------------------------------------------- - // TESTGROUP B if source IS specified - //---------------------------------------------------------------------- - dumpShouldFail( - "TESTCASE B1: if source: is specified, must specify super:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee id: 2 source: " + customJarPath - ), - "If source location is specified, super class must be also specified"); - - dumpShouldFail( - "TESTCASE B2: if source: is specified, must specify id:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee super: 1 source: " + customJarPath - ), - "If source location is specified, id must be also specified"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/ClassListFormatB.java 2019-07-24 08:27:01.709469961 -0400 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. + * + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java + * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java + * @run driver ClassListFormatB + */ + +public class ClassListFormatB extends ClassListFormatBase { + static { + // Uncomment the following line to run only one of the test cases + // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE B1"; + } + + public static void main(String[] args) throws Throwable { + String appJar = JarBuilder.getOrCreateHelloJar(); + String customJarPath = JarBuilder.build("ClassListFormatB", "CustomLoadee", + "CustomLoadee2", "CustomInterface2_ia", "CustomInterface2_ib"); + //---------------------------------------------------------------------- + // TESTGROUP B if source IS specified + //---------------------------------------------------------------------- + dumpShouldFail( + "TESTCASE B1: if source: is specified, must specify super:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee id: 2 source: " + customJarPath + ), + "If source location is specified, super class must be also specified"); + + dumpShouldFail( + "TESTCASE B2: if source: is specified, must specify id:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee super: 1 source: " + customJarPath + ), + "If source location is specified, id must be also specified"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatBase.java 2019-07-24 08:27:02.437469936 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import jdk.test.lib.process.OutputAnalyzer; - -/** - * Base class for ClassListFormat[A,B,C...].java - */ -public class ClassListFormatBase { - protected static String RUN_ONLY_TEST = null; - - static void dumpShouldFail(String caseHelp, String appJar, String[] appClasses, - String... expected_errors) throws Throwable { - if (RUN_ONLY_TEST != null && !caseHelp.startsWith(RUN_ONLY_TEST)) { - System.out.println("Skipped via RUN_ONLY_TEST: " + caseHelp); - return; - } - System.out.println("------------------------------"); - System.out.println(caseHelp); - System.out.println("------------------------------"); - - try { - OutputAnalyzer output = TestCommon.dump(appJar, appClasses); - output.shouldHaveExitValue(1); - for (String s : expected_errors) { - output.shouldContain(s); - } - } catch (Throwable t) { - System.out.println("FAILED CASE: " + caseHelp); - throw t; - } - } - - static void dumpShouldPass(String caseHelp, String appJar, String[] appClasses, - String... expected_msgs) throws Throwable { - if (RUN_ONLY_TEST != null && !caseHelp.startsWith(RUN_ONLY_TEST)) { - System.out.println("Skipped via RUN_ONLY_TEST: " + caseHelp); - return; - } - System.out.println("------------------------------"); - System.out.println(caseHelp); - System.out.println("------------------------------"); - - try { - OutputAnalyzer output = TestCommon.dump(appJar, appClasses, "-Xlog:cds"); - output.shouldHaveExitValue(0); - output.shouldContain("Dumping"); - for (String s : expected_msgs) { - output.shouldContain(s); - } - } catch (Throwable t) { - System.out.println("FAILED CASE: " + caseHelp); - throw t; - } - } - - static String[] classlist(String... args) { - return TestCommon.list(args); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/ClassListFormatBase.java 2019-07-24 08:27:02.101469947 -0400 @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import jdk.test.lib.process.OutputAnalyzer; + +/** + * Base class for ClassListFormat[A,B,C...].java + */ +public class ClassListFormatBase { + protected static String RUN_ONLY_TEST = null; + + static void dumpShouldFail(String caseHelp, String appJar, String[] appClasses, + String... expected_errors) throws Throwable { + if (RUN_ONLY_TEST != null && !caseHelp.startsWith(RUN_ONLY_TEST)) { + System.out.println("Skipped via RUN_ONLY_TEST: " + caseHelp); + return; + } + System.out.println("------------------------------"); + System.out.println(caseHelp); + System.out.println("------------------------------"); + + try { + OutputAnalyzer output = TestCommon.dump(appJar, appClasses); + output.shouldHaveExitValue(1); + for (String s : expected_errors) { + output.shouldContain(s); + } + } catch (Throwable t) { + System.out.println("FAILED CASE: " + caseHelp); + throw t; + } + } + + static void dumpShouldPass(String caseHelp, String appJar, String[] appClasses, + String... expected_msgs) throws Throwable { + if (RUN_ONLY_TEST != null && !caseHelp.startsWith(RUN_ONLY_TEST)) { + System.out.println("Skipped via RUN_ONLY_TEST: " + caseHelp); + return; + } + System.out.println("------------------------------"); + System.out.println(caseHelp); + System.out.println("------------------------------"); + + try { + OutputAnalyzer output = TestCommon.dump(appJar, appClasses, "-Xlog:cds"); + output.shouldHaveExitValue(0); + output.shouldContain("Dumping"); + for (String s : expected_msgs) { + output.shouldContain(s); + } + } catch (Throwable t) { + System.out.println("FAILED CASE: " + caseHelp); + throw t; + } + } + + static String[] classlist(String... args) { + return TestCommon.list(args); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatC.java 2019-07-24 08:27:02.825469922 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. - * - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java - * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java - * @run driver ClassListFormatC - */ - -public class ClassListFormatC extends ClassListFormatBase { - static { - // Uncomment the following line to run only one of the test cases - // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE C1"; - } - - public static void main(String[] args) throws Throwable { - String appJar = JarBuilder.getOrCreateHelloJar(); - String customJarPath = JarBuilder.build("ClassListFormatC", "CustomLoadee", - "CustomLoadee2", "CustomInterface2_ia", - "CustomInterface2_ib"); - - //---------------------------------------------------------------------- - // TESTGROUP C: if source IS NOT specified - //---------------------------------------------------------------------- - dumpShouldFail( - "TESTCASE C1: if source: is NOT specified, must NOT specify super:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee super: 1" - ), - "If source location is not specified, super class must not be specified"); - - dumpShouldFail( - "TESTCASE C2: if source: is NOT specified, must NOT specify interface:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee interfaces: 1" - ), - "If source location is not specified, interface(s) must not be specified"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/ClassListFormatC.java 2019-07-24 08:27:02.501469933 -0400 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. + * + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java + * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java + * @run driver ClassListFormatC + */ + +public class ClassListFormatC extends ClassListFormatBase { + static { + // Uncomment the following line to run only one of the test cases + // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE C1"; + } + + public static void main(String[] args) throws Throwable { + String appJar = JarBuilder.getOrCreateHelloJar(); + String customJarPath = JarBuilder.build("ClassListFormatC", "CustomLoadee", + "CustomLoadee2", "CustomInterface2_ia", + "CustomInterface2_ib"); + + //---------------------------------------------------------------------- + // TESTGROUP C: if source IS NOT specified + //---------------------------------------------------------------------- + dumpShouldFail( + "TESTCASE C1: if source: is NOT specified, must NOT specify super:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee super: 1" + ), + "If source location is not specified, super class must not be specified"); + + dumpShouldFail( + "TESTCASE C2: if source: is NOT specified, must NOT specify interface:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee interfaces: 1" + ), + "If source location is not specified, interface(s) must not be specified"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatD.java 2019-07-24 08:27:03.265469907 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. - * - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java - * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java - * @run driver ClassListFormatD - */ - -public class ClassListFormatD extends ClassListFormatBase { - static { - // Uncomment the following line to run only one of the test cases - // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE D1"; - } - - public static void main(String[] args) throws Throwable { - String appJar = JarBuilder.getOrCreateHelloJar(); - String customJarPath = JarBuilder.build("ClassListFormatD", "CustomLoadee", - "CustomLoadee2", "CustomInterface2_ia", - "CustomInterface2_ib"); - - //---------------------------------------------------------------------- - // TESTGROUP D: bad use of IDs - //---------------------------------------------------------------------- - dumpShouldFail( - "TESTCASE D1: duplicated id:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee id: 1 super: 1 source: " + customJarPath - ), - "Duplicated ID 1 for class CustomLoadee"); - - dumpShouldFail( - "TESTCASE D2: bad ID for super:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee id: 2 super: 2 source: " + customJarPath - ), - "Super class id 2 is not yet loaded"); - - dumpShouldFail( - "TESTCASE D3: bad ID in interfaces:", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee id: 2 super: 1 interfaces: 2 source: " + customJarPath - ), - "Interface id 2 is not yet loaded"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/ClassListFormatD.java 2019-07-24 08:27:02.941469918 -0400 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. + * + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java + * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java + * @run driver ClassListFormatD + */ + +public class ClassListFormatD extends ClassListFormatBase { + static { + // Uncomment the following line to run only one of the test cases + // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE D1"; + } + + public static void main(String[] args) throws Throwable { + String appJar = JarBuilder.getOrCreateHelloJar(); + String customJarPath = JarBuilder.build("ClassListFormatD", "CustomLoadee", + "CustomLoadee2", "CustomInterface2_ia", + "CustomInterface2_ib"); + + //---------------------------------------------------------------------- + // TESTGROUP D: bad use of IDs + //---------------------------------------------------------------------- + dumpShouldFail( + "TESTCASE D1: duplicated id:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee id: 1 super: 1 source: " + customJarPath + ), + "Duplicated ID 1 for class CustomLoadee"); + + dumpShouldFail( + "TESTCASE D2: bad ID for super:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee id: 2 super: 2 source: " + customJarPath + ), + "Super class id 2 is not yet loaded"); + + dumpShouldFail( + "TESTCASE D3: bad ID in interfaces:", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee id: 2 super: 1 interfaces: 2 source: " + customJarPath + ), + "Interface id 2 is not yet loaded"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatE.java 2019-07-24 08:27:03.661469893 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. - * - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java - * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java - * @run driver ClassListFormatE - */ - -public class ClassListFormatE extends ClassListFormatBase { - static { - // Uncomment the following line to run only one of the test cases - // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE E1"; - } - - public static void main(String[] args) throws Throwable { - String appJar = JarBuilder.getOrCreateHelloJar(); - String customJarPath = JarBuilder.build("ClassListFormatE", "CustomLoadee", - "CustomLoadee2", "CustomInterface2_ia", - "CustomInterface2_ib"); - - //---------------------------------------------------------------------- - // TESTGROUP E: super class and interfaces - //---------------------------------------------------------------------- - dumpShouldFail( - "TESTCASE E1: missing interfaces: keyword", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomLoadee2 id: 1 super: 1 source: " + customJarPath - ), - "Class CustomLoadee2 implements the interface CustomInterface2_ia, but no interface has been specified in the input line"); - - dumpShouldFail( - "TESTCASE E2: missing one interface", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, - "CustomInterface2_ib id: 3 super: 1 source: " + customJarPath, - "CustomLoadee2 id: 4 super: 1 interfaces: 2 source: " + customJarPath - ), - "The interface CustomInterface2_ib implemented by class CustomLoadee2 does not match any of the specified interface IDs"); - - dumpShouldFail( - "TESTCASE E3: specifying an interface that's not implemented by the class", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, - "CustomLoadee id: 2 super: 1 interfaces: 2 source: " + customJarPath - ), - "The number of interfaces (1) specified in class list does not match the class file (0)"); - - dumpShouldFail( - "TESTCASE E4: repeating an ID in the interfaces: keyword", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, - "CustomInterface2_ib id: 3 super: 1 source: " + customJarPath, - "CustomLoadee2 id: 4 super: 1 interfaces: 2 2 3 source: " + customJarPath - ), - "The number of interfaces (3) specified in class list does not match the class file (2)"); - - dumpShouldFail( - "TESTCASE E5: wrong super class", - appJar, classlist( - "Hello", - "java/lang/Object id: 1", - "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, - "CustomInterface2_ib id: 3 super: 1 source: " + customJarPath, - "CustomLoadee id: 4 super: 1 source: " + customJarPath, - "CustomLoadee2 id: 5 super: 4 interfaces: 2 3 source: " + customJarPath - ), - "The specified super class CustomLoadee (id 4) does not match actual super class java.lang.Object"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/ClassListFormatE.java 2019-07-24 08:27:03.381469903 -0400 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp. + * + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java test-classes/CustomLoadee.java test-classes/CustomLoadee2.java + * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java + * @run driver ClassListFormatE + */ + +public class ClassListFormatE extends ClassListFormatBase { + static { + // Uncomment the following line to run only one of the test cases + // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE E1"; + } + + public static void main(String[] args) throws Throwable { + String appJar = JarBuilder.getOrCreateHelloJar(); + String customJarPath = JarBuilder.build("ClassListFormatE", "CustomLoadee", + "CustomLoadee2", "CustomInterface2_ia", + "CustomInterface2_ib"); + + //---------------------------------------------------------------------- + // TESTGROUP E: super class and interfaces + //---------------------------------------------------------------------- + dumpShouldFail( + "TESTCASE E1: missing interfaces: keyword", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomLoadee2 id: 1 super: 1 source: " + customJarPath + ), + "Class CustomLoadee2 implements the interface CustomInterface2_ia, but no interface has been specified in the input line"); + + dumpShouldFail( + "TESTCASE E2: missing one interface", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, + "CustomInterface2_ib id: 3 super: 1 source: " + customJarPath, + "CustomLoadee2 id: 4 super: 1 interfaces: 2 source: " + customJarPath + ), + "The interface CustomInterface2_ib implemented by class CustomLoadee2 does not match any of the specified interface IDs"); + + dumpShouldFail( + "TESTCASE E3: specifying an interface that's not implemented by the class", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, + "CustomLoadee id: 2 super: 1 interfaces: 2 source: " + customJarPath + ), + "The number of interfaces (1) specified in class list does not match the class file (0)"); + + dumpShouldFail( + "TESTCASE E4: repeating an ID in the interfaces: keyword", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, + "CustomInterface2_ib id: 3 super: 1 source: " + customJarPath, + "CustomLoadee2 id: 4 super: 1 interfaces: 2 2 3 source: " + customJarPath + ), + "The number of interfaces (3) specified in class list does not match the class file (2)"); + + dumpShouldFail( + "TESTCASE E5: wrong super class", + appJar, classlist( + "Hello", + "java/lang/Object id: 1", + "CustomInterface2_ia id: 2 super: 1 source: " + customJarPath, + "CustomInterface2_ib id: 3 super: 1 source: " + customJarPath, + "CustomLoadee id: 4 super: 1 source: " + customJarPath, + "CustomLoadee2 id: 5 super: 4 interfaces: 2 3 source: " + customJarPath + ), + "The specified super class CustomLoadee (id 4) does not match actual super class java.lang.Object"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/CustomLoaderApp.java 2019-07-24 08:27:04.089469878 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -// This is a utlitity test class for loading classes-under-test -// by means of custom class loader. -// See AppCDS/jvmti/transformRelatedClasses/TransformRelatedClasses.java -// for an example. -// Use this test app in conjunction with other tests -// to load and exercise classes using custom class loader(s). -// This class is intended to be called by the "main test driver" -// inside a child process, normally with sharing enabled. -// -// Arguments: customJarPath, loaderType, testClass -// customJarPath - a path to jar file containing classes for -// loading via this custom class loader, including the -// testClass -// loaderType - Currently only "unregistered" -// (Fingerprint verification method) is allowed -// testClass - the class to be loader; the test method with -// signature 'public static void test()' will be called -// on this class, so class must contain such method - - -import java.io.File; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.logging.Logger; - -public class CustomLoaderApp { - public static void ping() {}; - - private static void log(String msg) { - System.out.println("CustomLoaderApp: " + msg); - } - - public static void main(String[] args) throws Exception { - String path = args[0]; - URL url = new File(path).toURI().toURL(); - URL[] urls = new URL[] {url}; - - String loaderType = args[1]; - log("loaderType = " + loaderType); - - String testClass = args[2]; - log("testClass = " + testClass); - - switch(loaderType) { - case "unregistered": - loadAndUseWithUnregisteredLoader(urls, testClass); - break; - default: - throw new IllegalArgumentException("loader type is wrong: " + loaderType); - } - } - - - // Load the test classes using unregistered loader - // (i.e. loader that is not using AppCDS API) - private static void loadAndUseWithUnregisteredLoader(URL[] urls, String testClass) - throws Exception { - URLClassLoader urlClassLoader = new URLClassLoader(urls); - callTestMethod(loadAndCheck(urlClassLoader, testClass)); - } - - private static Class loadAndCheck(ClassLoader loader, String className) - throws ClassNotFoundException { - Class c = loader.loadClass(className); - log("class =" + c); - log("loader = " + c.getClassLoader()); - - // Check that c is defined by the correct loader - if (c.getClassLoader() != loader) { - String msg = String.format("c.getClassLoader() equals to <%s>, expected <%s>", - c.getClassLoader(), loader); - throw new RuntimeException(msg); - } - return c; - } - - private static void callTestMethod(Class c) throws Exception { - Method[] methods = c.getDeclaredMethods(); - for (Method m : methods) { - log("method = " + m.getName()); - if (m.getName().equals("test")) - m.invoke(null); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/CustomLoaderApp.java 2019-07-24 08:27:03.765469889 -0400 @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// This is a utlitity test class for loading classes-under-test +// by means of custom class loader. +// See AppCDS/jvmti/transformRelatedClasses/TransformRelatedClasses.java +// for an example. +// Use this test app in conjunction with other tests +// to load and exercise classes using custom class loader(s). +// This class is intended to be called by the "main test driver" +// inside a child process, normally with sharing enabled. +// +// Arguments: customJarPath, loaderType, testClass +// customJarPath - a path to jar file containing classes for +// loading via this custom class loader, including the +// testClass +// loaderType - Currently only "unregistered" +// (Fingerprint verification method) is allowed +// testClass - the class to be loader; the test method with +// signature 'public static void test()' will be called +// on this class, so class must contain such method + + +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.logging.Logger; + +public class CustomLoaderApp { + public static void ping() {}; + + private static void log(String msg) { + System.out.println("CustomLoaderApp: " + msg); + } + + public static void main(String[] args) throws Exception { + String path = args[0]; + URL url = new File(path).toURI().toURL(); + URL[] urls = new URL[] {url}; + + String loaderType = args[1]; + log("loaderType = " + loaderType); + + String testClass = args[2]; + log("testClass = " + testClass); + + switch(loaderType) { + case "unregistered": + loadAndUseWithUnregisteredLoader(urls, testClass); + break; + default: + throw new IllegalArgumentException("loader type is wrong: " + loaderType); + } + } + + + // Load the test classes using unregistered loader + // (i.e. loader that is not using AppCDS API) + private static void loadAndUseWithUnregisteredLoader(URL[] urls, String testClass) + throws Exception { + URLClassLoader urlClassLoader = new URLClassLoader(urls); + callTestMethod(loadAndCheck(urlClassLoader, testClass)); + } + + private static Class loadAndCheck(ClassLoader loader, String className) + throws ClassNotFoundException { + Class c = loader.loadClass(className); + log("class =" + c); + log("loader = " + c.getClassLoader()); + + // Check that c is defined by the correct loader + if (c.getClassLoader() != loader) { + String msg = String.format("c.getClassLoader() equals to <%s>, expected <%s>", + c.getClassLoader(), loader); + throw new RuntimeException(msg); + } + return c; + } + + private static void callTestMethod(Class c) throws Exception { + Method[] methods = c.getDeclaredMethods(); + for (Method m : methods) { + log("method = " + m.getName()); + if (m.getName().equals("test")) + m.invoke(null); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/HelloCustom.java 2019-07-24 08:27:04.461469865 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Hello World test for AppCDS custom loader support - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /runtime/testlibrary - * @modules java.base/jdk.internal.misc - * java.management - * @compile test-classes/HelloUnload.java test-classes/CustomLoadee.java - * @build sun.hotspot.WhiteBox ClassUnloadCommon - * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure - * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver HelloCustom - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class HelloCustom { - public static void main(String[] args) throws Exception { - run(); - } - public static void run(String... extra_runtime_args) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - - String appJar = ClassFileInstaller.getJarPath("hello.jar"); - String customJarPath = ClassFileInstaller.getJarPath("hello_custom.jar"); - - // Dump the archive - String classlist[] = new String[] { - "HelloUnload", - "java/lang/Object id: 1", - "CustomLoadee id: 2 super: 1 source: " + customJarPath - }; - - OutputAnalyzer output; - TestCommon.testDump(appJar, classlist, - // command-line arguments ... - use_whitebox_jar); - - output = TestCommon.exec(appJar, - TestCommon.concat(extra_runtime_args, - // command-line arguments ... - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "HelloUnload", customJarPath, "true", "true")); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/HelloCustom.java 2019-07-24 08:27:04.137469876 -0400 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Hello World test for AppCDS custom loader support + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds /runtime/testlibrary + * @modules java.base/jdk.internal.misc + * java.management + * @compile test-classes/HelloUnload.java test-classes/CustomLoadee.java + * @build sun.hotspot.WhiteBox ClassUnloadCommon + * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure + * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver HelloCustom + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class HelloCustom { + public static void main(String[] args) throws Exception { + run(); + } + public static void run(String... extra_runtime_args) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + + String appJar = ClassFileInstaller.getJarPath("hello.jar"); + String customJarPath = ClassFileInstaller.getJarPath("hello_custom.jar"); + + // Dump the archive + String classlist[] = new String[] { + "HelloUnload", + "java/lang/Object id: 1", + "CustomLoadee id: 2 super: 1 source: " + customJarPath + }; + + OutputAnalyzer output; + TestCommon.testDump(appJar, classlist, + // command-line arguments ... + use_whitebox_jar); + + output = TestCommon.exec(appJar, + TestCommon.concat(extra_runtime_args, + // command-line arguments ... + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "HelloUnload", customJarPath, "true", "true")); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/HelloCustom_JFR.java 2019-07-24 08:27:04.901469850 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Same as HelloCustom, but add -XX:StartFlightRecording=dumponexit=true to the runtime - * options. This makes sure that the shared classes are compatible with both - * JFR and JVMTI ClassFileLoadHook. - * @requires vm.hasJFR - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /runtime/testlibrary - * @compile test-classes/HelloUnload.java test-classes/CustomLoadee.java - * @build sun.hotspot.WhiteBox ClassUnloadCommon - * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure - * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver HelloCustom_JFR - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class HelloCustom_JFR { - public static void main(String[] args) throws Exception { - HelloCustom.run("-XX:StartFlightRecording=dumponexit=true", "-Xlog:cds+jvmti=debug"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/HelloCustom_JFR.java 2019-07-24 08:27:04.581469861 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Same as HelloCustom, but add -XX:StartFlightRecording=dumponexit=true to the runtime + * options. This makes sure that the shared classes are compatible with both + * JFR and JVMTI ClassFileLoadHook. + * @requires vm.hasJFR + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds /runtime/testlibrary + * @compile test-classes/HelloUnload.java test-classes/CustomLoadee.java + * @build sun.hotspot.WhiteBox ClassUnloadCommon + * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure + * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver HelloCustom_JFR + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class HelloCustom_JFR { + public static void main(String[] args) throws Exception { + HelloCustom.run("-XX:StartFlightRecording=dumponexit=true", "-Xlog:cds+jvmti=debug"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/LoaderSegregationTest.java 2019-07-24 08:27:05.349469834 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Check that during dumping, the classes for BOOT/EXT/APP loaders are segregated from the - * custom loader classes. - * @requires vm.cds - * @requires vm.cds.custom.loaders - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile test-classes/LoaderSegregation.java - * test-classes/CustomLoadee.java test-classes/CustomLoadee2.java - * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java - * test-classes/CustomLoadee3.java test-classes/CustomLoadee3Child.java - * test-classes/OnlyBuiltin.java - * test-classes/OnlyUnregistered.java - * ../test-classes/Util.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver LoaderSegregationTest - */ - -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -/** - * See "Handling of the classes in the AppCDS archive" at the top of - * systemDicrionatyShared.hpp. - * - * This test ensure that the 2 types of archived classes (BUILTIN and UNREGISTERED) - * are segregated at both dump-time and run time: - * - * [A] An archived BUILTIN class cannot be a subclass of a non-BUILTIN class. - * [B] An archived BUILTIN class cannot implement a non-BUILTIN interface. - * [C] BUILTIN and UNREGISTERED classes can be loaded only by their corresponding - * type of loaders. - * - */ -public class LoaderSegregationTest { - public static void main(String[] args) throws Exception { - String wbJar = JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - - String appJar = JarBuilder.build("LoaderSegregation_app", "LoaderSegregation", - "CustomLoadee", "CustomLoadee2", "CustomLoadee3Child", "CustomInterface2_ia", - "OnlyBuiltin", "Util"); - - String app2Jar = JarBuilder.build("LoaderSegregation_app2", "CustomLoadee3", "CustomInterface2_ib"); - - String customJarPath = JarBuilder.build("LoaderSegregation_custom", "CustomLoadee", - "CustomLoadee2", "CustomInterface2_ia", "CustomInterface2_ib", - "CustomLoadee3", "CustomLoadee3Child", - "OnlyBuiltin", "OnlyUnregistered"); - - // Dump the archive - String classlist[] = new String[] { - "LoaderSegregation", - "java/lang/Object id: 1", - - // These are the UNREGISTERED classes: they have "source:" - // but they don't have "loader:". - "CustomLoadee id: 2 super: 1 source: " + customJarPath, - - "CustomInterface2_ia id: 3 super: 1 source: " + customJarPath, - "CustomInterface2_ib id: 4 super: 1 source: " + customJarPath, - "CustomLoadee2 id: 5 super: 1 interfaces: 3 4 source: " + customJarPath, - - "CustomLoadee3 id: 6 super: 1 source: " + customJarPath, - "CustomLoadee3Child id: 7 super: 6 source: " + customJarPath, - - // At dump time, the following BUILTIN classes are loaded after the UNREGISTERED - // classes from above. However, at dump time, they cannot use the UNREGISTERED classes are their - // super or interface. - "CustomLoadee", // can be loaded at dump time - "CustomLoadee2", // cannot be loaded at dump time (interface missing) - "CustomLoadee3Child", // cannot be loaded at dump time (super missing) - - // Check that BUILTIN and UNREGISTERED classes can be loaded only by their - // corresponding type of loaders. - "OnlyBuiltin", - "OnlyUnregistered id: 9 super: 1 source: " + customJarPath, - }; - - OutputAnalyzer output; - TestCommon.testDump(appJar, classlist, - // command-line arguments ... - use_whitebox_jar); - - output = TestCommon.exec(TestCommon.concatPaths(appJar, app2Jar), - // command-line arguments ... - "--add-opens=java.base/java.lang=ALL-UNNAMED", - "--add-opens=java.base/java.security=ALL-UNNAMED", - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "LoaderSegregation", customJarPath); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/customLoader/LoaderSegregationTest.java 2019-07-24 08:27:05.013469846 -0400 @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Check that during dumping, the classes for BOOT/EXT/APP loaders are segregated from the + * custom loader classes. + * @requires vm.cds + * @requires vm.cds.custom.loaders + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile test-classes/LoaderSegregation.java + * test-classes/CustomLoadee.java test-classes/CustomLoadee2.java + * test-classes/CustomInterface2_ia.java test-classes/CustomInterface2_ib.java + * test-classes/CustomLoadee3.java test-classes/CustomLoadee3Child.java + * test-classes/OnlyBuiltin.java + * test-classes/OnlyUnregistered.java + * ../test-classes/Util.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver LoaderSegregationTest + */ + +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +/** + * See "Handling of the classes in the AppCDS archive" at the top of + * systemDicrionatyShared.hpp. + * + * This test ensure that the 2 types of archived classes (BUILTIN and UNREGISTERED) + * are segregated at both dump-time and run time: + * + * [A] An archived BUILTIN class cannot be a subclass of a non-BUILTIN class. + * [B] An archived BUILTIN class cannot implement a non-BUILTIN interface. + * [C] BUILTIN and UNREGISTERED classes can be loaded only by their corresponding + * type of loaders. + * + */ +public class LoaderSegregationTest { + public static void main(String[] args) throws Exception { + String wbJar = JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + + String appJar = JarBuilder.build("LoaderSegregation_app", "LoaderSegregation", + "CustomLoadee", "CustomLoadee2", "CustomLoadee3Child", "CustomInterface2_ia", + "OnlyBuiltin", "Util"); + + String app2Jar = JarBuilder.build("LoaderSegregation_app2", "CustomLoadee3", "CustomInterface2_ib"); + + String customJarPath = JarBuilder.build("LoaderSegregation_custom", "CustomLoadee", + "CustomLoadee2", "CustomInterface2_ia", "CustomInterface2_ib", + "CustomLoadee3", "CustomLoadee3Child", + "OnlyBuiltin", "OnlyUnregistered"); + + // Dump the archive + String classlist[] = new String[] { + "LoaderSegregation", + "java/lang/Object id: 1", + + // These are the UNREGISTERED classes: they have "source:" + // but they don't have "loader:". + "CustomLoadee id: 2 super: 1 source: " + customJarPath, + + "CustomInterface2_ia id: 3 super: 1 source: " + customJarPath, + "CustomInterface2_ib id: 4 super: 1 source: " + customJarPath, + "CustomLoadee2 id: 5 super: 1 interfaces: 3 4 source: " + customJarPath, + + "CustomLoadee3 id: 6 super: 1 source: " + customJarPath, + "CustomLoadee3Child id: 7 super: 6 source: " + customJarPath, + + // At dump time, the following BUILTIN classes are loaded after the UNREGISTERED + // classes from above. However, at dump time, they cannot use the UNREGISTERED classes are their + // super or interface. + "CustomLoadee", // can be loaded at dump time + "CustomLoadee2", // cannot be loaded at dump time (interface missing) + "CustomLoadee3Child", // cannot be loaded at dump time (super missing) + + // Check that BUILTIN and UNREGISTERED classes can be loaded only by their + // corresponding type of loaders. + "OnlyBuiltin", + "OnlyUnregistered id: 9 super: 1 source: " + customJarPath, + }; + + OutputAnalyzer output; + TestCommon.testDump(appJar, classlist, + // command-line arguments ... + use_whitebox_jar); + + output = TestCommon.exec(TestCommon.concatPaths(appJar, app2Jar), + // command-line arguments ... + "--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.base/java.security=ALL-UNNAMED", + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "LoaderSegregation", customJarPath); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestBase.java 2019-07-24 08:27:05.749469820 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import jdk.test.lib.process.OutputAnalyzer; - -/* - * This is a base class for the following test cases: - * ParallelTestMultiFP.java - * ParallelTestSingleFP.java - */ -public class ParallelTestBase { - public static final int MAX_CLASSES = 40; // must match ../test-classes/ParallelLoad.java - public static int NUM_THREADS = 4; // must match ../test-classes/ParallelLoad.java - - public static final int SINGLE_CUSTOM_LOADER = 1; - public static final int MULTI_CUSTOM_LOADER = 2; - - public static final int FINGERPRINT_MODE = 1; - - public static void run(String[] args, int loaderType, int mode) throws Exception { - String[] cust_classes = new String[MAX_CLASSES]; - String[] cust_list; - - if (mode == FINGERPRINT_MODE) { - cust_list = new String[MAX_CLASSES]; - } else { - cust_list = new String[MAX_CLASSES * NUM_THREADS]; - } - - for (int i = 0; i { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - - // runtime with classpath containing the one used in dump time, - // i.e. the dump time classpath is a prefix of the runtime classpath. - run(topArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar + File.pathSeparator + appJar2, - "HelloMore") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldContain("Hello World ... More") - .shouldHaveExitValue(0); - }); - - // reverse the order of the 2 jar files so that the dump time classpath - // is no longer a prefix of the runtime classpath. The Hello class - // should be loaded from the jar file. - run(topArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar2 + File.pathSeparator + appJar, - "HelloMore") - .assertAbnormalExit(output -> { - output.shouldContain("shared class paths mismatch") - .shouldHaveExitValue(1); - }); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/AppendClasspath.java 2019-07-24 08:27:15.809469470 -0400 @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary At run time, it is OK to append new elements to the classpath that was used at dump time. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java + * @compile ../test-classes/HelloMore.java + * @run driver AppendClasspath + */ + +import java.io.File; + +public class AppendClasspath extends DynamicArchiveTestBase { + + public static void main(String[] args) throws Exception { + runTest(AppendClasspath::testDefaultBase); + } + + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(topArchiveName); + } + + private static void doTest(String topArchiveName) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appJar2 = JarBuilder.build("AppendClasspath_HelloMore", "HelloMore"); + + // Dump an archive with a specified JAR file in -classpath + dump(topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, "Hello") + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + + // runtime with classpath containing the one used in dump time, + // i.e. the dump time classpath is a prefix of the runtime classpath. + run(topArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar + File.pathSeparator + appJar2, + "HelloMore") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldContain("Hello World ... More") + .shouldHaveExitValue(0); + }); + + // reverse the order of the 2 jar files so that the dump time classpath + // is no longer a prefix of the runtime classpath. The Hello class + // should be loaded from the jar file. + run(topArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar2 + File.pathSeparator + appJar, + "HelloMore") + .assertAbnormalExit(output -> { + output.shouldContain("shared class paths mismatch") + .shouldHaveExitValue(1); + }); + + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/ArchiveConsistency.java 2019-07-24 08:27:16.517469445 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Corrupt the header CRC fields of the top archive. VM should exit with an error. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @build Hello sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar hello.jar Hello - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI ArchiveConsistency - */ - -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.channels.FileChannel; -import java.nio.file.StandardOpenOption; -import static java.nio.file.StandardOpenOption.READ; -import static java.nio.file.StandardOpenOption.WRITE; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import sun.hotspot.WhiteBox; - -public class ArchiveConsistency extends DynamicArchiveTestBase { - public static WhiteBox wb; - public static int int_size; // size of int - public static String[] shared_region_name = {"MiscCode", "ReadWrite", "ReadOnly", "MiscData"}; - public static int num_regions = shared_region_name.length; - - public static void main(String[] args) throws Exception { - runTest(ArchiveConsistency::testCustomBase); - } - - // Test with custom base archive + top archive - static void testCustomBase() throws Exception { - String topArchiveName = getNewArchiveName("top2"); - String baseArchiveName = getNewArchiveName("base"); - dumpBaseArchive(baseArchiveName); - doTest(baseArchiveName, topArchiveName); - } - - public static void setReadWritePermission(File file) throws Exception { - if (!file.canRead()) { - if (!file.setReadable(true)) { - throw new IOException("Cannot modify file " + file + " as readable"); - } - } - if (!file.canWrite()) { - if (!file.setWritable(true)) { - throw new IOException("Cannot modify file " + file + " as writable"); - } - } - } - - public static long readInt(FileChannel fc, long offset, int nbytes) throws Exception { - ByteBuffer bb = ByteBuffer.allocate(nbytes); - bb.order(ByteOrder.nativeOrder()); - fc.position(offset); - fc.read(bb); - return (nbytes > 4 ? bb.getLong(0) : bb.getInt(0)); - } - - public static long align_up_page(long l) throws Exception { - // wb is obtained in getFileOffsetInfo() which is called first in main() else we should call - // WhiteBox.getWhiteBox() here first. - int pageSize = wb.getVMPageSize(); - return (l + pageSize -1) & (~ (pageSize - 1)); - } - - public static void writeData(FileChannel fc, long offset, ByteBuffer bb) throws Exception { - fc.position(offset); - fc.write(bb); - fc.force(true); - } - - public static FileChannel getFileChannel(File jsa) throws Exception { - List arry = new ArrayList(); - arry.add(READ); - arry.add(WRITE); - return FileChannel.open(jsa.toPath(), new HashSet(arry)); - } - - public static void modifyJsaHeaderCRC(File jsa) throws Exception { - FileChannel fc = getFileChannel(jsa); - int_size = wb.getOffsetForName("int_size"); - System.out.println(" int_size " + int_size); - ByteBuffer bbuf = ByteBuffer.allocateDirect(int_size); - for (int i = 0; i < int_size; i++) { - bbuf.put((byte)0); - } - - int baseArchiveCRCOffset = wb.getOffsetForName("DynamicArchiveHeader::_base_archive_crc"); - int crc = 0; - System.out.printf("%-12s%-12s\n", "Space name", "CRC"); - for (int i = 0; i < 4; i++) { - baseArchiveCRCOffset += int_size * i; - System.out.println(" baseArchiveCRCOffset " + baseArchiveCRCOffset); - crc = (int)readInt(fc, baseArchiveCRCOffset, int_size ); - System.out.printf("%-11s%-12d\n", shared_region_name[i], crc); - bbuf.rewind(); - writeData(fc, baseArchiveCRCOffset, bbuf); - } - fc.force(true); - if (fc.isOpen()) { - fc.close(); - } - } - - private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { - String appJar = ClassFileInstaller.getJarPath("hello.jar"); - String mainClass = "Hello"; - dump2(baseArchiveName, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - - File jsa = new File(topArchiveName); - if (!jsa.exists()) { - throw new IOException(jsa + " does not exist!"); - } - - // Modify the CRC values in the header of the top archive. - wb = WhiteBox.getWhiteBox(); - setReadWritePermission(jsa); - modifyJsaHeaderCRC(jsa); - - run2(baseArchiveName, topArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-XX:+VerifySharedSpaces", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldContain("Header checksum verification failed") - .shouldContain("Unable to use shared archive") - .shouldHaveExitValue(1); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/ArchiveConsistency.java 2019-07-24 08:27:16.229469455 -0400 @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Corrupt the header CRC fields of the top archive. VM should exit with an error. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @build Hello sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar hello.jar Hello + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI ArchiveConsistency + */ + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.channels.FileChannel; +import java.nio.file.StandardOpenOption; +import static java.nio.file.StandardOpenOption.READ; +import static java.nio.file.StandardOpenOption.WRITE; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import sun.hotspot.WhiteBox; + +public class ArchiveConsistency extends DynamicArchiveTestBase { + public static WhiteBox wb; + public static int int_size; // size of int + public static String[] shared_region_name = {"MiscCode", "ReadWrite", "ReadOnly", "MiscData"}; + public static int num_regions = shared_region_name.length; + + public static void main(String[] args) throws Exception { + runTest(ArchiveConsistency::testCustomBase); + } + + // Test with custom base archive + top archive + static void testCustomBase() throws Exception { + String topArchiveName = getNewArchiveName("top2"); + String baseArchiveName = getNewArchiveName("base"); + dumpBaseArchive(baseArchiveName); + doTest(baseArchiveName, topArchiveName); + } + + public static void setReadWritePermission(File file) throws Exception { + if (!file.canRead()) { + if (!file.setReadable(true)) { + throw new IOException("Cannot modify file " + file + " as readable"); + } + } + if (!file.canWrite()) { + if (!file.setWritable(true)) { + throw new IOException("Cannot modify file " + file + " as writable"); + } + } + } + + public static long readInt(FileChannel fc, long offset, int nbytes) throws Exception { + ByteBuffer bb = ByteBuffer.allocate(nbytes); + bb.order(ByteOrder.nativeOrder()); + fc.position(offset); + fc.read(bb); + return (nbytes > 4 ? bb.getLong(0) : bb.getInt(0)); + } + + public static long align_up_page(long l) throws Exception { + // wb is obtained in getFileOffsetInfo() which is called first in main() else we should call + // WhiteBox.getWhiteBox() here first. + int pageSize = wb.getVMPageSize(); + return (l + pageSize -1) & (~ (pageSize - 1)); + } + + public static void writeData(FileChannel fc, long offset, ByteBuffer bb) throws Exception { + fc.position(offset); + fc.write(bb); + fc.force(true); + } + + public static FileChannel getFileChannel(File jsa) throws Exception { + List arry = new ArrayList(); + arry.add(READ); + arry.add(WRITE); + return FileChannel.open(jsa.toPath(), new HashSet(arry)); + } + + public static void modifyJsaHeaderCRC(File jsa) throws Exception { + FileChannel fc = getFileChannel(jsa); + int_size = wb.getOffsetForName("int_size"); + System.out.println(" int_size " + int_size); + ByteBuffer bbuf = ByteBuffer.allocateDirect(int_size); + for (int i = 0; i < int_size; i++) { + bbuf.put((byte)0); + } + + int baseArchiveCRCOffset = wb.getOffsetForName("DynamicArchiveHeader::_base_archive_crc"); + int crc = 0; + System.out.printf("%-12s%-12s\n", "Space name", "CRC"); + for (int i = 0; i < 4; i++) { + baseArchiveCRCOffset += int_size * i; + System.out.println(" baseArchiveCRCOffset " + baseArchiveCRCOffset); + crc = (int)readInt(fc, baseArchiveCRCOffset, int_size ); + System.out.printf("%-11s%-12d\n", shared_region_name[i], crc); + bbuf.rewind(); + writeData(fc, baseArchiveCRCOffset, bbuf); + } + fc.force(true); + if (fc.isOpen()) { + fc.close(); + } + } + + private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { + String appJar = ClassFileInstaller.getJarPath("hello.jar"); + String mainClass = "Hello"; + dump2(baseArchiveName, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + + File jsa = new File(topArchiveName); + if (!jsa.exists()) { + throw new IOException(jsa + " does not exist!"); + } + + // Modify the CRC values in the header of the top archive. + wb = WhiteBox.getWhiteBox(); + setReadWritePermission(jsa); + modifyJsaHeaderCRC(jsa); + + run2(baseArchiveName, topArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-XX:+VerifySharedSpaces", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldContain("Header checksum verification failed") + .shouldContain("Unable to use shared archive") + .shouldHaveExitValue(1); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/ArrayKlasses.java 2019-07-24 08:27:16.925469431 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary handling of the existence of InstanceKlass::array_klasses() - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * /test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes - * @build ArrayKlassesApp - * @run driver ClassFileInstaller -jar ArrayKlasses.jar - * ArrayKlassesApp - * @run driver ArrayKlasses - */ - -public class ArrayKlasses extends DynamicArchiveTestBase { - public static void main(String[] args) throws Exception { - runTest(ArrayKlasses::test); - } - - static void test() throws Exception { - String topArchiveName = getNewArchiveName(); - String appJar = ClassFileInstaller.getJarPath("ArrayKlasses.jar"); - String mainClass = "ArrayKlassesApp"; - - dumpAndRun(topArchiveName, "-Xlog:cds+dynamic=debug", "-cp", appJar, mainClass); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/ArrayKlasses.java 2019-07-24 08:27:16.633469441 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary handling of the existence of InstanceKlass::array_klasses() + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * /test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes + * @build ArrayKlassesApp + * @run driver ClassFileInstaller -jar ArrayKlasses.jar + * ArrayKlassesApp + * @run driver ArrayKlasses + */ + +public class ArrayKlasses extends DynamicArchiveTestBase { + public static void main(String[] args) throws Exception { + runTest(ArrayKlasses::test); + } + + static void test() throws Exception { + String topArchiveName = getNewArchiveName(); + String appJar = ClassFileInstaller.getJarPath("ArrayKlasses.jar"); + String mainClass = "ArrayKlassesApp"; + + dumpAndRun(topArchiveName, "-Xlog:cds+dynamic=debug", "-cp", appJar, mainClass); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/ClassResolutionFailure.java 2019-07-24 08:27:17.301469418 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test with a jar file which contains only the main class but not the dependent class. - * The main class should be archived. During run time, the main class - * should be loaded from the archive. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes - * @build StrConcatApp - * @build MissingDependent - * @run driver ClassFileInstaller -jar missingDependent.jar MissingDependent - * @run driver ClassResolutionFailure - */ - -public class ClassResolutionFailure extends DynamicArchiveTestBase { - - public static void main(String[] args) throws Exception { - runTest(ClassResolutionFailure::testDefaultBase); - } - - // Test with default base archive + top archive - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - doTest(topArchiveName); - } - - private static void doTest(String topArchiveName) throws Exception { - String appJar = ClassFileInstaller.getJarPath("missingDependent.jar"); - String mainClass = "MissingDependent"; - - dump(topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-Xlog:class+load=trace", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - - run(topArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("MissingDependent source: shared objects file") - .shouldHaveExitValue(0); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/ClassResolutionFailure.java 2019-07-24 08:27:17.025469427 -0400 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test with a jar file which contains only the main class but not the dependent class. + * The main class should be archived. During run time, the main class + * should be loaded from the archive. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes + * @build StrConcatApp + * @build MissingDependent + * @run driver ClassFileInstaller -jar missingDependent.jar MissingDependent + * @run driver ClassResolutionFailure + */ + +public class ClassResolutionFailure extends DynamicArchiveTestBase { + + public static void main(String[] args) throws Exception { + runTest(ClassResolutionFailure::testDefaultBase); + } + + // Test with default base archive + top archive + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(topArchiveName); + } + + private static void doTest(String topArchiveName) throws Exception { + String appJar = ClassFileInstaller.getJarPath("missingDependent.jar"); + String mainClass = "MissingDependent"; + + dump(topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-Xlog:class+load=trace", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + + run(topArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("MissingDependent source: shared objects file") + .shouldHaveExitValue(0); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/DynamicArchiveTestBase.java 2019-07-24 08:27:17.737469403 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,265 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.cds.CDSTestUtils.Result; - -/** - * Base class for test cases in test/hotspot/jtreg/runtime/appcds/dynamicArchive/ - */ -class DynamicArchiveTestBase { - private static boolean executedIn_run = false; - - public static interface DynamicArchiveTest { - public void run() throws Exception; - } - - public static interface DynamicArchiveTestWithArgs { - public void run(String args[]) throws Exception; - } - - - /* - * Tests for dynamic archives should be written using this pattern: - * - * public class HelloDynamic extends DynamicArchiveTestBase { - * public static void main(String[] args) throws Exception { - * runTest(HelloDynamic::testDefaultBase); // launch one test case - * } - * - * // the body of a test case - * static void testDefaultBase() throws Exception { - * String topArchiveName = getNewArchiveName("top"); - * doTest(null, topArchiveName); - * } - * } - * - * The reason for this is so that we can clean up the archive files - * created by prior test cases. Otherwise tests with lots of - * test cases may fill up the scratch directory. - */ - public static void runTest(DynamicArchiveTest t) throws Exception { - executedIn_run = true; - try { - TestCommon.deletePriorArchives(); - t.run(); - } finally { - executedIn_run = false; - } - } - - public static void runTest(DynamicArchiveTestWithArgs t, String... args) throws Exception { - executedIn_run = true; - try { - TestCommon.deletePriorArchives(); - t.run(args); - } finally { - executedIn_run = false; - } - } - - public static String getNewArchiveName() { - return TestCommon.getNewArchiveName(); - } - public static String getNewArchiveName(String stem) { - return TestCommon.getNewArchiveName(stem); - } - - /** - * Execute a JVM using the base archive (given by baseArchiveName) with the command line - * (given by cmdLineSuffix). At JVM exit, dump all eligible classes into the top archive - * (give by topArchiveName). - * - * If baseArchiveName is null, use the JDK's default archive as the base archive. - */ - public static Result dump2(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) - throws Exception - { - String[] cmdLine = TestCommon.concat( - "-XX:ArchiveClassesAtExit=" + topArchiveName); - // to allow dynamic archive tests to be run in the "rt-non-cds-mode" - cmdLine = TestCommon.concat(cmdLine, "-Xshare:auto"); - if (baseArchiveName != null) { - cmdLine = TestCommon.concat(cmdLine, "-XX:SharedArchiveFile=" + baseArchiveName); - } - cmdLine = TestCommon.concat(cmdLine, cmdLineSuffix); - return execProcess("dump", null, cmdLine); - } - - public static Result dump2_WB(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) - throws Exception - { - return dump2(baseArchiveName, topArchiveName, - TestCommon.concat(wbRuntimeArgs(), cmdLineSuffix)); - } - - /** - * A convenience method similar to dump2, but always use the JDK's default archive - * as the base archive. - * - * Most dynamicArchive/*.java test cases should be using this method instead of run2. - */ - public static Result dump(String topArchiveName, String ... cmdLineSuffix) - throws Exception - { - return dump2(null, topArchiveName, cmdLineSuffix); - } - - /** - * Dump the base archive. The JDK's default class list is used (unless otherwise specified - * in cmdLineSuffix). - */ - public static void dumpBaseArchive(String baseArchiveName, String ... cmdLineSuffix) - throws Exception - { - CDSOptions opts = new CDSOptions(); - opts.setArchiveName(baseArchiveName); - opts.addSuffix(cmdLineSuffix); - opts.addSuffix("-Djava.class.path="); - OutputAnalyzer out = CDSTestUtils.createArchive(opts); - CDSTestUtils.checkDump(out); - } - - /** - * Same as dumpBaseArchive, but also add WhiteBox to the bootcp - */ - public static void dumpBaseArchive_WB(String baseArchiveName, String ... cmdLineSuffix) - throws Exception - { - dumpBaseArchive(baseArchiveName, - TestCommon.concat("-Xbootclasspath/a:" + getWhiteBoxJar(), cmdLineSuffix)); - } - - private static String getWhiteBoxJar() { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - if (!(new File(wbJar)).exists()) { - throw new RuntimeException("Test error: your test must have " + - "'@run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox'"); - } - return wbJar; - } - - private static String[] wbRuntimeArgs() { - return TestCommon.concat("-Xbootclasspath/a:" + getWhiteBoxJar(), - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI"); - } - - /** - * Execute a JVM using the base archive (given by baseArchiveName) and the top archive - * (give by topArchiveName), using the command line (given by cmdLineSuffix). - * - * If baseArchiveName is null, use the JDK's default archive as the base archive. - */ - public static Result run2(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) - throws Exception { - if (baseArchiveName == null && topArchiveName == null) { - throw new RuntimeException("Both baseArchiveName and topArchiveName cannot be null at the same time."); - } - String archiveFiles = (baseArchiveName == null) ? topArchiveName : - (topArchiveName == null) ? baseArchiveName : - baseArchiveName + File.pathSeparator + topArchiveName; - String[] cmdLine = TestCommon.concat( - "-Xshare:on", - "-XX:SharedArchiveFile=" + archiveFiles); - cmdLine = TestCommon.concat(cmdLine, cmdLineSuffix); - return execProcess("exec", null, cmdLine); - } - - public static Result runWithRelativePath(String baseArchiveName, String topArchiveName, - String jarDir, String ... cmdLineSuffix) - throws Exception { - if (baseArchiveName == null && topArchiveName == null) { - throw new RuntimeException("Both baseArchiveName and topArchiveName cannot be null at the same time."); - } - String archiveFiles = (baseArchiveName == null) ? topArchiveName : - (topArchiveName == null) ? baseArchiveName : - baseArchiveName + File.pathSeparator + topArchiveName; - String[] cmdLine = TestCommon.concat( - "-Xshare:on", - "-XX:SharedArchiveFile=" + archiveFiles); - cmdLine = TestCommon.concat(cmdLine, cmdLineSuffix); - return execProcess("exec", jarDir, cmdLine); - } - - public static Result run2_WB(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) - throws Exception - { - return run2(baseArchiveName, topArchiveName, - TestCommon.concat(wbRuntimeArgs(), cmdLineSuffix)); - } - - /** - * A convenience method similar to run2, but always use the JDK's default archive - * as the base archive. - * - * Most dynamicArchive/*.java test cases should be using this method instead of run2. - */ - public static Result run(String topArchiveName, String ... cmdLineSuffix) - throws Exception - { - return run2(null, topArchiveName, cmdLineSuffix); - } - - private static String getXshareMode(String[] cmdLine) { - for (int i = 0; i <= cmdLine.length - 1; i++) { - int j = cmdLine[i].indexOf("-Xshare:"); - if (j != -1) { - return (cmdLine[i].substring(j)); - } - } - return null; - } - - - private static Result execProcess(String mode, String jarDir, String[] cmdLine) throws Exception { - if (!executedIn_run) { - throw new Exception("Test error: dynamic archive tests must be executed via DynamicArchiveTestBase.run()"); - } - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine); - if (jarDir != null) { - pb.directory(new File(jarDir)); - } - OutputAnalyzer output = TestCommon.executeAndLog(pb, mode); - CDSOptions opts = new CDSOptions(); - String xShareMode = getXshareMode(cmdLine); - if (xShareMode != null) { - opts.setXShareMode(xShareMode); - } - return new Result(opts, output); - } - - /** - * A convenience method for dumping and running, using the default CDS archive from the - * JDK. Both dumping and running should exit normally. - */ - public static void dumpAndRun(String topArchiveName, String ... cmdLineSuffix) throws Exception { - dump(topArchiveName, cmdLineSuffix).assertNormalExit(); - run(topArchiveName, cmdLineSuffix).assertNormalExit(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/DynamicArchiveTestBase.java 2019-07-24 08:27:17.405469414 -0400 @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.cds.CDSTestUtils.Result; + +/** + * Base class for test cases in test/hotspot/jtreg/runtime/cds/dynamicArchive/ + */ +class DynamicArchiveTestBase { + private static boolean executedIn_run = false; + + public static interface DynamicArchiveTest { + public void run() throws Exception; + } + + public static interface DynamicArchiveTestWithArgs { + public void run(String args[]) throws Exception; + } + + + /* + * Tests for dynamic archives should be written using this pattern: + * + * public class HelloDynamic extends DynamicArchiveTestBase { + * public static void main(String[] args) throws Exception { + * runTest(HelloDynamic::testDefaultBase); // launch one test case + * } + * + * // the body of a test case + * static void testDefaultBase() throws Exception { + * String topArchiveName = getNewArchiveName("top"); + * doTest(null, topArchiveName); + * } + * } + * + * The reason for this is so that we can clean up the archive files + * created by prior test cases. Otherwise tests with lots of + * test cases may fill up the scratch directory. + */ + public static void runTest(DynamicArchiveTest t) throws Exception { + executedIn_run = true; + try { + TestCommon.deletePriorArchives(); + t.run(); + } finally { + executedIn_run = false; + } + } + + public static void runTest(DynamicArchiveTestWithArgs t, String... args) throws Exception { + executedIn_run = true; + try { + TestCommon.deletePriorArchives(); + t.run(args); + } finally { + executedIn_run = false; + } + } + + public static String getNewArchiveName() { + return TestCommon.getNewArchiveName(); + } + public static String getNewArchiveName(String stem) { + return TestCommon.getNewArchiveName(stem); + } + + /** + * Execute a JVM using the base archive (given by baseArchiveName) with the command line + * (given by cmdLineSuffix). At JVM exit, dump all eligible classes into the top archive + * (give by topArchiveName). + * + * If baseArchiveName is null, use the JDK's default archive as the base archive. + */ + public static Result dump2(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) + throws Exception + { + String[] cmdLine = TestCommon.concat( + "-XX:ArchiveClassesAtExit=" + topArchiveName); + // to allow dynamic archive tests to be run in the "rt-non-cds-mode" + cmdLine = TestCommon.concat(cmdLine, "-Xshare:auto"); + if (baseArchiveName != null) { + cmdLine = TestCommon.concat(cmdLine, "-XX:SharedArchiveFile=" + baseArchiveName); + } + cmdLine = TestCommon.concat(cmdLine, cmdLineSuffix); + return execProcess("dump", null, cmdLine); + } + + public static Result dump2_WB(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) + throws Exception + { + return dump2(baseArchiveName, topArchiveName, + TestCommon.concat(wbRuntimeArgs(), cmdLineSuffix)); + } + + /** + * A convenience method similar to dump2, but always use the JDK's default archive + * as the base archive. + * + * Most dynamicArchive/*.java test cases should be using this method instead of run2. + */ + public static Result dump(String topArchiveName, String ... cmdLineSuffix) + throws Exception + { + return dump2(null, topArchiveName, cmdLineSuffix); + } + + /** + * Dump the base archive. The JDK's default class list is used (unless otherwise specified + * in cmdLineSuffix). + */ + public static void dumpBaseArchive(String baseArchiveName, String ... cmdLineSuffix) + throws Exception + { + CDSOptions opts = new CDSOptions(); + opts.setArchiveName(baseArchiveName); + opts.addSuffix(cmdLineSuffix); + opts.addSuffix("-Djava.class.path="); + OutputAnalyzer out = CDSTestUtils.createArchive(opts); + CDSTestUtils.checkDump(out); + } + + /** + * Same as dumpBaseArchive, but also add WhiteBox to the bootcp + */ + public static void dumpBaseArchive_WB(String baseArchiveName, String ... cmdLineSuffix) + throws Exception + { + dumpBaseArchive(baseArchiveName, + TestCommon.concat("-Xbootclasspath/a:" + getWhiteBoxJar(), cmdLineSuffix)); + } + + private static String getWhiteBoxJar() { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + if (!(new File(wbJar)).exists()) { + throw new RuntimeException("Test error: your test must have " + + "'@run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox'"); + } + return wbJar; + } + + private static String[] wbRuntimeArgs() { + return TestCommon.concat("-Xbootclasspath/a:" + getWhiteBoxJar(), + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI"); + } + + /** + * Execute a JVM using the base archive (given by baseArchiveName) and the top archive + * (give by topArchiveName), using the command line (given by cmdLineSuffix). + * + * If baseArchiveName is null, use the JDK's default archive as the base archive. + */ + public static Result run2(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) + throws Exception { + if (baseArchiveName == null && topArchiveName == null) { + throw new RuntimeException("Both baseArchiveName and topArchiveName cannot be null at the same time."); + } + String archiveFiles = (baseArchiveName == null) ? topArchiveName : + (topArchiveName == null) ? baseArchiveName : + baseArchiveName + File.pathSeparator + topArchiveName; + String[] cmdLine = TestCommon.concat( + "-Xshare:on", + "-XX:SharedArchiveFile=" + archiveFiles); + cmdLine = TestCommon.concat(cmdLine, cmdLineSuffix); + return execProcess("exec", null, cmdLine); + } + + public static Result runWithRelativePath(String baseArchiveName, String topArchiveName, + String jarDir, String ... cmdLineSuffix) + throws Exception { + if (baseArchiveName == null && topArchiveName == null) { + throw new RuntimeException("Both baseArchiveName and topArchiveName cannot be null at the same time."); + } + String archiveFiles = (baseArchiveName == null) ? topArchiveName : + (topArchiveName == null) ? baseArchiveName : + baseArchiveName + File.pathSeparator + topArchiveName; + String[] cmdLine = TestCommon.concat( + "-Xshare:on", + "-XX:SharedArchiveFile=" + archiveFiles); + cmdLine = TestCommon.concat(cmdLine, cmdLineSuffix); + return execProcess("exec", jarDir, cmdLine); + } + + public static Result run2_WB(String baseArchiveName, String topArchiveName, String ... cmdLineSuffix) + throws Exception + { + return run2(baseArchiveName, topArchiveName, + TestCommon.concat(wbRuntimeArgs(), cmdLineSuffix)); + } + + /** + * A convenience method similar to run2, but always use the JDK's default archive + * as the base archive. + * + * Most dynamicArchive/*.java test cases should be using this method instead of run2. + */ + public static Result run(String topArchiveName, String ... cmdLineSuffix) + throws Exception + { + return run2(null, topArchiveName, cmdLineSuffix); + } + + private static String getXshareMode(String[] cmdLine) { + for (int i = 0; i <= cmdLine.length - 1; i++) { + int j = cmdLine[i].indexOf("-Xshare:"); + if (j != -1) { + return (cmdLine[i].substring(j)); + } + } + return null; + } + + + private static Result execProcess(String mode, String jarDir, String[] cmdLine) throws Exception { + if (!executedIn_run) { + throw new Exception("Test error: dynamic archive tests must be executed via DynamicArchiveTestBase.run()"); + } + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine); + if (jarDir != null) { + pb.directory(new File(jarDir)); + } + OutputAnalyzer output = TestCommon.executeAndLog(pb, mode); + CDSOptions opts = new CDSOptions(); + String xShareMode = getXshareMode(cmdLine); + if (xShareMode != null) { + opts.setXShareMode(xShareMode); + } + return new Result(opts, output); + } + + /** + * A convenience method for dumping and running, using the default CDS archive from the + * JDK. Both dumping and running should exit normally. + */ + public static void dumpAndRun(String topArchiveName, String ... cmdLineSuffix) throws Exception { + dump(topArchiveName, cmdLineSuffix).assertNormalExit(); + run(topArchiveName, cmdLineSuffix).assertNormalExit(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/DynamicFlag.java 2019-07-24 08:27:18.137469389 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary The DynamicDumpShareSpaces flag is internal, setting it at the command line should have no effect. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java - * @run driver DynamicFlag - */ - -public class DynamicFlag { - public static void main(String[] args) throws Exception { - TestCommon.test(JarBuilder.getOrCreateHelloJar(), - TestCommon.list("Hello"), "-XX:+DynamicDumpSharedSpaces", "Hello"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/DynamicFlag.java 2019-07-24 08:27:17.845469399 -0400 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary The DynamicDumpShareSpaces flag is internal, setting it at the command line should have no effect. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java + * @run driver DynamicFlag + */ + +public class DynamicFlag { + public static void main(String[] args) throws Exception { + TestCommon.test(JarBuilder.getOrCreateHelloJar(), + TestCommon.list("Hello"), "-XX:+DynamicDumpSharedSpaces", "Hello"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/DynamicLotsOfClasses.java 2019-07-24 08:27:18.541469375 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; -import java.util.ArrayList; - -/* - * @test - * @summary Try to archive lots of classes by searching for classes from the jrt:/ file system. With JDK 12 - * this will produce an archive with over 30,000 classes. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes - * @build LoadClasses - * @build sun.hotspot.WhiteBox - * @modules jdk.jartool/sun.tools.jar - * @run driver ClassFileInstaller -jar loadclasses.jar LoadClasses - * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox - * @run driver/timeout=500 DynamicLotsOfClasses - */ - -public class DynamicLotsOfClasses extends DynamicArchiveTestBase { - - public static void main(String[] args) throws Throwable { - runTest(DynamicLotsOfClasses::testDefaultBase); - } - - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - try { - doTest(topArchiveName); - } catch (Throwable th) { - System.out.println(th.toString()); - Exception ex = new Exception(th); - throw ex; - } - } - - private static void doTest(String topArchiveName) throws Throwable { - ArrayList list = new ArrayList<>(); - TestCommon.findAllClasses(list); - - String classList = System.getProperty("user.dir") + File.separator + - "LotsOfClasses.list"; - List lines = list; - Path file = Paths.get(classList); - Files.write(file, lines, Charset.forName("UTF-8")); - - String appJar = ClassFileInstaller.getJarPath("loadclasses.jar"); - String mainClass = "LoadClasses"; - - String whiteBoxJar = ClassFileInstaller.getJarPath("whitebox.jar"); - String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; - dump(topArchiveName, - "--add-modules", - "ALL-SYSTEM", - "-Xlog:hashtables", - "-Xmx500m", - "-Xlog:cds,cds+dynamic", - bootClassPath, - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - "-cp", appJar, mainClass, classList) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/DynamicLotsOfClasses.java 2019-07-24 08:27:18.241469385 -0400 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.ArrayList; + +/* + * @test + * @summary Try to archive lots of classes by searching for classes from the jrt:/ file system. With JDK 12 + * this will produce an archive with over 30,000 classes. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes + * @build LoadClasses + * @build sun.hotspot.WhiteBox + * @modules jdk.jartool/sun.tools.jar + * @run driver ClassFileInstaller -jar loadclasses.jar LoadClasses + * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox + * @run driver/timeout=500 DynamicLotsOfClasses + */ + +public class DynamicLotsOfClasses extends DynamicArchiveTestBase { + + public static void main(String[] args) throws Throwable { + runTest(DynamicLotsOfClasses::testDefaultBase); + } + + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + try { + doTest(topArchiveName); + } catch (Throwable th) { + System.out.println(th.toString()); + Exception ex = new Exception(th); + throw ex; + } + } + + private static void doTest(String topArchiveName) throws Throwable { + ArrayList list = new ArrayList<>(); + TestCommon.findAllClasses(list); + + String classList = System.getProperty("user.dir") + File.separator + + "LotsOfClasses.list"; + List lines = list; + Path file = Paths.get(classList); + Files.write(file, lines, Charset.forName("UTF-8")); + + String appJar = ClassFileInstaller.getJarPath("loadclasses.jar"); + String mainClass = "LoadClasses"; + + String whiteBoxJar = ClassFileInstaller.getJarPath("whitebox.jar"); + String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; + dump(topArchiveName, + "--add-modules", + "ALL-SYSTEM", + "-Xlog:hashtables", + "-Xmx500m", + "-Xlog:cds,cds+dynamic", + bootClassPath, + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + "-cp", appJar, mainClass, classList) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/ExcludedClasses.java 2019-07-24 08:27:18.993469359 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Unreferenced app classes during dump time should not be included in the archive. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * /test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes - * @build ExcludedClassesApp - * @run driver ClassFileInstaller -jar ExcludedClasses.jar - * ExcludedClassesApp - * ExcludedClassesApp$NotLinkedSuper - * ExcludedClassesApp$NotLinkedChild - * ExcludedClassesApp$NotLinkedInterface - * @run driver ExcludedClasses - */ - -public class ExcludedClasses extends DynamicArchiveTestBase { - public static void main(String[] args) throws Exception { - runTest(ExcludedClasses::test); - } - - static void test() throws Exception { - String topArchiveName = getNewArchiveName(); - String appJar = ClassFileInstaller.getJarPath("ExcludedClasses.jar"); - String mainClass = "ExcludedClassesApp"; - - dumpAndRun(topArchiveName, "-Xlog:cds+dynamic=debug", "-cp", appJar, mainClass); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/ExcludedClasses.java 2019-07-24 08:27:18.661469370 -0400 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Unreferenced app classes during dump time should not be included in the archive. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * /test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes + * @build ExcludedClassesApp + * @run driver ClassFileInstaller -jar ExcludedClasses.jar + * ExcludedClassesApp + * ExcludedClassesApp$NotLinkedSuper + * ExcludedClassesApp$NotLinkedChild + * ExcludedClassesApp$NotLinkedInterface + * @run driver ExcludedClasses + */ + +public class ExcludedClasses extends DynamicArchiveTestBase { + public static void main(String[] args) throws Exception { + runTest(ExcludedClasses::test); + } + + static void test() throws Exception { + String topArchiveName = getNewArchiveName(); + String appJar = ClassFileInstaller.getJarPath("ExcludedClasses.jar"); + String mainClass = "ExcludedClassesApp"; + + dumpAndRun(topArchiveName, "-Xlog:cds+dynamic=debug", "-cp", appJar, mainClass); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/HelloDynamic.java 2019-07-24 08:27:19.437469343 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Hello World test for dynamic archive - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @build Hello - * @run driver ClassFileInstaller -jar hello.jar Hello - * @run driver HelloDynamic - */ - -public class HelloDynamic extends DynamicArchiveTestBase { - public static void main(String[] args) throws Exception { - runTest(HelloDynamic::testDefaultBase); - runTest(HelloDynamic::testCustomBase); - } - - // (1) Test with default base archive + top archive - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - doTest(null, topArchiveName); - } - - // (2) Test with custom base archive + top archive - static void testCustomBase() throws Exception { - String topArchiveName = getNewArchiveName("top2"); - String baseArchiveName = getNewArchiveName("base"); - dumpBaseArchive(baseArchiveName); - doTest(baseArchiveName, topArchiveName); - } - - private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { - String appJar = ClassFileInstaller.getJarPath("hello.jar"); - String mainClass = "Hello"; - dump2(baseArchiveName, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - run2(baseArchiveName, topArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldHaveExitValue(0); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/HelloDynamic.java 2019-07-24 08:27:19.105469355 -0400 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Hello World test for dynamic archive + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @build Hello + * @run driver ClassFileInstaller -jar hello.jar Hello + * @run driver HelloDynamic + */ + +public class HelloDynamic extends DynamicArchiveTestBase { + public static void main(String[] args) throws Exception { + runTest(HelloDynamic::testDefaultBase); + runTest(HelloDynamic::testCustomBase); + } + + // (1) Test with default base archive + top archive + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(null, topArchiveName); + } + + // (2) Test with custom base archive + top archive + static void testCustomBase() throws Exception { + String topArchiveName = getNewArchiveName("top2"); + String baseArchiveName = getNewArchiveName("base"); + dumpBaseArchive(baseArchiveName); + doTest(baseArchiveName, topArchiveName); + } + + private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { + String appJar = ClassFileInstaller.getJarPath("hello.jar"); + String mainClass = "Hello"; + dump2(baseArchiveName, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + run2(baseArchiveName, topArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldHaveExitValue(0); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/HelloDynamicCustom.java 2019-07-24 08:27:19.869469328 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Hello World test for dynamic archive with custom loader - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/customLoader/test-classes /runtime/testlibrary - * @build HelloUnload CustomLoadee ClassUnloadCommon - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure - * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver HelloDynamicCustom - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; - -public class HelloDynamicCustom extends DynamicArchiveTestBase { - private static final String ARCHIVE_NAME = - System.getProperty("test.classes") + File.separator + "HelloDynamicCustom-top.jsa"; - - public static void main(String[] args) throws Exception { - runTest(HelloDynamicCustom::testDefaultBase); - } - - private static void testDefaultBase() throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("hello.jar"); - String customJarPath = ClassFileInstaller.getJarPath("hello_custom.jar"); - String mainAppClass = "HelloUnload"; - - dump(ARCHIVE_NAME, - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, - mainAppClass, customJarPath, "false", "false") - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x") - .shouldNotContain("klasses.*=.*CustomLoadee") - .shouldHaveExitValue(0); - }); - - run(ARCHIVE_NAME, - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-Xlog:class+load", - "-Xlog:cds=debug", - "-Xlog:cds+dynamic=info", - "-cp", appJar, - mainAppClass, customJarPath, "false", "true") - .assertNormalExit(output -> { - output.shouldContain("HelloUnload source: shared objects file") - .shouldContain("CustomLoadee source: shared objects file") - .shouldHaveExitValue(0); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/HelloDynamicCustom.java 2019-07-24 08:27:19.541469340 -0400 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Hello World test for dynamic archive with custom loader + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/customLoader/test-classes /runtime/testlibrary + * @build HelloUnload CustomLoadee ClassUnloadCommon + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure + * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver HelloDynamicCustom + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +public class HelloDynamicCustom extends DynamicArchiveTestBase { + private static final String ARCHIVE_NAME = + System.getProperty("test.classes") + File.separator + "HelloDynamicCustom-top.jsa"; + + public static void main(String[] args) throws Exception { + runTest(HelloDynamicCustom::testDefaultBase); + } + + private static void testDefaultBase() throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("hello.jar"); + String customJarPath = ClassFileInstaller.getJarPath("hello_custom.jar"); + String mainAppClass = "HelloUnload"; + + dump(ARCHIVE_NAME, + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, + mainAppClass, customJarPath, "false", "false") + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x") + .shouldNotContain("klasses.*=.*CustomLoadee") + .shouldHaveExitValue(0); + }); + + run(ARCHIVE_NAME, + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xlog:class+load", + "-Xlog:cds=debug", + "-Xlog:cds+dynamic=info", + "-cp", appJar, + mainAppClass, customJarPath, "false", "true") + .assertNormalExit(output -> { + output.shouldContain("HelloUnload source: shared objects file") + .shouldContain("CustomLoadee source: shared objects file") + .shouldHaveExitValue(0); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/HelloDynamicCustomUnload.java 2019-07-24 08:27:20.313469313 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Hello World test for dynamic archive with custom loader. - * Attempt will be made to unload the custom loader during - * dump time and run time. The custom loader will be unloaded - * during dump time. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/customLoader/test-classes /runtime/testlibrary - * @build HelloUnload CustomLoadee ClassUnloadCommon - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure - * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver HelloDynamicCustomUnload - */ - -import java.io.File; - -public class HelloDynamicCustomUnload extends DynamicArchiveTestBase { - private static final String ARCHIVE_NAME = - System.getProperty("test.classes") + File.separator + "HelloDynamicCustomUnload.jsa"; - - public static void main(String[] args) throws Exception { - runTest(HelloDynamicCustomUnload::testDefaultBase); - } - - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("HelloDynamicCustomUnload-top"); - doTest(topArchiveName); - } - - private static void doTest(String topArchiveName) throws Exception { - String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - String appJar = ClassFileInstaller.getJarPath("hello.jar"); - String customJarPath = ClassFileInstaller.getJarPath("hello_custom.jar"); - String mainAppClass = "HelloUnload"; - - dump(topArchiveName, - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-Xmn8m", - "-Xlog:cds,cds+dynamic=debug,class+unload=debug", - "-XX:ArchiveClassesAtExit=" + ARCHIVE_NAME, - "-cp", appJar, - mainAppClass, customJarPath, "true", "false") - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x") - .shouldNotContain("klasses.*=.*CustomLoadee") // Fixme -- use a better way to decide if a class has been archived - .shouldHaveExitValue(0); - }); - - run(topArchiveName, - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-Xlog:class+load,cds=debug,class+unload=debug", - "-XX:SharedArchiveFile=" + ARCHIVE_NAME, - "-cp", appJar, - mainAppClass, customJarPath, "true", "false") - .assertNormalExit(output -> { - output.shouldContain("HelloUnload source: shared objects file") - .shouldMatch(".class.load. CustomLoadee source:.*hello_custom.jar") - .shouldHaveExitValue(0); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/HelloDynamicCustomUnload.java 2019-07-24 08:27:19.985469324 -0400 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Hello World test for dynamic archive with custom loader. + * Attempt will be made to unload the custom loader during + * dump time and run time. The custom loader will be unloaded + * during dump time. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/customLoader/test-classes /runtime/testlibrary + * @build HelloUnload CustomLoadee ClassUnloadCommon + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar hello.jar HelloUnload ClassUnloadCommon ClassUnloadCommon$1 ClassUnloadCommon$TestFailure + * @run driver ClassFileInstaller -jar hello_custom.jar CustomLoadee + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver HelloDynamicCustomUnload + */ + +import java.io.File; + +public class HelloDynamicCustomUnload extends DynamicArchiveTestBase { + private static final String ARCHIVE_NAME = + System.getProperty("test.classes") + File.separator + "HelloDynamicCustomUnload.jsa"; + + public static void main(String[] args) throws Exception { + runTest(HelloDynamicCustomUnload::testDefaultBase); + } + + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("HelloDynamicCustomUnload-top"); + doTest(topArchiveName); + } + + private static void doTest(String topArchiveName) throws Exception { + String wbJar = ClassFileInstaller.getJarPath("WhiteBox.jar"); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + String appJar = ClassFileInstaller.getJarPath("hello.jar"); + String customJarPath = ClassFileInstaller.getJarPath("hello_custom.jar"); + String mainAppClass = "HelloUnload"; + + dump(topArchiveName, + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xmn8m", + "-Xlog:cds,cds+dynamic=debug,class+unload=debug", + "-XX:ArchiveClassesAtExit=" + ARCHIVE_NAME, + "-cp", appJar, + mainAppClass, customJarPath, "true", "false") + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x") + .shouldNotContain("klasses.*=.*CustomLoadee") // Fixme -- use a better way to decide if a class has been archived + .shouldHaveExitValue(0); + }); + + run(topArchiveName, + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xlog:class+load,cds=debug,class+unload=debug", + "-XX:SharedArchiveFile=" + ARCHIVE_NAME, + "-cp", appJar, + mainAppClass, customJarPath, "true", "false") + .assertNormalExit(output -> { + output.shouldContain("HelloUnload source: shared objects file") + .shouldMatch(".class.load. CustomLoadee source:.*hello_custom.jar") + .shouldHaveExitValue(0); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/JITInteraction.java 2019-07-24 08:27:20.757469297 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test interaction with JIT threads during vm exit. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes - * @build TestJIT - * @modules jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar testjit.jar TestJIT - * @run driver JITInteraction - */ - -public class JITInteraction extends DynamicArchiveTestBase { - - public static void main(String[] args) throws Exception { - runTest(JITInteraction::testDefaultBase); - } - - // Test with default base archive + top archive - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - doTest(topArchiveName); - } - - private static void doTest(String topArchiveName) throws Exception { - String appJar = ClassFileInstaller.getJarPath("testjit.jar"); - String mainClass = "TestJIT"; - - dump2_WB(null, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic", - "-XX:-UseOnStackReplacement", - "-XX:+PrintCompilation", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/JITInteraction.java 2019-07-24 08:27:20.421469309 -0400 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test interaction with JIT threads during vm exit. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes + * @build TestJIT + * @modules jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar testjit.jar TestJIT + * @run driver JITInteraction + */ + +public class JITInteraction extends DynamicArchiveTestBase { + + public static void main(String[] args) throws Exception { + runTest(JITInteraction::testDefaultBase); + } + + // Test with default base archive + top archive + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(topArchiveName); + } + + private static void doTest(String topArchiveName) throws Exception { + String appJar = ClassFileInstaller.getJarPath("testjit.jar"); + String mainClass = "TestJIT"; + + dump2_WB(null, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic", + "-XX:-UseOnStackReplacement", + "-XX:+PrintCompilation", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/MainModuleOnly.java 2019-07-24 08:27:21.161469283 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,259 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @run driver MainModuleOnly - * @summary Test some scenarios with a main modular jar specified in the --module-path and -cp options in the command line. - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; - -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.Platform; - -public class MainModuleOnly extends DynamicArchiveTestBase { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String FS = File.separator; - private static final String TEST_SRC = System.getProperty("test.src") + - FS + ".." + FS + "jigsaw" + FS + "modulepath"; - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String TEST_MODULE1 = "com.simple"; - - // the module main class - private static final String MAIN_CLASS = "com.simple.Main"; - - private static Path moduleDir = null; - private static Path moduleDir2 = null; - private static Path destJar = null; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), - MODS_DIR.resolve(TEST_MODULE1), - MODS_DIR.toString()); - - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); - - Path srcJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); - destJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); - String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); - JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); - Files.copy(srcJar, destJar); - - } - - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - doTest(topArchiveName); - } - - public static void main(String... args) throws Exception { - runTest(MainModuleOnly::testDefaultBase); - } - - public static void doTest(String topArchiveName) throws Exception { - // compile the modules and create the modular jar files - buildTestModule(); - // create an archive with both -cp and --module-path in the command line. - // Only the class in the modular jar in the --module-path will be archived; - // the class in the modular jar in the -cp won't be archived. - dump2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", destJar.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - - // run with the archive using the same command line as in dump time. - // The main class should be loaded from the archive. - run2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", - "-cp", destJar.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertNormalExit(output -> { - output.shouldContain("[class,load] com.simple.Main source: shared objects file") - .shouldHaveExitValue(0); - }); - - // run with the archive with the main class name inserted before the -m. - // The main class name will be picked up before the module name. So the - // main class should be loaded from the jar in the -cp. - run2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", - "-cp", destJar.toString(), - "--module-path", moduleDir.toString(), - MAIN_CLASS, "-m", TEST_MODULE1) - .assertNormalExit(out -> - out.shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar")); - - // run with the archive with exploded module. Since during dump time, we - // only archive classes from the modular jar in the --module-path, the - // main class should be loaded from the exploded module directory. - run2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", - "-cp", destJar.toString(), - "--module-path", MODS_DIR.toString(), - "-m", TEST_MODULE1 + "/" + MAIN_CLASS) - .assertNormalExit(out -> { - out.shouldMatch(".class.load. com.simple.Main source:.*com.simple") - .shouldContain(MODS_DIR.toString()); - }); - - // run with the archive with the --upgrade-module-path option. - // CDS will be disabled with this options and the main class will be - // loaded from the modular jar. - run2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", - "-cp", destJar.toString(), - "--upgrade-module-path", moduleDir.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch("CDS is disabled when the.*option is specified") - .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); - }); - // run with the archive with the --limit-modules option. - // CDS will be disabled with this options and the main class will be - // loaded from the modular jar. - run2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", - "-cp", destJar.toString(), - "--limit-modules", "java.base," + TEST_MODULE1, - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch("CDS is disabled when the.*option is specified") - .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); - }); - // run with the archive with the --patch-module option. - // CDS will be disabled with this options and the main class will be - // loaded from the modular jar. - run2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", - "-cp", destJar.toString(), - "--patch-module", TEST_MODULE1 + "=" + MODS_DIR.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch("CDS is disabled when the.*option is specified") - .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); - }); - // modify the timestamp of the jar file - (new File(destJar.toString())).setLastModified(System.currentTimeMillis() + 2000); - // run with the archive and the jar with modified timestamp. - // It should fail due to timestamp of the jar doesn't match the one - // used during dump time. - run2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", - "-cp", destJar.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertAbnormalExit( - "A jar file is not the one used while building the shared archive file:"); - // create an archive with a non-empty directory in the --module-path. - // The dumping process will exit with an error due to non-empty directory - // in the --module-path. - dump2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", destJar.toString(), - "--module-path", MODS_DIR.toString(), - "-m", TEST_MODULE1 + "/" + MAIN_CLASS) - .assertAbnormalExit(output -> { - output.shouldMatch("Error: non-empty directory.*com.simple"); - }); - - // test module path with very long length - // - // This test can't be run on the windows platform due to an existing - // issue in ClassLoader::get_canonical_path() (JDK-8190737). - if (Platform.isWindows()) { - System.out.println("Long module path test cannot be tested on the Windows platform."); - return; - } - Path longDir = USER_DIR; - int pathLen = longDir.toString().length(); - int PATH_LEN = 2034; - int MAX_DIR_LEN = 250; - while (pathLen < PATH_LEN) { - int remaining = PATH_LEN - pathLen; - int subPathLen = remaining > MAX_DIR_LEN ? MAX_DIR_LEN : remaining; - char[] chars = new char[subPathLen]; - Arrays.fill(chars, 'x'); - String subPath = new String(chars); - longDir = Paths.get(longDir.toString(), subPath); - pathLen = longDir.toString().length(); - } - File longDirFile = new File(longDir.toString()); - try { - longDirFile.mkdirs(); - } catch (Exception e) { - throw e; - } - Path longDirJar = longDir.resolve(TEST_MODULE1 + ".jar"); - // IOException results from the Files.copy() call on platform - // such as MacOS X. Test can't be proceeded further with the - // exception. - try { - Files.copy(destJar, longDirJar); - } catch (java.io.IOException ioe) { - System.out.println("Caught IOException from Files.copy(). Cannot continue."); - return; - } - dump2(null, topArchiveName, - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", destJar.toString(), - "-Xlog:exceptions=trace", - "--module-path", longDirJar.toString(), - "-m", TEST_MODULE1) - .ifAbnormalExit(output -> { - output.shouldMatch("os::stat error.*CDS dump aborted"); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/MainModuleOnly.java 2019-07-24 08:27:20.865469294 -0400 @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @run driver MainModuleOnly + * @summary Test some scenarios with a main modular jar specified in the --module-path and -cp options in the command line. + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Platform; + +public class MainModuleOnly extends DynamicArchiveTestBase { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String FS = File.separator; + private static final String TEST_SRC = System.getProperty("test.src") + + FS + ".." + FS + "jigsaw" + FS + "modulepath"; + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String TEST_MODULE1 = "com.simple"; + + // the module main class + private static final String MAIN_CLASS = "com.simple.Main"; + + private static Path moduleDir = null; + private static Path moduleDir2 = null; + private static Path destJar = null; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), + MODS_DIR.resolve(TEST_MODULE1), + MODS_DIR.toString()); + + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); + + Path srcJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); + destJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); + String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); + JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); + Files.copy(srcJar, destJar); + + } + + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(topArchiveName); + } + + public static void main(String... args) throws Exception { + runTest(MainModuleOnly::testDefaultBase); + } + + public static void doTest(String topArchiveName) throws Exception { + // compile the modules and create the modular jar files + buildTestModule(); + // create an archive with both -cp and --module-path in the command line. + // Only the class in the modular jar in the --module-path will be archived; + // the class in the modular jar in the -cp won't be archived. + dump2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", destJar.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + + // run with the archive using the same command line as in dump time. + // The main class should be loaded from the archive. + run2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", + "-cp", destJar.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertNormalExit(output -> { + output.shouldContain("[class,load] com.simple.Main source: shared objects file") + .shouldHaveExitValue(0); + }); + + // run with the archive with the main class name inserted before the -m. + // The main class name will be picked up before the module name. So the + // main class should be loaded from the jar in the -cp. + run2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", + "-cp", destJar.toString(), + "--module-path", moduleDir.toString(), + MAIN_CLASS, "-m", TEST_MODULE1) + .assertNormalExit(out -> + out.shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar")); + + // run with the archive with exploded module. Since during dump time, we + // only archive classes from the modular jar in the --module-path, the + // main class should be loaded from the exploded module directory. + run2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", + "-cp", destJar.toString(), + "--module-path", MODS_DIR.toString(), + "-m", TEST_MODULE1 + "/" + MAIN_CLASS) + .assertNormalExit(out -> { + out.shouldMatch(".class.load. com.simple.Main source:.*com.simple") + .shouldContain(MODS_DIR.toString()); + }); + + // run with the archive with the --upgrade-module-path option. + // CDS will be disabled with this options and the main class will be + // loaded from the modular jar. + run2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", + "-cp", destJar.toString(), + "--upgrade-module-path", moduleDir.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch("CDS is disabled when the.*option is specified") + .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); + }); + // run with the archive with the --limit-modules option. + // CDS will be disabled with this options and the main class will be + // loaded from the modular jar. + run2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", + "-cp", destJar.toString(), + "--limit-modules", "java.base," + TEST_MODULE1, + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch("CDS is disabled when the.*option is specified") + .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); + }); + // run with the archive with the --patch-module option. + // CDS will be disabled with this options and the main class will be + // loaded from the modular jar. + run2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", + "-cp", destJar.toString(), + "--patch-module", TEST_MODULE1 + "=" + MODS_DIR.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch("CDS is disabled when the.*option is specified") + .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); + }); + // modify the timestamp of the jar file + (new File(destJar.toString())).setLastModified(System.currentTimeMillis() + 2000); + // run with the archive and the jar with modified timestamp. + // It should fail due to timestamp of the jar doesn't match the one + // used during dump time. + run2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug,class+load=trace", + "-cp", destJar.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertAbnormalExit( + "A jar file is not the one used while building the shared archive file:"); + // create an archive with a non-empty directory in the --module-path. + // The dumping process will exit with an error due to non-empty directory + // in the --module-path. + dump2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", destJar.toString(), + "--module-path", MODS_DIR.toString(), + "-m", TEST_MODULE1 + "/" + MAIN_CLASS) + .assertAbnormalExit(output -> { + output.shouldMatch("Error: non-empty directory.*com.simple"); + }); + + // test module path with very long length + // + // This test can't be run on the windows platform due to an existing + // issue in ClassLoader::get_canonical_path() (JDK-8190737). + if (Platform.isWindows()) { + System.out.println("Long module path test cannot be tested on the Windows platform."); + return; + } + Path longDir = USER_DIR; + int pathLen = longDir.toString().length(); + int PATH_LEN = 2034; + int MAX_DIR_LEN = 250; + while (pathLen < PATH_LEN) { + int remaining = PATH_LEN - pathLen; + int subPathLen = remaining > MAX_DIR_LEN ? MAX_DIR_LEN : remaining; + char[] chars = new char[subPathLen]; + Arrays.fill(chars, 'x'); + String subPath = new String(chars); + longDir = Paths.get(longDir.toString(), subPath); + pathLen = longDir.toString().length(); + } + File longDirFile = new File(longDir.toString()); + try { + longDirFile.mkdirs(); + } catch (Exception e) { + throw e; + } + Path longDirJar = longDir.resolve(TEST_MODULE1 + ".jar"); + // IOException results from the Files.copy() call on platform + // such as MacOS X. Test can't be proceeded further with the + // exception. + try { + Files.copy(destJar, longDirJar); + } catch (java.io.IOException ioe) { + System.out.println("Caught IOException from Files.copy(). Cannot continue."); + return; + } + dump2(null, topArchiveName, + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", destJar.toString(), + "-Xlog:exceptions=trace", + "--module-path", longDirJar.toString(), + "-m", TEST_MODULE1) + .ifAbnormalExit(output -> { + output.shouldMatch("os::stat error.*CDS dump aborted"); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/MethodSorting.java 2019-07-24 08:27:21.525469271 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary When HelloA and HelloB are copied into the dynamic archive, the Symbols - * for their method's names will have a different sorting order. This requires - * that the dumped InstanceKlass to re-sort their "methods" array and re-layout the vtables/itables. - * A regression test for an earlier bug in DynamicArchiveBuilder::relocate_buffer_to_target(). - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * /test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes - * @build MethodSortingApp - * @run driver ClassFileInstaller -jar method_sorting.jar - * MethodSortingApp - * MethodSortingApp$HelloA - * MethodSortingApp$HelloA1 - * MethodSortingApp$HelloB - * MethodSortingApp$HelloB1 - * MethodSortingApp$InterfaceA - * MethodSortingApp$InterfaceB - * MethodSortingApp$ImplementorA - * MethodSortingApp$ImplementorA1 - * MethodSortingApp$ImplementorB - * MethodSortingApp$ImplementorB1 - * @run driver MethodSorting - */ - -public class MethodSorting extends DynamicArchiveTestBase { - public static void main(String[] args) throws Exception { - runTest(MethodSorting::test); - } - - static void test() throws Exception { - String topArchiveName = getNewArchiveName(); - String appJar = ClassFileInstaller.getJarPath("method_sorting.jar"); - String mainClass = "MethodSortingApp"; - - dumpAndRun(topArchiveName, "-Xlog:cds+dynamic=debug", "-cp", appJar, mainClass); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/MethodSorting.java 2019-07-24 08:27:21.253469280 -0400 @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary When HelloA and HelloB are copied into the dynamic archive, the Symbols + * for their method's names will have a different sorting order. This requires + * that the dumped InstanceKlass to re-sort their "methods" array and re-layout the vtables/itables. + * A regression test for an earlier bug in DynamicArchiveBuilder::relocate_buffer_to_target(). + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * /test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes + * @build MethodSortingApp + * @run driver ClassFileInstaller -jar method_sorting.jar + * MethodSortingApp + * MethodSortingApp$HelloA + * MethodSortingApp$HelloA1 + * MethodSortingApp$HelloB + * MethodSortingApp$HelloB1 + * MethodSortingApp$InterfaceA + * MethodSortingApp$InterfaceB + * MethodSortingApp$ImplementorA + * MethodSortingApp$ImplementorA1 + * MethodSortingApp$ImplementorB + * MethodSortingApp$ImplementorB1 + * @run driver MethodSorting + */ + +public class MethodSorting extends DynamicArchiveTestBase { + public static void main(String[] args) throws Exception { + runTest(MethodSorting::test); + } + + static void test() throws Exception { + String topArchiveName = getNewArchiveName(); + String appJar = ClassFileInstaller.getJarPath("method_sorting.jar"); + String mainClass = "MethodSortingApp"; + + dumpAndRun(topArchiveName, "-Xlog:cds+dynamic=debug", "-cp", appJar, mainClass); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/MissingArchive.java 2019-07-24 08:27:21.913469257 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; - -/* - * @test - * @summary error handling when either (or both) of the base/top archives are missing. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @build GenericTestApp sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar GenericTestApp.jar GenericTestApp - * @run driver MissingArchive - */ - -public class MissingArchive extends DynamicArchiveTestBase { - private static final String TOP = "top"; - private static final String BASE = "base"; - private static final String BOTH = "base/top"; - private static final String NONE = "none"; - - public static void main(String[] args) throws Exception { - runTest(MissingArchive::test, TOP); - runTest(MissingArchive::test, BASE); - runTest(MissingArchive::test, BOTH); - runTest(MissingArchive::test, NONE); - } - - static void delete(String fileName) { - File f = new File(fileName); - f.delete(); - } - - static void test(String args[]) throws Exception { - String topArchiveName = getNewArchiveName("top"); - String baseArchiveName = getNewArchiveName("base"); - dumpBaseArchive(baseArchiveName); - - String appJar = ClassFileInstaller.getJarPath("GenericTestApp.jar"); - String mainClass = "GenericTestApp"; - dump2_WB(baseArchiveName, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - - // Use -Xshare:auto so top archive can fail after base archive has succeeded, - // but the app will continue to run. - String[] cmdline = TestCommon.concat( - "-Xlog:cds*", - "-Xshare:auto", - "-cp", appJar, mainClass); - - - String mode = args[0]; - - if (mode.contains(BASE)) { - delete(baseArchiveName); - cmdline = TestCommon.concat(cmdline, "assertNotShared:java.lang.Object"); - } else { - cmdline = TestCommon.concat(cmdline, "assertShared:java.lang.Object"); - } - - if (mode.contains(TOP)) { - delete(topArchiveName); - } - - if (mode.equals(NONE)) { - cmdline = TestCommon.concat(cmdline, "assertShared:GenericTestApp"); - } else { - cmdline = TestCommon.concat(cmdline, "assertNotShared:GenericTestApp"); - } - - run2_WB(baseArchiveName, topArchiveName, cmdline).assertNormalExit(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/MissingArchive.java 2019-07-24 08:27:21.613469268 -0400 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; + +/* + * @test + * @summary error handling when either (or both) of the base/top archives are missing. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @build GenericTestApp sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar GenericTestApp.jar GenericTestApp + * @run driver MissingArchive + */ + +public class MissingArchive extends DynamicArchiveTestBase { + private static final String TOP = "top"; + private static final String BASE = "base"; + private static final String BOTH = "base/top"; + private static final String NONE = "none"; + + public static void main(String[] args) throws Exception { + runTest(MissingArchive::test, TOP); + runTest(MissingArchive::test, BASE); + runTest(MissingArchive::test, BOTH); + runTest(MissingArchive::test, NONE); + } + + static void delete(String fileName) { + File f = new File(fileName); + f.delete(); + } + + static void test(String args[]) throws Exception { + String topArchiveName = getNewArchiveName("top"); + String baseArchiveName = getNewArchiveName("base"); + dumpBaseArchive(baseArchiveName); + + String appJar = ClassFileInstaller.getJarPath("GenericTestApp.jar"); + String mainClass = "GenericTestApp"; + dump2_WB(baseArchiveName, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + + // Use -Xshare:auto so top archive can fail after base archive has succeeded, + // but the app will continue to run. + String[] cmdline = TestCommon.concat( + "-Xlog:cds*", + "-Xshare:auto", + "-cp", appJar, mainClass); + + + String mode = args[0]; + + if (mode.contains(BASE)) { + delete(baseArchiveName); + cmdline = TestCommon.concat(cmdline, "assertNotShared:java.lang.Object"); + } else { + cmdline = TestCommon.concat(cmdline, "assertShared:java.lang.Object"); + } + + if (mode.contains(TOP)) { + delete(topArchiveName); + } + + if (mode.equals(NONE)) { + cmdline = TestCommon.concat(cmdline, "assertShared:GenericTestApp"); + } else { + cmdline = TestCommon.concat(cmdline, "assertNotShared:GenericTestApp"); + } + + run2_WB(baseArchiveName, topArchiveName, cmdline).assertNormalExit(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/NoClassToArchive.java 2019-07-24 08:27:22.257469245 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary A few edge cases where there's no class to be included in the dynamic archive. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes - * @build StrConcatApp - * @run driver ClassFileInstaller -jar strConcatApp.jar StrConcatApp - * @run driver NoClassToArchive - */ - -import java.io.File; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class NoClassToArchive extends DynamicArchiveTestBase { - static final String warningMessage = - "There is no class to be included in the dynamic archive"; - static final String classList = System.getProperty("test.classes") + - File.separator + "NoClassToArchive.list"; - static final String appClass = "StrConcatApp"; - - public static void main(String[] args) throws Exception { - runTest(NoClassToArchive::testDefaultBase); - runTest(NoClassToArchive::testCustomBase); - } - - // (1) Test with default base archive + top archive - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - doTest(null, topArchiveName); - } - - // (2) Test with custom base archive + top archive - static void testCustomBase() throws Exception { - String topArchiveName = getNewArchiveName("top2"); - String baseArchiveName = getNewArchiveName("base"); - doTestCustomBase(baseArchiveName, topArchiveName); - } - - private static void checkWarning(OutputAnalyzer output) throws Exception { - if (output.getStdout().contains("jrt:/") || output.getStdout().contains("unsafe anonymous")) { - System.out.println("test skipped: this platform uses non-archived classes when running -version"); - } else { - output.shouldContain(warningMessage); - } - } - - private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { - dump2(baseArchiveName, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-Xlog:class+load=trace", - "-version") - .assertNormalExit(output -> checkWarning(output)); - - dump2(baseArchiveName, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-Xlog:class+load=trace", - "-help") - .assertNormalExit(output -> { - // some classes will be loaded from the java.base module - output.shouldContain("java.text.MessageFormat source: jrt:/java.base"); - }); - } - - private static void doTestCustomBase(String baseArchiveName, String topArchiveName) throws Exception { - String appJar = ClassFileInstaller.getJarPath("strConcatApp.jar"); - // dump class list by running the StrConcatApp - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - true, - "-XX:DumpLoadedClassList=" + classList, - "-cp", - appJar, - appClass); - OutputAnalyzer output = TestCommon.executeAndLog(pb, "dumpClassList"); - TestCommon.checkExecReturn(output, 0, true, "length = 0"); - - // create a custom base archive based on the class list - dumpBaseArchive(baseArchiveName, "-XX:SharedClassListFile=" + classList); - - // create a dynamic archive with the custom base archive - // no class should be included in the dynamic archive - dump2(baseArchiveName, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-Xlog:class+load=trace", - "-version") - .assertNormalExit(out -> checkWarning(out)); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/NoClassToArchive.java 2019-07-24 08:27:21.981469255 -0400 @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary A few edge cases where there's no class to be included in the dynamic archive. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes + * @build StrConcatApp + * @run driver ClassFileInstaller -jar strConcatApp.jar StrConcatApp + * @run driver NoClassToArchive + */ + +import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class NoClassToArchive extends DynamicArchiveTestBase { + static final String warningMessage = + "There is no class to be included in the dynamic archive"; + static final String classList = System.getProperty("test.classes") + + File.separator + "NoClassToArchive.list"; + static final String appClass = "StrConcatApp"; + + public static void main(String[] args) throws Exception { + runTest(NoClassToArchive::testDefaultBase); + runTest(NoClassToArchive::testCustomBase); + } + + // (1) Test with default base archive + top archive + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(null, topArchiveName); + } + + // (2) Test with custom base archive + top archive + static void testCustomBase() throws Exception { + String topArchiveName = getNewArchiveName("top2"); + String baseArchiveName = getNewArchiveName("base"); + doTestCustomBase(baseArchiveName, topArchiveName); + } + + private static void checkWarning(OutputAnalyzer output) throws Exception { + if (output.getStdout().contains("jrt:/") || output.getStdout().contains("unsafe anonymous")) { + System.out.println("test skipped: this platform uses non-archived classes when running -version"); + } else { + output.shouldContain(warningMessage); + } + } + + private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { + dump2(baseArchiveName, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-Xlog:class+load=trace", + "-version") + .assertNormalExit(output -> checkWarning(output)); + + dump2(baseArchiveName, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-Xlog:class+load=trace", + "-help") + .assertNormalExit(output -> { + // some classes will be loaded from the java.base module + output.shouldContain("java.text.MessageFormat source: jrt:/java.base"); + }); + } + + private static void doTestCustomBase(String baseArchiveName, String topArchiveName) throws Exception { + String appJar = ClassFileInstaller.getJarPath("strConcatApp.jar"); + // dump class list by running the StrConcatApp + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + true, + "-XX:DumpLoadedClassList=" + classList, + "-cp", + appJar, + appClass); + OutputAnalyzer output = TestCommon.executeAndLog(pb, "dumpClassList"); + TestCommon.checkExecReturn(output, 0, true, "length = 0"); + + // create a custom base archive based on the class list + dumpBaseArchive(baseArchiveName, "-XX:SharedClassListFile=" + classList); + + // create a dynamic archive with the custom base archive + // no class should be included in the dynamic archive + dump2(baseArchiveName, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-Xlog:class+load=trace", + "-version") + .assertNormalExit(out -> checkWarning(out)); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/RelativePath.java 2019-07-24 08:27:22.613469233 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test relative paths specified in the -cp. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java - * @compile ../test-classes/HelloMore.java - * @run driver RelativePath - */ - -import java.io.File; - -public class RelativePath extends DynamicArchiveTestBase { - - public static void main(String[] args) throws Exception { - runTest(AppendClasspath::testDefaultBase); - } - - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - doTest(topArchiveName); - } - - private static void doTest(String topArchiveName) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - String appJar2 = JarBuilder.build("AppendClasspath_HelloMore", "HelloMore"); - - int idx = appJar.lastIndexOf(File.separator); - String jarName = appJar.substring(idx + 1); - String jarDir = appJar.substring(0, idx); - // relative path starting with "." - runWithRelativePath(null, topArchiveName, jarDir, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", "." + File.separator + "hello.jar" + File.pathSeparator + appJar2, - "HelloMore") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldContain("Hello World ... More") - .shouldHaveExitValue(0); - }); - - // relative path starting with ".." - idx = jarDir.lastIndexOf(File.separator); - String jarSubDir = jarDir.substring(idx + 1); - runWithRelativePath(null, topArchiveName, jarDir, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", - ".." + File.separator + jarSubDir + File.separator + "hello.jar" + File.pathSeparator + appJar2, - "HelloMore") - .assertNormalExit(output -> { - output.shouldContain("Hello source: shared objects file") - .shouldContain("Hello World ... More") - .shouldHaveExitValue(0); - }); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/RelativePath.java 2019-07-24 08:27:22.333469243 -0400 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test relative paths specified in the -cp. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java + * @compile ../test-classes/HelloMore.java + * @run driver RelativePath + */ + +import java.io.File; + +public class RelativePath extends DynamicArchiveTestBase { + + public static void main(String[] args) throws Exception { + runTest(AppendClasspath::testDefaultBase); + } + + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(topArchiveName); + } + + private static void doTest(String topArchiveName) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + String appJar2 = JarBuilder.build("AppendClasspath_HelloMore", "HelloMore"); + + int idx = appJar.lastIndexOf(File.separator); + String jarName = appJar.substring(idx + 1); + String jarDir = appJar.substring(0, idx); + // relative path starting with "." + runWithRelativePath(null, topArchiveName, jarDir, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", "." + File.separator + "hello.jar" + File.pathSeparator + appJar2, + "HelloMore") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldContain("Hello World ... More") + .shouldHaveExitValue(0); + }); + + // relative path starting with ".." + idx = jarDir.lastIndexOf(File.separator); + String jarSubDir = jarDir.substring(idx + 1); + runWithRelativePath(null, topArchiveName, jarDir, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", + ".." + File.separator + jarSubDir + File.separator + "hello.jar" + File.pathSeparator + appJar2, + "HelloMore") + .assertNormalExit(output -> { + output.shouldContain("Hello source: shared objects file") + .shouldContain("Hello World ... More") + .shouldHaveExitValue(0); + }); + + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/SharedArchiveFileOption.java 2019-07-24 08:27:23.021469219 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Some negative tests for the SharedArchiveFile option - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @build Hello - * @run driver ClassFileInstaller -jar hello.jar Hello - * @run driver SharedArchiveFileOption - */ - -import java.io.File; - -public class SharedArchiveFileOption extends DynamicArchiveTestBase { - public static void main(String[] args) throws Exception { - runTest(SharedArchiveFileOption::testCustomBase); - } - - static String baseArchiveName2; - static void testCustomBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - String baseArchiveName = getNewArchiveName("base"); - baseArchiveName2 = getNewArchiveName("base2"); - dumpBaseArchive(baseArchiveName); - dumpBaseArchive(baseArchiveName2); - doTest(baseArchiveName, topArchiveName); - } - - private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { - String appJar = ClassFileInstaller.getJarPath("hello.jar"); - String mainClass = "Hello"; - String dummyArchiveName = getNewArchiveName("dummy"); - - // -Xshare:dump specified with -XX:ArchiveClassesAtExit - dump2(dummyArchiveName, dummyArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-Xshare:dump", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldContain("-XX:ArchiveClassesAtExit cannot be used with -Xshare:dump"); - }); - - // more than 1 archive file specified in -XX:SharedArchiveFile during - // dynamic dumpgin - String dummyArchives = dummyArchiveName + File.pathSeparator + dummyArchiveName; - dump2(dummyArchives, dummyArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldContain("Cannot have more than 1 archive file specified in -XX:SharedArchiveFile during CDS dumping"); - }); - - // normal dynamic archive dumping - dump2(baseArchiveName, topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, mainClass) - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - - // same archive file specified for -XX:SharedArchiveFile and -XX:ArchiveClassesAtExit - dump2(baseArchiveName, baseArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldContain("Cannot have the same archive file specified for -XX:SharedArchiveFile and -XX:ArchiveClassesAtExit: " - + baseArchiveName); - }); - - - // a top archive specified in the base archive position - run2(topArchiveName, baseArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldMatch("Not a base shared archive:.*top.*.jsa"); - }); - - // a base archive specified in the top archive position - run2(baseArchiveName, baseArchiveName2, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldMatch("Not a top shared archive:.*base.*.jsa"); - }); - - // more than 2 archives specified in the -XX:ShareArchiveFile option - String baseArchives = baseArchiveName + File.pathSeparator + baseArchiveName2; - run2(baseArchives, topArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldContain( - "Cannot have more than 2 archive files specified in the -XX:SharedArchiveFile option"); - }); - - // base archive not specified - final String topArchive = File.pathSeparator + topArchiveName; - run2(topArchive, null, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldContain( - "Base archive was not specified: " + topArchive); - }); - - // top archive not specified - final String baseArchive = baseArchiveName + File.pathSeparator; - run2(baseArchive, null, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - "-cp", appJar, mainClass) - .assertAbnormalExit(output -> { - output.shouldContain( - "Top archive was not specified: " + baseArchive); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/SharedArchiveFileOption.java 2019-07-24 08:27:22.697469230 -0400 @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Some negative tests for the SharedArchiveFile option + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @build Hello + * @run driver ClassFileInstaller -jar hello.jar Hello + * @run driver SharedArchiveFileOption + */ + +import java.io.File; + +public class SharedArchiveFileOption extends DynamicArchiveTestBase { + public static void main(String[] args) throws Exception { + runTest(SharedArchiveFileOption::testCustomBase); + } + + static String baseArchiveName2; + static void testCustomBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + String baseArchiveName = getNewArchiveName("base"); + baseArchiveName2 = getNewArchiveName("base2"); + dumpBaseArchive(baseArchiveName); + dumpBaseArchive(baseArchiveName2); + doTest(baseArchiveName, topArchiveName); + } + + private static void doTest(String baseArchiveName, String topArchiveName) throws Exception { + String appJar = ClassFileInstaller.getJarPath("hello.jar"); + String mainClass = "Hello"; + String dummyArchiveName = getNewArchiveName("dummy"); + + // -Xshare:dump specified with -XX:ArchiveClassesAtExit + dump2(dummyArchiveName, dummyArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-Xshare:dump", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldContain("-XX:ArchiveClassesAtExit cannot be used with -Xshare:dump"); + }); + + // more than 1 archive file specified in -XX:SharedArchiveFile during + // dynamic dumpgin + String dummyArchives = dummyArchiveName + File.pathSeparator + dummyArchiveName; + dump2(dummyArchives, dummyArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldContain("Cannot have more than 1 archive file specified in -XX:SharedArchiveFile during CDS dumping"); + }); + + // normal dynamic archive dumping + dump2(baseArchiveName, topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, mainClass) + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + + // same archive file specified for -XX:SharedArchiveFile and -XX:ArchiveClassesAtExit + dump2(baseArchiveName, baseArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldContain("Cannot have the same archive file specified for -XX:SharedArchiveFile and -XX:ArchiveClassesAtExit: " + + baseArchiveName); + }); + + + // a top archive specified in the base archive position + run2(topArchiveName, baseArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldMatch("Not a base shared archive:.*top.*.jsa"); + }); + + // a base archive specified in the top archive position + run2(baseArchiveName, baseArchiveName2, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldMatch("Not a top shared archive:.*base.*.jsa"); + }); + + // more than 2 archives specified in the -XX:ShareArchiveFile option + String baseArchives = baseArchiveName + File.pathSeparator + baseArchiveName2; + run2(baseArchives, topArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldContain( + "Cannot have more than 2 archive files specified in the -XX:SharedArchiveFile option"); + }); + + // base archive not specified + final String topArchive = File.pathSeparator + topArchiveName; + run2(topArchive, null, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldContain( + "Base archive was not specified: " + topArchive); + }); + + // top archive not specified + final String baseArchive = baseArchiveName + File.pathSeparator; + run2(baseArchive, null, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + "-cp", appJar, mainClass) + .assertAbnormalExit(output -> { + output.shouldContain( + "Top archive was not specified: " + baseArchive); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/UnsupportedBaseArchive.java 2019-07-24 08:27:23.425469204 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -/* - * @test - * @summary unsupported base archive tests - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @modules jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver UnsupportedBaseArchive - */ - -public class UnsupportedBaseArchive extends DynamicArchiveTestBase { - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String FS = File.separator; - private static final String TEST_SRC = System.getProperty("test.src") + - FS + ".." + FS + "jigsaw" + FS + "modulepath"; - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String TEST_MODULE = "com.simple"; - - // the module main class - private static final String MAIN_CLASS = "com.simple.Main"; - - private static Path moduleDir = null; - private static Path srcJar = null; - - private static final String warningBCP = - "Dynamic archiving is disabled because base layer archive has appended boot classpath"; - - private static final String warningModulePath = - "Dynamic archiving is disabled because base layer archive has module path"; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE), - MODS_DIR.resolve(TEST_MODULE), - MODS_DIR.toString()); - - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - srcJar = moduleDir.resolve(TEST_MODULE + ".jar"); - String classes = MODS_DIR.resolve(TEST_MODULE).toString(); - JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); - } - - public static void main(String[] args) throws Exception { - runTest(UnsupportedBaseArchive::test); - } - - static void test(String args[]) throws Exception { - String topArchiveName = getNewArchiveName("top"); - String baseArchiveName = getNewArchiveName("base"); - - // create a base archive with -Xbootclasspath/a:whitebox.jar - dumpBaseArchive_WB(baseArchiveName); - - String appJar = JarBuilder.getOrCreateHelloJar(); - String mainClass = "Hello"; - - // dumping of dynamic archive should be disabled with a warning message - // if the base archive contains -Xbootclasspath/a entries. - dump2_WB(baseArchiveName, topArchiveName, - "-Xlog:cds*", - "-Xlog:cds+dynamic=debug", - "-Xlog:class+path=info", - "-cp", appJar, mainClass) - .assertNormalExit(warningBCP); - - // create a base archive with the --module-path option - buildTestModule(); - baseArchiveName = getNewArchiveName("base-with-module"); - dumpBaseArchive(baseArchiveName, - "-cp", srcJar.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE); - - // dumping of dynamic archive should be disabled with a warning message - // if the base archive contains --module-path entries. - topArchiveName = getNewArchiveName("top-with-module"); - dump2(baseArchiveName, topArchiveName, - "-Xlog:cds*", - "-Xlog:cds+dynamic=debug", - "-Xlog:class+path=info", - "-cp", srcJar.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE) - .assertNormalExit(warningModulePath); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/UnsupportedBaseArchive.java 2019-07-24 08:27:23.105469216 -0400 @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +/* + * @test + * @summary unsupported base archive tests + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @modules jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver UnsupportedBaseArchive + */ + +public class UnsupportedBaseArchive extends DynamicArchiveTestBase { + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String FS = File.separator; + private static final String TEST_SRC = System.getProperty("test.src") + + FS + ".." + FS + "jigsaw" + FS + "modulepath"; + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String TEST_MODULE = "com.simple"; + + // the module main class + private static final String MAIN_CLASS = "com.simple.Main"; + + private static Path moduleDir = null; + private static Path srcJar = null; + + private static final String warningBCP = + "Dynamic archiving is disabled because base layer archive has appended boot classpath"; + + private static final String warningModulePath = + "Dynamic archiving is disabled because base layer archive has module path"; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE), + MODS_DIR.resolve(TEST_MODULE), + MODS_DIR.toString()); + + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + srcJar = moduleDir.resolve(TEST_MODULE + ".jar"); + String classes = MODS_DIR.resolve(TEST_MODULE).toString(); + JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); + } + + public static void main(String[] args) throws Exception { + runTest(UnsupportedBaseArchive::test); + } + + static void test(String args[]) throws Exception { + String topArchiveName = getNewArchiveName("top"); + String baseArchiveName = getNewArchiveName("base"); + + // create a base archive with -Xbootclasspath/a:whitebox.jar + dumpBaseArchive_WB(baseArchiveName); + + String appJar = JarBuilder.getOrCreateHelloJar(); + String mainClass = "Hello"; + + // dumping of dynamic archive should be disabled with a warning message + // if the base archive contains -Xbootclasspath/a entries. + dump2_WB(baseArchiveName, topArchiveName, + "-Xlog:cds*", + "-Xlog:cds+dynamic=debug", + "-Xlog:class+path=info", + "-cp", appJar, mainClass) + .assertNormalExit(warningBCP); + + // create a base archive with the --module-path option + buildTestModule(); + baseArchiveName = getNewArchiveName("base-with-module"); + dumpBaseArchive(baseArchiveName, + "-cp", srcJar.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE); + + // dumping of dynamic archive should be disabled with a warning message + // if the base archive contains --module-path entries. + topArchiveName = getNewArchiveName("top-with-module"); + dump2(baseArchiveName, topArchiveName, + "-Xlog:cds*", + "-Xlog:cds+dynamic=debug", + "-Xlog:class+path=info", + "-cp", srcJar.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE) + .assertNormalExit(warningModulePath); + + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/UnusedCPDuringDump.java 2019-07-24 08:27:23.833469190 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary non-empty dir in -cp should be fine during dump time if only classes - * from the system modules are being loaded even though some are - * defined to the PlatformClassLoader and AppClassLoader. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @compile ../test-classes/Hello.java - * @run main/othervm -Dtest.cds.copy.child.stdout=false UnusedCPDuringDump - */ - -import java.io.File; - -public class UnusedCPDuringDump extends DynamicArchiveTestBase { - - public static void main(String[] args) throws Exception { - runTest(UnusedCPDuringDump::testDefaultBase); - } - - static void testDefaultBase() throws Exception { - String topArchiveName = getNewArchiveName("top"); - doTest(topArchiveName); - } - - private static void doTest(String topArchiveName) throws Exception { - File dir = new File(System.getProperty("user.dir")); - File emptydir = new File(dir, "emptydir"); - emptydir.mkdir(); - String appJar = JarBuilder.getOrCreateHelloJar(); - String bootClassPath = "-Xbootclasspath/a:" + appJar; - - // Dumping with a non-empty directory in the -cp. - // It should be fine because the app class won't be loaded from the - // -cp, it is being loaded from the bootclasspath. - dump(topArchiveName, - "-Xlog:cds", - "-Xlog:cds+dynamic=debug", - bootClassPath, - "-cp", dir.getPath(), - "Hello") - .assertNormalExit(output -> { - output.shouldContain("Buffer-space to target-space delta") - .shouldContain("Written dynamic archive 0x"); - }); - - // Running with -cp different from dumping. It should be fine because - // the runtime classpath won't be checked against unused classpath - // during dump time. - run(topArchiveName, - "-Xlog:class+load", - "-Xlog:cds+dynamic=debug,cds=debug", - bootClassPath, - "-cp", appJar, "Hello") - .assertNormalExit(output -> { - output.shouldContain("Hello World") - .shouldHaveExitValue(0); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/UnusedCPDuringDump.java 2019-07-24 08:27:23.525469201 -0400 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary non-empty dir in -cp should be fine during dump time if only classes + * from the system modules are being loaded even though some are + * defined to the PlatformClassLoader and AppClassLoader. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @compile ../test-classes/Hello.java + * @run main/othervm -Dtest.cds.copy.child.stdout=false UnusedCPDuringDump + */ + +import java.io.File; + +public class UnusedCPDuringDump extends DynamicArchiveTestBase { + + public static void main(String[] args) throws Exception { + runTest(UnusedCPDuringDump::testDefaultBase); + } + + static void testDefaultBase() throws Exception { + String topArchiveName = getNewArchiveName("top"); + doTest(topArchiveName); + } + + private static void doTest(String topArchiveName) throws Exception { + File dir = new File(System.getProperty("user.dir")); + File emptydir = new File(dir, "emptydir"); + emptydir.mkdir(); + String appJar = JarBuilder.getOrCreateHelloJar(); + String bootClassPath = "-Xbootclasspath/a:" + appJar; + + // Dumping with a non-empty directory in the -cp. + // It should be fine because the app class won't be loaded from the + // -cp, it is being loaded from the bootclasspath. + dump(topArchiveName, + "-Xlog:cds", + "-Xlog:cds+dynamic=debug", + bootClassPath, + "-cp", dir.getPath(), + "Hello") + .assertNormalExit(output -> { + output.shouldContain("Buffer-space to target-space delta") + .shouldContain("Written dynamic archive 0x"); + }); + + // Running with -cp different from dumping. It should be fine because + // the runtime classpath won't be checked against unused classpath + // during dump time. + run(topArchiveName, + "-Xlog:class+load", + "-Xlog:cds+dynamic=debug,cds=debug", + bootClassPath, + "-cp", appJar, "Hello") + .assertNormalExit(output -> { + output.shouldContain("Hello World") + .shouldHaveExitValue(0); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/WrongTopClasspath.java 2019-07-24 08:27:24.169469179 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; - -/* - * @test - * @summary correct classpath for bottom archive, but bad classpath for top archive - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @build GenericTestApp sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar GenericTestApp.jar GenericTestApp - * @run driver ClassFileInstaller -jar WrongJar.jar GenericTestApp - * @run driver WrongTopClasspath - */ - -public class WrongTopClasspath extends DynamicArchiveTestBase { - - public static void main(String[] args) throws Exception { - runTest(WrongTopClasspath::test); - } - - static void test(String args[]) throws Exception { - String topArchiveName = getNewArchiveName("top"); - String baseArchiveName = getNewArchiveName("base"); - dumpBaseArchive(baseArchiveName); - - String appJar = ClassFileInstaller.getJarPath("GenericTestApp.jar"); - String wrongJar = ClassFileInstaller.getJarPath("WrongJar.jar"); - String mainClass = "GenericTestApp"; - - // Dump the top archive using "-cp GenericTestApp.jar" ... - dump2_WB(baseArchiveName, topArchiveName, - "-Xlog:cds*", - "-Xlog:cds+dynamic=debug", - "-cp", appJar, mainClass) - .assertNormalExit(); - - // ... but try to load the top archive using "-cp WrongJar.jar". - // Use -Xshare:auto so top archive can fail after base archive has succeeded, - // but the app will continue to run. - run2_WB(baseArchiveName, topArchiveName, - "-Xlog:cds*", - "-Xlog:cds+dynamic=debug", - "-Xlog:class+path=info", - "-Xshare:auto", - "-cp", wrongJar, mainClass, - "assertShared:java.lang.Object", // base archive still useable - "assertNotShared:GenericTestApp") // but top archive is not useable - .assertNormalExit("The top archive failed to load"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/WrongTopClasspath.java 2019-07-24 08:27:23.901469188 -0400 @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; + +/* + * @test + * @summary correct classpath for bottom archive, but bad classpath for top archive + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @build GenericTestApp sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar GenericTestApp.jar GenericTestApp + * @run driver ClassFileInstaller -jar WrongJar.jar GenericTestApp + * @run driver WrongTopClasspath + */ + +public class WrongTopClasspath extends DynamicArchiveTestBase { + + public static void main(String[] args) throws Exception { + runTest(WrongTopClasspath::test); + } + + static void test(String args[]) throws Exception { + String topArchiveName = getNewArchiveName("top"); + String baseArchiveName = getNewArchiveName("base"); + dumpBaseArchive(baseArchiveName); + + String appJar = ClassFileInstaller.getJarPath("GenericTestApp.jar"); + String wrongJar = ClassFileInstaller.getJarPath("WrongJar.jar"); + String mainClass = "GenericTestApp"; + + // Dump the top archive using "-cp GenericTestApp.jar" ... + dump2_WB(baseArchiveName, topArchiveName, + "-Xlog:cds*", + "-Xlog:cds+dynamic=debug", + "-cp", appJar, mainClass) + .assertNormalExit(); + + // ... but try to load the top archive using "-cp WrongJar.jar". + // Use -Xshare:auto so top archive can fail after base archive has succeeded, + // but the app will continue to run. + run2_WB(baseArchiveName, topArchiveName, + "-Xlog:cds*", + "-Xlog:cds+dynamic=debug", + "-Xlog:class+path=info", + "-Xshare:auto", + "-cp", wrongJar, mainClass, + "assertShared:java.lang.Object", // base archive still useable + "assertNotShared:GenericTestApp") // but top archive is not useable + .assertNormalExit("The top archive failed to load"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes/ArrayKlassesApp.java 2019-07-24 08:27:24.485469168 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class ArrayKlassesApp { - public static void main(String args[]) { - ArrayKlassesApp[][] array = new ArrayKlassesApp[1][2]; - for (int i=0; i<1; i++) { - for (int j=0; j<2; j++) { - array[i][j] = new ArrayKlassesApp(); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes/ArrayKlassesApp.java 2019-07-24 08:27:24.241469176 -0400 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class ArrayKlassesApp { + public static void main(String args[]) { + ArrayKlassesApp[][] array = new ArrayKlassesApp[1][2]; + for (int i=0; i<1; i++) { + for (int j=0; j<2; j++) { + array[i][j] = new ArrayKlassesApp(); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes/ExcludedClassesApp.java 2019-07-24 08:27:24.789469157 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class ExcludedClassesApp { - interface NotLinkedInterface {} - static class NotLinkedSuper { - - } - - static class NotLinkedChild extends NotLinkedSuper implements NotLinkedInterface { - - } - - public static NotLinkedSuper notUsedMethod() { - return new NotLinkedChild(); - } - - public static void main(String args[]) { - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes/ExcludedClassesApp.java 2019-07-24 08:27:24.529469166 -0400 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class ExcludedClassesApp { + interface NotLinkedInterface {} + static class NotLinkedSuper { + + } + + static class NotLinkedChild extends NotLinkedSuper implements NotLinkedInterface { + + } + + public static NotLinkedSuper notUsedMethod() { + return new NotLinkedChild(); + } + + public static void main(String args[]) { + + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes/LoadClasses.java 2019-07-24 08:27:25.033469148 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -import java.io.File; -import java.util.List; -import java.util.Scanner; -import sun.hotspot.WhiteBox; - -public class LoadClasses { - - public static void main (String[] args) throws Throwable { - String classList = args[0]; - Scanner sc = new Scanner(new File(classList)); - WhiteBox wb = WhiteBox.getWhiteBox(); - int count = 0; - while (sc.hasNextLine()) { - String cn = sc.nextLine().replace('/', '.'); - try { - Class cls = Class.forName(cn, false, LoadClasses.class.getClassLoader()); - wb.linkClass(cls); - count++; - } catch (Throwable ex) { - System.out.println("Loading failed: " + cn); - System.out.println(ex.toString()); - } - } - System.out.println("Loaded classes = " + count); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes/LoadClasses.java 2019-07-24 08:27:24.817469156 -0400 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.io.File; +import java.util.List; +import java.util.Scanner; +import sun.hotspot.WhiteBox; + +public class LoadClasses { + + public static void main (String[] args) throws Throwable { + String classList = args[0]; + Scanner sc = new Scanner(new File(classList)); + WhiteBox wb = WhiteBox.getWhiteBox(); + int count = 0; + while (sc.hasNextLine()) { + String cn = sc.nextLine().replace('/', '.'); + try { + Class cls = Class.forName(cn, false, LoadClasses.class.getClassLoader()); + wb.linkClass(cls); + count++; + } catch (Throwable ex) { + System.out.println("Loading failed: " + cn); + System.out.println(ex.toString()); + } + } + System.out.println("Loaded classes = " + count); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes/MethodSortingApp.java 2019-07-24 08:27:25.301469139 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,177 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.SynchronousQueue; - -public class MethodSortingApp { - static class HelloA { - String aaaa() { return "aaaa"; } - String bbbb() { return "bbbb"; } - String dddd() { return "dddd"; } - String eeee() { return "eeee"; } - String gggg() { return "gggg"; } - } - - static class HelloA1 extends HelloA { - String aaaa() { return "aaa-"; } - String dddd() { return "ddd-"; } - String gggg() { return "ggg-"; } - } - - static class HelloB { - String aaaa() { return "aaaa"; } - String cccc() { return "cccc"; } - String dddd() { return "dddd"; } - String ffff() { return "ffff"; } - String gggg() { return "gggg"; } - } - - static class HelloB1 extends HelloB { - String aaaa() { return "aaa-"; } - String dddd() { return "ddd-"; } - String gggg() { return "ggg-"; } - } - - // Default methods in interfaces must be sorted - static interface InterfaceA { - default public String aaa() { return "aaa";} - default public String bbb() { return "bbb";} - default public String ddd() { return "ddd";} - default public String eee() { return "eee";} - default public String ggg() { return "ggg";} - } - - static class ImplementorA implements InterfaceA { - public String aaa() { return "aa-";} - } - - static class ImplementorA1 extends ImplementorA { - public String bbb() { return "bb-";} - } - - static interface InterfaceB { - default public String aaa() { return "aaa"; } - default public String ccc() { return "ccc"; } - default public String ddd() { return "ddd"; } - default public String fff() { return "fff"; } - default public String ggg() { return "ggg"; } - } - - static class ImplementorB implements InterfaceB { - public String ggg() { return "gg-";} - } - - static class ImplementorB1 extends ImplementorB { - public String fff() { return "ff-";} - } - - - public static void main(String args[]) { - testSimpleMethods(); - testDefaultMethods(); - testMixedInterfaces(); - } - - static void testSimpleMethods() { - // When HelloA and HelloB are copied into the dynamic archive, the Symbols - // for their method's names will have a different sorting order. This requires - // that the dumped InstanceKlass to re-sort their "methods" array and re-layout - // the vtables/itables. - HelloA1 a1 = new HelloA1(); - HelloA a = new HelloA(); - assertEqual(a.aaaa(), "aaaa"); - assertEqual(a.bbbb(), "bbbb"); - assertEqual(a.dddd(), "dddd"); - assertEqual(a.eeee(), "eeee"); - assertEqual(a.gggg(), "gggg"); - - assertEqual(a1.aaaa(), "aaa-"); - assertEqual(a1.bbbb(), "bbbb"); - assertEqual(a1.dddd(), "ddd-"); - assertEqual(a1.eeee(), "eeee"); - assertEqual(a1.gggg(), "ggg-"); - - HelloB b = new HelloB(); - assertEqual(b.aaaa(), "aaaa"); - assertEqual(b.cccc(), "cccc"); - assertEqual(b.dddd(), "dddd"); - assertEqual(b.ffff(), "ffff"); - assertEqual(b.gggg(), "gggg"); - - HelloB b1 = new HelloB1(); - assertEqual(b1.aaaa(), "aaa-"); - assertEqual(b1.cccc(), "cccc"); - assertEqual(b1.dddd(), "ddd-"); - assertEqual(b1.ffff(), "ffff"); - assertEqual(b1.gggg(), "ggg-"); - } - - static void testDefaultMethods() { - InterfaceA a1 = new ImplementorA1(); - InterfaceA a = new ImplementorA(); - - assertEqual(a.aaa(), "aa-"); - assertEqual(a.bbb(), "bbb"); - assertEqual(a.ddd(), "ddd"); - assertEqual(a.eee(), "eee"); - assertEqual(a.ggg(), "ggg"); - - assertEqual(a1.aaa(), "aa-"); - assertEqual(a1.bbb(), "bb-"); - assertEqual(a1.ddd(), "ddd"); - assertEqual(a1.eee(), "eee"); - assertEqual(a1.ggg(), "ggg"); - - InterfaceB b = new ImplementorB(); - InterfaceB b1 = new ImplementorB1(); - - assertEqual(b.aaa(), "aaa"); - assertEqual(b.ccc(), "ccc"); - assertEqual(b.ddd(), "ddd"); - assertEqual(b.fff(), "fff"); - assertEqual(b.ggg(), "gg-"); - - assertEqual(b1.aaa(), "aaa"); - assertEqual(b1.ccc(), "ccc"); - assertEqual(b1.ddd(), "ddd"); - assertEqual(b1.fff(), "ff-"); - assertEqual(b1.ggg(), "gg-"); - } - - // This is a regression test for an earlier bug in - // DynamicArchiveBuilder::relocate_buffer_to_target() - static void testMixedInterfaces() { - Object xx = new SynchronousQueue(); - BlockingQueue yy = (BlockingQueue)xx; - } - - static private void assertEqual(String a, String b) { - if (!a.equals(b)) { - throw new RuntimeException(a + " is not equal to " + b); - } else { - System.out.println("Expected: " + a + ", got: " + b); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes/MethodSortingApp.java 2019-07-24 08:27:25.069469147 -0400 @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.SynchronousQueue; + +public class MethodSortingApp { + static class HelloA { + String aaaa() { return "aaaa"; } + String bbbb() { return "bbbb"; } + String dddd() { return "dddd"; } + String eeee() { return "eeee"; } + String gggg() { return "gggg"; } + } + + static class HelloA1 extends HelloA { + String aaaa() { return "aaa-"; } + String dddd() { return "ddd-"; } + String gggg() { return "ggg-"; } + } + + static class HelloB { + String aaaa() { return "aaaa"; } + String cccc() { return "cccc"; } + String dddd() { return "dddd"; } + String ffff() { return "ffff"; } + String gggg() { return "gggg"; } + } + + static class HelloB1 extends HelloB { + String aaaa() { return "aaa-"; } + String dddd() { return "ddd-"; } + String gggg() { return "ggg-"; } + } + + // Default methods in interfaces must be sorted + static interface InterfaceA { + default public String aaa() { return "aaa";} + default public String bbb() { return "bbb";} + default public String ddd() { return "ddd";} + default public String eee() { return "eee";} + default public String ggg() { return "ggg";} + } + + static class ImplementorA implements InterfaceA { + public String aaa() { return "aa-";} + } + + static class ImplementorA1 extends ImplementorA { + public String bbb() { return "bb-";} + } + + static interface InterfaceB { + default public String aaa() { return "aaa"; } + default public String ccc() { return "ccc"; } + default public String ddd() { return "ddd"; } + default public String fff() { return "fff"; } + default public String ggg() { return "ggg"; } + } + + static class ImplementorB implements InterfaceB { + public String ggg() { return "gg-";} + } + + static class ImplementorB1 extends ImplementorB { + public String fff() { return "ff-";} + } + + + public static void main(String args[]) { + testSimpleMethods(); + testDefaultMethods(); + testMixedInterfaces(); + } + + static void testSimpleMethods() { + // When HelloA and HelloB are copied into the dynamic archive, the Symbols + // for their method's names will have a different sorting order. This requires + // that the dumped InstanceKlass to re-sort their "methods" array and re-layout + // the vtables/itables. + HelloA1 a1 = new HelloA1(); + HelloA a = new HelloA(); + assertEqual(a.aaaa(), "aaaa"); + assertEqual(a.bbbb(), "bbbb"); + assertEqual(a.dddd(), "dddd"); + assertEqual(a.eeee(), "eeee"); + assertEqual(a.gggg(), "gggg"); + + assertEqual(a1.aaaa(), "aaa-"); + assertEqual(a1.bbbb(), "bbbb"); + assertEqual(a1.dddd(), "ddd-"); + assertEqual(a1.eeee(), "eeee"); + assertEqual(a1.gggg(), "ggg-"); + + HelloB b = new HelloB(); + assertEqual(b.aaaa(), "aaaa"); + assertEqual(b.cccc(), "cccc"); + assertEqual(b.dddd(), "dddd"); + assertEqual(b.ffff(), "ffff"); + assertEqual(b.gggg(), "gggg"); + + HelloB b1 = new HelloB1(); + assertEqual(b1.aaaa(), "aaa-"); + assertEqual(b1.cccc(), "cccc"); + assertEqual(b1.dddd(), "ddd-"); + assertEqual(b1.ffff(), "ffff"); + assertEqual(b1.gggg(), "ggg-"); + } + + static void testDefaultMethods() { + InterfaceA a1 = new ImplementorA1(); + InterfaceA a = new ImplementorA(); + + assertEqual(a.aaa(), "aa-"); + assertEqual(a.bbb(), "bbb"); + assertEqual(a.ddd(), "ddd"); + assertEqual(a.eee(), "eee"); + assertEqual(a.ggg(), "ggg"); + + assertEqual(a1.aaa(), "aa-"); + assertEqual(a1.bbb(), "bb-"); + assertEqual(a1.ddd(), "ddd"); + assertEqual(a1.eee(), "eee"); + assertEqual(a1.ggg(), "ggg"); + + InterfaceB b = new ImplementorB(); + InterfaceB b1 = new ImplementorB1(); + + assertEqual(b.aaa(), "aaa"); + assertEqual(b.ccc(), "ccc"); + assertEqual(b.ddd(), "ddd"); + assertEqual(b.fff(), "fff"); + assertEqual(b.ggg(), "gg-"); + + assertEqual(b1.aaa(), "aaa"); + assertEqual(b1.ccc(), "ccc"); + assertEqual(b1.ddd(), "ddd"); + assertEqual(b1.fff(), "ff-"); + assertEqual(b1.ggg(), "gg-"); + } + + // This is a regression test for an earlier bug in + // DynamicArchiveBuilder::relocate_buffer_to_target() + static void testMixedInterfaces() { + Object xx = new SynchronousQueue(); + BlockingQueue yy = (BlockingQueue)xx; + } + + static private void assertEqual(String a, String b) { + if (!a.equals(b)) { + throw new RuntimeException(a + " is not equal to " + b); + } else { + System.out.println("Expected: " + a + ", got: " + b); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes/MissingDependent.java 2019-07-24 08:27:25.669469126 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class MissingDependent { - public static void main(String args[]) throws Exception { - try { - Object obj = new StrConcatApp(); - } catch (Throwable e) { - String cause = e.getCause().toString(); - if (cause.equals("java.lang.ClassNotFoundException: StrConcatApp")) { - e.printStackTrace(); - } else { - throw e; - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes/MissingDependent.java 2019-07-24 08:27:25.353469137 -0400 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class MissingDependent { + public static void main(String args[]) throws Exception { + try { + Object obj = new StrConcatApp(); + } catch (Throwable e) { + String cause = e.getCause().toString(); + if (cause.equals("java.lang.ClassNotFoundException: StrConcatApp")) { + e.printStackTrace(); + } else { + throw e; + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes/StrConcatApp.java 2019-07-24 08:27:25.913469118 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class StrConcatApp { - public static void main(String args[]) { - System.out.println("length = " + args.length); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes/StrConcatApp.java 2019-07-24 08:27:25.709469125 -0400 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class StrConcatApp { + public static void main(String args[]) { + System.out.println("length = " + args.length); + } +} --- old/test/hotspot/jtreg/runtime/appcds/dynamicArchive/test-classes/TestJIT.java 2019-07-24 08:27:26.145469110 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import sun.hotspot.WhiteBox; - -import java.lang.reflect.Method; -import java.util.HashMap; - -public class TestJIT { - - private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); - - static void doSomething() { - HashMap map = new HashMap<>(); - for (int i=0; i<400; i++) { - // Call these methods so that the class/field/method references used - // by these methods are resolved. This allows C2 to compile more code. - String x = "Hello" + i; - map.put(x, x); - map.get(x); - } - } - - static public void main(String[] args) throws NoSuchMethodException { - Method put_method = HashMap.class.getDeclaredMethod("put", Object.class, Object.class); - Method get_method = HashMap.class.getDeclaredMethod("get", Object.class); - Method test_method = TestJIT.class.getDeclaredMethod("doSomething"); - - doSomething(); - - // 4 == CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION => C2 - WHITE_BOX.enqueueMethodForCompilation(get_method, 4); - WHITE_BOX.enqueueMethodForCompilation(put_method, 4); - WHITE_BOX.enqueueMethodForCompilation(test_method, 4); - - // Try to start dynamic dumping while the above compilations are still in progesss - System.exit(0); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/dynamicArchive/test-classes/TestJIT.java 2019-07-24 08:27:25.937469117 -0400 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.hotspot.WhiteBox; + +import java.lang.reflect.Method; +import java.util.HashMap; + +public class TestJIT { + + private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); + + static void doSomething() { + HashMap map = new HashMap<>(); + for (int i=0; i<400; i++) { + // Call these methods so that the class/field/method references used + // by these methods are resolved. This allows C2 to compile more code. + String x = "Hello" + i; + map.put(x, x); + map.get(x); + } + } + + static public void main(String[] args) throws NoSuchMethodException { + Method put_method = HashMap.class.getDeclaredMethod("put", Object.class, Object.class); + Method get_method = HashMap.class.getDeclaredMethod("get", Object.class); + Method test_method = TestJIT.class.getDeclaredMethod("doSomething"); + + doSomething(); + + // 4 == CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION => C2 + WHITE_BOX.enqueueMethodForCompilation(get_method, 4); + WHITE_BOX.enqueueMethodForCompilation(put_method, 4); + WHITE_BOX.enqueueMethodForCompilation(test_method, 4); + + // Try to start dynamic dumping while the above compilations are still in progesss + System.exit(0); + } +} --- old/test/hotspot/jtreg/runtime/appcds/javaldr/AnonVmClassesDuringDump.java 2019-07-24 08:27:26.469469098 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary When dumping the CDS archive, try to load VM anonymous classes to make sure they - * are handled properly. Note: these are not "anonymous inner classes" in the Java source code, - * but rather classes that are not recorded in any ClassLoaderData::dictionary(), - * such as classes that are generated for Lambda expressions. - * See https://blogs.oracle.com/jrose/anonymous-classes-in-the-vm. - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * @build AnonVmClassesDuringDumpTransformer Hello - * @run main/othervm AnonVmClassesDuringDump - */ - -public class AnonVmClassesDuringDump { - public static String appClasses[] = { - "Hello", - }; - public static String agentClasses[] = { - "AnonVmClassesDuringDumpTransformer", - }; - - public static String cdsDiagnosticOption = "-XX:+AllowArchivingWithJavaAgent"; - - public static void main(String[] args) throws Throwable { - String agentJar = - ClassFileInstaller.writeJar("AnonVmClassesDuringDumpTransformer.jar", - ClassFileInstaller.Manifest.fromSourceFile("AnonVmClassesDuringDumpTransformer.mf"), - agentClasses); - - String appJar = - ClassFileInstaller.writeJar("AnonVmClassesDuringDumpApp.jar", appClasses); - - TestCommon.testDump(appJar, TestCommon.list("Hello"), - "-javaagent:" + agentJar, - "-XX:+UnlockDiagnosticVMOptions", cdsDiagnosticOption, - // Set the following property to see logs for dynamically generated classes - // in STDOUT - "-Djava.lang.invoke.MethodHandle.DUMP_CLASS_FILES=true"); - - String prefix = ".class.load. "; - // class name pattern like the following: - // jdk.internal.loader.BuiltinClassLoader$$Lambda$1/1816757085 - // java.lang.invoke.LambdaForm$MH/1585787493 - String class_pattern = ".*Lambda([a-z0-9$]+)/([0-9]+).*"; - String suffix = ".*source: shared objects file.*"; - String pattern = prefix + class_pattern + suffix; - // during run time, anonymous classes shouldn't be loaded from the archive - TestCommon.run("-cp", appJar, - "-XX:+UnlockDiagnosticVMOptions", cdsDiagnosticOption, "Hello") - .assertNormalExit(output -> output.shouldNotMatch(pattern)); - - // inspect the archive and make sure no anonymous class is in there - TestCommon.run("-cp", appJar, - "-XX:+UnlockDiagnosticVMOptions", cdsDiagnosticOption, - "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary", "Hello") - .assertNormalExit(output -> output.shouldNotMatch(class_pattern)); - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/AnonVmClassesDuringDump.java 2019-07-24 08:27:26.181469108 -0400 @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary When dumping the CDS archive, try to load VM anonymous classes to make sure they + * are handled properly. Note: these are not "anonymous inner classes" in the Java source code, + * but rather classes that are not recorded in any ClassLoaderData::dictionary(), + * such as classes that are generated for Lambda expressions. + * See https://blogs.oracle.com/jrose/anonymous-classes-in-the-vm. + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * @build AnonVmClassesDuringDumpTransformer Hello + * @run main/othervm AnonVmClassesDuringDump + */ + +public class AnonVmClassesDuringDump { + public static String appClasses[] = { + "Hello", + }; + public static String agentClasses[] = { + "AnonVmClassesDuringDumpTransformer", + }; + + public static String cdsDiagnosticOption = "-XX:+AllowArchivingWithJavaAgent"; + + public static void main(String[] args) throws Throwable { + String agentJar = + ClassFileInstaller.writeJar("AnonVmClassesDuringDumpTransformer.jar", + ClassFileInstaller.Manifest.fromSourceFile("AnonVmClassesDuringDumpTransformer.mf"), + agentClasses); + + String appJar = + ClassFileInstaller.writeJar("AnonVmClassesDuringDumpApp.jar", appClasses); + + TestCommon.testDump(appJar, TestCommon.list("Hello"), + "-javaagent:" + agentJar, + "-XX:+UnlockDiagnosticVMOptions", cdsDiagnosticOption, + // Set the following property to see logs for dynamically generated classes + // in STDOUT + "-Djava.lang.invoke.MethodHandle.DUMP_CLASS_FILES=true"); + + String prefix = ".class.load. "; + // class name pattern like the following: + // jdk.internal.loader.BuiltinClassLoader$$Lambda$1/1816757085 + // java.lang.invoke.LambdaForm$MH/1585787493 + String class_pattern = ".*Lambda([a-z0-9$]+)/([0-9]+).*"; + String suffix = ".*source: shared objects file.*"; + String pattern = prefix + class_pattern + suffix; + // during run time, anonymous classes shouldn't be loaded from the archive + TestCommon.run("-cp", appJar, + "-XX:+UnlockDiagnosticVMOptions", cdsDiagnosticOption, "Hello") + .assertNormalExit(output -> output.shouldNotMatch(pattern)); + + // inspect the archive and make sure no anonymous class is in there + TestCommon.run("-cp", appJar, + "-XX:+UnlockDiagnosticVMOptions", cdsDiagnosticOption, + "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary", "Hello") + .assertNormalExit(output -> output.shouldNotMatch(class_pattern)); + } +} + --- old/test/hotspot/jtreg/runtime/appcds/javaldr/AnonVmClassesDuringDumpTransformer.java 2019-07-24 08:27:26.805469087 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.Instrumentation; -import java.lang.instrument.IllegalClassFormatException; -import java.security.ProtectionDomain; - -public class AnonVmClassesDuringDumpTransformer implements ClassFileTransformer { - public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, - ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { - return null; - } - - private static Instrumentation savedInstrumentation; - - public static void premain(String agentArguments, Instrumentation instrumentation) { - System.out.println("ClassFileTransformer.premain() is called"); - instrumentation.addTransformer(new AnonVmClassesDuringDumpTransformer(), /*canRetransform=*/true); - savedInstrumentation = instrumentation; - - // This will create a Lambda, which will result in some Anonymous VM Classes - // being generated. - // - // Look for something like these in the STDOUT: - // ---------------- - // ClassFileTransformer.premain() is called - // Dumping class files to DUMP_CLASS_FILES/... - // dump: DUMP_CLASS_FILES/java/lang/invoke/LambdaForm$MH000.class - // dump: DUMP_CLASS_FILES/java/lang/invoke/LambdaForm$MH001.class - // Invoked inside a Lambda - // ---------------- - Runnable r = () -> { - System.out.println("Invoked inside a Lambda"); - }; - r.run(); - } - - public static Instrumentation getInstrumentation() { - return savedInstrumentation; - } - - public static void agentmain(String args, Instrumentation inst) throws Exception { - premain(args, inst); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/AnonVmClassesDuringDumpTransformer.java 2019-07-24 08:27:26.545469096 -0400 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.Instrumentation; +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; + +public class AnonVmClassesDuringDumpTransformer implements ClassFileTransformer { + public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, + ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { + return null; + } + + private static Instrumentation savedInstrumentation; + + public static void premain(String agentArguments, Instrumentation instrumentation) { + System.out.println("ClassFileTransformer.premain() is called"); + instrumentation.addTransformer(new AnonVmClassesDuringDumpTransformer(), /*canRetransform=*/true); + savedInstrumentation = instrumentation; + + // This will create a Lambda, which will result in some Anonymous VM Classes + // being generated. + // + // Look for something like these in the STDOUT: + // ---------------- + // ClassFileTransformer.premain() is called + // Dumping class files to DUMP_CLASS_FILES/... + // dump: DUMP_CLASS_FILES/java/lang/invoke/LambdaForm$MH000.class + // dump: DUMP_CLASS_FILES/java/lang/invoke/LambdaForm$MH001.class + // Invoked inside a Lambda + // ---------------- + Runnable r = () -> { + System.out.println("Invoked inside a Lambda"); + }; + r.run(); + } + + public static Instrumentation getInstrumentation() { + return savedInstrumentation; + } + + public static void agentmain(String args, Instrumentation inst) throws Exception { + premain(args, inst); + } +} --- old/test/hotspot/jtreg/runtime/appcds/javaldr/AnonVmClassesDuringDumpTransformer.mf 2019-07-24 08:27:27.125469076 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -Premain-Class: AnonVmClassesDuringDumpTransformer -Agent-Class: AnonVmClassesDuringDumpTransformer -Can-Retransform-Classes: true -Can-Redefine-Classes: true --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/AnonVmClassesDuringDumpTransformer.mf 2019-07-24 08:27:26.849469085 -0400 @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Premain-Class: AnonVmClassesDuringDumpTransformer +Agent-Class: AnonVmClassesDuringDumpTransformer +Can-Retransform-Classes: true +Can-Redefine-Classes: true --- old/test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTest.java 2019-07-24 08:27:27.453469064 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary test the ability to archive array classes and load them from the archive - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @compile ArrayTestHelper.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver ArrayTest - */ - -import java.util.List; -import java.util.ArrayList; -import jdk.test.lib.process.OutputAnalyzer; - -public class ArrayTest { - - static String arrayClasses[] = { - "ArrayTestHelper", - "[Ljava/lang/Comparable;", - "[I", - "[[[Ljava/lang/Object;", - "[[B" - }; - - public static void main(String[] args) throws Exception { - JarBuilder.build("arrayTestHelper", "ArrayTestHelper"); - - String appJar = TestCommon.getTestJar("arrayTestHelper.jar"); - JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); - String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; - - // create an archive containing array classes - OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list(arrayClasses), bootClassPath); - // we currently don't support array classes during CDS dump - output.shouldContain("Preload Warning: Cannot find [Ljava/lang/Comparable;") - .shouldContain("Preload Warning: Cannot find [I") - .shouldContain("Preload Warning: Cannot find [[[Ljava/lang/Object;") - .shouldContain("Preload Warning: Cannot find [[B"); - - List argsList = new ArrayList(); - argsList.add("-XX:+UnlockDiagnosticVMOptions"); - argsList.add("-XX:+WhiteBoxAPI"); - argsList.add("-cp"); - argsList.add(appJar); - argsList.add(bootClassPath); - argsList.add("ArrayTestHelper"); - // the following are input args to the ArrayTestHelper. - // skip checking array classes during run time - for (int i = 0; i < 1; i++) { - argsList.add(arrayClasses[i]); - } - String[] opts = new String[argsList.size()]; - opts = argsList.toArray(opts); - TestCommon.run(opts).assertNormalExit(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/ArrayTest.java 2019-07-24 08:27:27.173469074 -0400 @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary test the ability to archive array classes and load them from the archive + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @compile ArrayTestHelper.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver ArrayTest + */ + +import java.util.List; +import java.util.ArrayList; +import jdk.test.lib.process.OutputAnalyzer; + +public class ArrayTest { + + static String arrayClasses[] = { + "ArrayTestHelper", + "[Ljava/lang/Comparable;", + "[I", + "[[[Ljava/lang/Object;", + "[[B" + }; + + public static void main(String[] args) throws Exception { + JarBuilder.build("arrayTestHelper", "ArrayTestHelper"); + + String appJar = TestCommon.getTestJar("arrayTestHelper.jar"); + JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); + String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; + + // create an archive containing array classes + OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list(arrayClasses), bootClassPath); + // we currently don't support array classes during CDS dump + output.shouldContain("Preload Warning: Cannot find [Ljava/lang/Comparable;") + .shouldContain("Preload Warning: Cannot find [I") + .shouldContain("Preload Warning: Cannot find [[[Ljava/lang/Object;") + .shouldContain("Preload Warning: Cannot find [[B"); + + List argsList = new ArrayList(); + argsList.add("-XX:+UnlockDiagnosticVMOptions"); + argsList.add("-XX:+WhiteBoxAPI"); + argsList.add("-cp"); + argsList.add(appJar); + argsList.add(bootClassPath); + argsList.add("ArrayTestHelper"); + // the following are input args to the ArrayTestHelper. + // skip checking array classes during run time + for (int i = 0; i < 1; i++) { + argsList.add(arrayClasses[i]); + } + String[] opts = new String[argsList.size()]; + opts = argsList.toArray(opts); + TestCommon.run(opts).assertNormalExit(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTestHelper.java 2019-07-24 08:27:27.845469051 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class ArrayTestHelper { - public static void main(String[] args) throws Throwable { - - // load the classes one by one and ensure each one is from - // the shared archive - for (int i = 0; i < args.length; i++) { - - String cn = args[i].replace('/', '.'); - Class cls = Class.forName(cn); - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (wb.isSharedClass(cls)) { - System.out.println("As expected, " + args[i] + " is in shared space."); - } else { - throw new java.lang.RuntimeException(args[i] + " is not in shared space."); - } - } - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/ArrayTestHelper.java 2019-07-24 08:27:27.533469061 -0400 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class ArrayTestHelper { + public static void main(String[] args) throws Throwable { + + // load the classes one by one and ensure each one is from + // the shared archive + for (int i = 0; i < args.length; i++) { + + String cn = args[i].replace('/', '.'); + Class cls = Class.forName(cn); + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (wb.isSharedClass(cls)) { + System.out.println("As expected, " + args[i] + " is in shared space."); + } else { + throw new java.lang.RuntimeException(args[i] + " is not in shared space."); + } + } + } +} + --- old/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDump.java 2019-07-24 08:27:28.229469037 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary When dumping the CDS archive, try to cause garbage collection while classes are being loaded. - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * @build GCDuringDumpTransformer Hello - * @run main/othervm GCDuringDump - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class GCDuringDump { - public static String appClasses[] = { - "Hello", - }; - public static String agentClasses[] = { - "GCDuringDumpTransformer", - }; - - public static void main(String[] args) throws Throwable { - String agentJar = - ClassFileInstaller.writeJar("GCDuringDumpTransformer.jar", - ClassFileInstaller.Manifest.fromSourceFile("GCDuringDumpTransformer.mf"), - agentClasses); - - String appJar = - ClassFileInstaller.writeJar("GCDuringDumpApp.jar", appClasses); - - String gcLog = Boolean.getBoolean("test.cds.verbose.gc") ? - "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug" : "-showversion"; - - for (int i=0; i<2; i++) { - // i = 0 -- run without agent = no extra GCs - // i = 1 -- run with agent = cause extra GCs - - String extraArg = (i == 0) ? "-showversion" : "-javaagent:" + agentJar; - String extraOption = (i == 0) ? "-showversion" : "-XX:+AllowArchivingWithJavaAgent"; - - TestCommon.testDump(appJar, TestCommon.list("Hello"), - "-XX:+UnlockDiagnosticVMOptions", extraOption, - extraArg, "-Xmx32m", gcLog); - - TestCommon.run( - "-cp", appJar, - "-Xmx32m", - "-XX:+PrintSharedSpaces", - "-XX:+UnlockDiagnosticVMOptions", extraOption, - gcLog, - "Hello") - .assertNormalExit(); - } - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/GCDuringDump.java 2019-07-24 08:27:27.897469049 -0400 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary When dumping the CDS archive, try to cause garbage collection while classes are being loaded. + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * @build GCDuringDumpTransformer Hello + * @run main/othervm GCDuringDump + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class GCDuringDump { + public static String appClasses[] = { + "Hello", + }; + public static String agentClasses[] = { + "GCDuringDumpTransformer", + }; + + public static void main(String[] args) throws Throwable { + String agentJar = + ClassFileInstaller.writeJar("GCDuringDumpTransformer.jar", + ClassFileInstaller.Manifest.fromSourceFile("GCDuringDumpTransformer.mf"), + agentClasses); + + String appJar = + ClassFileInstaller.writeJar("GCDuringDumpApp.jar", appClasses); + + String gcLog = Boolean.getBoolean("test.cds.verbose.gc") ? + "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug" : "-showversion"; + + for (int i=0; i<2; i++) { + // i = 0 -- run without agent = no extra GCs + // i = 1 -- run with agent = cause extra GCs + + String extraArg = (i == 0) ? "-showversion" : "-javaagent:" + agentJar; + String extraOption = (i == 0) ? "-showversion" : "-XX:+AllowArchivingWithJavaAgent"; + + TestCommon.testDump(appJar, TestCommon.list("Hello"), + "-XX:+UnlockDiagnosticVMOptions", extraOption, + extraArg, "-Xmx32m", gcLog); + + TestCommon.run( + "-cp", appJar, + "-Xmx32m", + "-XX:+PrintSharedSpaces", + "-XX:+UnlockDiagnosticVMOptions", extraOption, + gcLog, + "Hello") + .assertNormalExit(); + } + } +} + --- old/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDumpTransformer.java 2019-07-24 08:27:28.649469023 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.Instrumentation; -import java.lang.instrument.IllegalClassFormatException; -import java.security.ProtectionDomain; - -public class GCDuringDumpTransformer implements ClassFileTransformer { - public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, - ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { - try { - makeGarbage(); - } catch (Throwable t) { - t.printStackTrace(); - try { - Thread.sleep(200); // let GC to have a chance to run - } catch (Throwable t2) {} - } - - return null; - } - - private static Instrumentation savedInstrumentation; - - public static void premain(String agentArguments, Instrumentation instrumentation) { - System.out.println("ClassFileTransformer.premain() is called"); - instrumentation.addTransformer(new GCDuringDumpTransformer(), /*canRetransform=*/true); - savedInstrumentation = instrumentation; - } - - public static Instrumentation getInstrumentation() { - return savedInstrumentation; - } - - public static void agentmain(String args, Instrumentation inst) throws Exception { - premain(args, inst); - } - - public static void makeGarbage() { - for (int x=0; x<10; x++) { - Object[] a = new Object[10000]; - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/GCDuringDumpTransformer.java 2019-07-24 08:27:28.337469033 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.Instrumentation; +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; + +public class GCDuringDumpTransformer implements ClassFileTransformer { + public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, + ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { + try { + makeGarbage(); + } catch (Throwable t) { + t.printStackTrace(); + try { + Thread.sleep(200); // let GC to have a chance to run + } catch (Throwable t2) {} + } + + return null; + } + + private static Instrumentation savedInstrumentation; + + public static void premain(String agentArguments, Instrumentation instrumentation) { + System.out.println("ClassFileTransformer.premain() is called"); + instrumentation.addTransformer(new GCDuringDumpTransformer(), /*canRetransform=*/true); + savedInstrumentation = instrumentation; + } + + public static Instrumentation getInstrumentation() { + return savedInstrumentation; + } + + public static void agentmain(String args, Instrumentation inst) throws Exception { + premain(args, inst); + } + + public static void makeGarbage() { + for (int x=0; x<10; x++) { + Object[] a = new Object[10000]; + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDumpTransformer.mf 2019-07-24 08:27:29.037469009 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -Premain-Class: GCDuringDumpTransformer -Agent-Class: GCDuringDumpTransformer -Can-Retransform-Classes: true -Can-Redefine-Classes: true --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/GCDuringDumpTransformer.mf 2019-07-24 08:27:28.705469021 -0400 @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Premain-Class: GCDuringDumpTransformer +Agent-Class: GCDuringDumpTransformer +Can-Retransform-Classes: true +Can-Redefine-Classes: true --- old/test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDump.java 2019-07-24 08:27:29.417468996 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Similar to GCDuringDumping.java, this test adds the -XX:SharedArchiveConfigFile - * option for testing the interaction with GC and shared strings. - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @requires vm.cds.archived.java.heap - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * @build sun.hotspot.WhiteBox GCDuringDumpTransformer GCSharedStringsDuringDumpWb - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run main/othervm/timeout=480 GCSharedStringsDuringDump - */ - -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; -import sun.hotspot.WhiteBox; - -public class GCSharedStringsDuringDump { - public static String appClasses[] = { - "GCSharedStringsDuringDumpWb", - }; - public static String agentClasses[] = { - "GCDuringDumpTransformer", - }; - - public static void main(String[] args) throws Throwable { - String agentJar = - ClassFileInstaller.writeJar("GCDuringDumpTransformer.jar", - ClassFileInstaller.Manifest.fromSourceFile("GCDuringDumpTransformer.mf"), - agentClasses); - - String appJar = - ClassFileInstaller.writeJar("GCSharedStringsDuringDumpApp.jar", appClasses); - - String gcLog = Boolean.getBoolean("test.cds.verbose.gc") ? - "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug" : "-showversion"; - - String sharedArchiveCfgFile = - System.getProperty("user.dir") + File.separator + "GCSharedStringDuringDump_gen.txt"; - try (FileOutputStream fos = new FileOutputStream(sharedArchiveCfgFile)) { - PrintWriter out = new PrintWriter(new OutputStreamWriter(fos)); - out.println("VERSION: 1.0"); - out.println("@SECTION: String"); - out.println("31: shared_test_string_unique_14325"); - for (int i=0; i<100000; i++) { - String s = "generated_string " + i; - out.println(s.length() + ": " + s); - } - out.close(); - } - - JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); - String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; - - for (int i=0; i<2; i++) { - // i = 0 -- run without agent = no extra GCs - // i = 1 -- run with agent = cause extra GCs - - String extraArg = (i == 0) ? "-showversion" : "-javaagent:" + agentJar; - String extraOption = (i == 0) ? "-showversion" : "-XX:+AllowArchivingWithJavaAgent"; - OutputAnalyzer output = TestCommon.dump( - appJar, TestCommon.list("GCSharedStringsDuringDumpWb"), - bootClassPath, extraArg, "-Xmx32m", gcLog, - "-XX:SharedArchiveConfigFile=" + sharedArchiveCfgFile, - "-XX:+UnlockDiagnosticVMOptions", extraOption); - - if (output.getStdout().contains("Too many string space regions") || - output.getStderr().contains("Unable to write archive heap memory regions") || - output.getStdout().contains("Try increasing NewSize") || - !output.getStdout().contains("oa0 space:") || - output.getExitValue() != 0) { - // Try again with larger heap and NewSize, this should increase the - // G1 heap region size to 2M - TestCommon.testDump( - appJar, TestCommon.list("GCSharedStringsDuringDumpWb"), - bootClassPath, extraArg, "-Xmx8g", "-XX:NewSize=8m", gcLog, - "-XX:SharedArchiveConfigFile=" + sharedArchiveCfgFile, - "-XX:+UnlockDiagnosticVMOptions", extraOption); - } - - TestCommon.run( - "-cp", appJar, - bootClassPath, - extraArg, - "-Xlog:cds=info,class+path=info", - "-Xmx32m", - "-XX:+PrintSharedSpaces", - "-XX:+UnlockDiagnosticVMOptions", - extraOption, - "-XX:+WhiteBoxAPI", - "-XX:SharedReadOnlySize=30m", - gcLog, - "GCSharedStringsDuringDumpWb") - .assertNormalExit(); - } - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/GCSharedStringsDuringDump.java 2019-07-24 08:27:29.097469007 -0400 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Similar to GCDuringDumping.java, this test adds the -XX:SharedArchiveConfigFile + * option for testing the interaction with GC and shared strings. + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @requires vm.cds.archived.java.heap + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * @build sun.hotspot.WhiteBox GCDuringDumpTransformer GCSharedStringsDuringDumpWb + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run main/othervm/timeout=480 GCSharedStringsDuringDump + */ + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import sun.hotspot.WhiteBox; + +public class GCSharedStringsDuringDump { + public static String appClasses[] = { + "GCSharedStringsDuringDumpWb", + }; + public static String agentClasses[] = { + "GCDuringDumpTransformer", + }; + + public static void main(String[] args) throws Throwable { + String agentJar = + ClassFileInstaller.writeJar("GCDuringDumpTransformer.jar", + ClassFileInstaller.Manifest.fromSourceFile("GCDuringDumpTransformer.mf"), + agentClasses); + + String appJar = + ClassFileInstaller.writeJar("GCSharedStringsDuringDumpApp.jar", appClasses); + + String gcLog = Boolean.getBoolean("test.cds.verbose.gc") ? + "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug" : "-showversion"; + + String sharedArchiveCfgFile = + System.getProperty("user.dir") + File.separator + "GCSharedStringDuringDump_gen.txt"; + try (FileOutputStream fos = new FileOutputStream(sharedArchiveCfgFile)) { + PrintWriter out = new PrintWriter(new OutputStreamWriter(fos)); + out.println("VERSION: 1.0"); + out.println("@SECTION: String"); + out.println("31: shared_test_string_unique_14325"); + for (int i=0; i<100000; i++) { + String s = "generated_string " + i; + out.println(s.length() + ": " + s); + } + out.close(); + } + + JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); + String bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar; + + for (int i=0; i<2; i++) { + // i = 0 -- run without agent = no extra GCs + // i = 1 -- run with agent = cause extra GCs + + String extraArg = (i == 0) ? "-showversion" : "-javaagent:" + agentJar; + String extraOption = (i == 0) ? "-showversion" : "-XX:+AllowArchivingWithJavaAgent"; + OutputAnalyzer output = TestCommon.dump( + appJar, TestCommon.list("GCSharedStringsDuringDumpWb"), + bootClassPath, extraArg, "-Xmx32m", gcLog, + "-XX:SharedArchiveConfigFile=" + sharedArchiveCfgFile, + "-XX:+UnlockDiagnosticVMOptions", extraOption); + + if (output.getStdout().contains("Too many string space regions") || + output.getStderr().contains("Unable to write archive heap memory regions") || + output.getStdout().contains("Try increasing NewSize") || + !output.getStdout().contains("oa0 space:") || + output.getExitValue() != 0) { + // Try again with larger heap and NewSize, this should increase the + // G1 heap region size to 2M + TestCommon.testDump( + appJar, TestCommon.list("GCSharedStringsDuringDumpWb"), + bootClassPath, extraArg, "-Xmx8g", "-XX:NewSize=8m", gcLog, + "-XX:SharedArchiveConfigFile=" + sharedArchiveCfgFile, + "-XX:+UnlockDiagnosticVMOptions", extraOption); + } + + TestCommon.run( + "-cp", appJar, + bootClassPath, + extraArg, + "-Xlog:cds=info,class+path=info", + "-Xmx32m", + "-XX:+PrintSharedSpaces", + "-XX:+UnlockDiagnosticVMOptions", + extraOption, + "-XX:+WhiteBoxAPI", + "-XX:SharedReadOnlySize=30m", + gcLog, + "GCSharedStringsDuringDumpWb") + .assertNormalExit(); + } + } +} + --- old/test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDumpWb.java 2019-07-24 08:27:29.821468982 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class GCSharedStringsDuringDumpWb { - public static void main(String[] args) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - String s = "shared_test_string_unique_14325"; - s = s.intern(); - CheckString(wb, s); - for (int i=0; i<100000; i++) { - s = "generated_string " + i; - s = s.intern(); - CheckString(wb, s); - } - } - - public static void CheckString(WhiteBox wb, String s) { - if (!wb.areSharedStringsIgnored() && !wb.isShared(s)) { - throw new RuntimeException("String is not shared."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/GCSharedStringsDuringDumpWb.java 2019-07-24 08:27:29.513468992 -0400 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class GCSharedStringsDuringDumpWb { + public static void main(String[] args) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + String s = "shared_test_string_unique_14325"; + s = s.intern(); + CheckString(wb, s); + for (int i=0; i<100000; i++) { + s = "generated_string " + i; + s = s.intern(); + CheckString(wb, s); + } + } + + public static void CheckString(WhiteBox wb, String s) { + if (!wb.areSharedStringsIgnored() && !wb.isShared(s)) { + throw new RuntimeException("String is not shared."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/javaldr/HumongousDuringDump.java 2019-07-24 08:27:30.181468969 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test how CDS dumping handles the existence of humongous G1 regions. - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @requires vm.cds.archived.java.heap - * @requires vm.flavor != "minimal" - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * @build HumongousDuringDumpTransformer Hello - * @run main/othervm/timeout=240 HumongousDuringDump - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class HumongousDuringDump { - public static String appClasses[] = { - "Hello", - }; - public static String agentClasses[] = { - "HumongousDuringDumpTransformer", - }; - - public static void main(String[] args) throws Throwable { - String agentJar = - ClassFileInstaller.writeJar("HumongousDuringDumpTransformer.jar", - ClassFileInstaller.Manifest.fromSourceFile("HumongousDuringDumpTransformer.mf"), - agentClasses); - - String appJar = - ClassFileInstaller.writeJar("HumongousDuringDumpApp.jar", appClasses); - - String gcLog = Boolean.getBoolean("test.cds.verbose.gc") ? - "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug" : "-showversion"; - - String extraArg = "-javaagent:" + agentJar; - String extraOption = "-XX:+AllowArchivingWithJavaAgent"; - - OutputAnalyzer out = - TestCommon.testDump(appJar, TestCommon.list("Hello"), - "-XX:+UnlockDiagnosticVMOptions", extraOption, - "-Xlog:gc+region+cds", - "-Xlog:gc+region=trace", - extraArg, "-Xmx64m", gcLog); - out.shouldContain("(Unmovable) humongous regions have been found and may lead to fragmentation"); - out.shouldContain("All free regions should be at the top end of the heap, but we found holes."); - out.shouldMatch("gc,region,cds. HeapRegion .* HUM. hole"); - String pattern = "gc,region,cds. HeapRegion .*hole"; - out.shouldMatch(pattern); - out.shouldNotMatch(pattern + ".*unexpected"); - - TestCommon.run( - "-cp", appJar, - "-verbose", - "-Xmx64m", - "-XX:+PrintSharedSpaces", - "-XX:+UnlockDiagnosticVMOptions", extraOption, - gcLog, - "Hello") - .assertNormalExit(); - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/HumongousDuringDump.java 2019-07-24 08:27:29.865468980 -0400 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test how CDS dumping handles the existence of humongous G1 regions. + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @requires vm.cds.archived.java.heap + * @requires vm.flavor != "minimal" + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * @build HumongousDuringDumpTransformer Hello + * @run main/othervm/timeout=240 HumongousDuringDump + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class HumongousDuringDump { + public static String appClasses[] = { + "Hello", + }; + public static String agentClasses[] = { + "HumongousDuringDumpTransformer", + }; + + public static void main(String[] args) throws Throwable { + String agentJar = + ClassFileInstaller.writeJar("HumongousDuringDumpTransformer.jar", + ClassFileInstaller.Manifest.fromSourceFile("HumongousDuringDumpTransformer.mf"), + agentClasses); + + String appJar = + ClassFileInstaller.writeJar("HumongousDuringDumpApp.jar", appClasses); + + String gcLog = Boolean.getBoolean("test.cds.verbose.gc") ? + "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug" : "-showversion"; + + String extraArg = "-javaagent:" + agentJar; + String extraOption = "-XX:+AllowArchivingWithJavaAgent"; + + OutputAnalyzer out = + TestCommon.testDump(appJar, TestCommon.list("Hello"), + "-XX:+UnlockDiagnosticVMOptions", extraOption, + "-Xlog:gc+region+cds", + "-Xlog:gc+region=trace", + extraArg, "-Xmx64m", gcLog); + out.shouldContain("(Unmovable) humongous regions have been found and may lead to fragmentation"); + out.shouldContain("All free regions should be at the top end of the heap, but we found holes."); + out.shouldMatch("gc,region,cds. HeapRegion .* HUM. hole"); + String pattern = "gc,region,cds. HeapRegion .*hole"; + out.shouldMatch(pattern); + out.shouldNotMatch(pattern + ".*unexpected"); + + TestCommon.run( + "-cp", appJar, + "-verbose", + "-Xmx64m", + "-XX:+PrintSharedSpaces", + "-XX:+UnlockDiagnosticVMOptions", extraOption, + gcLog, + "Hello") + .assertNormalExit(); + } +} + --- old/test/hotspot/jtreg/runtime/appcds/javaldr/HumongousDuringDumpTransformer.java 2019-07-24 08:27:30.585468955 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.Instrumentation; -import java.lang.instrument.IllegalClassFormatException; -import java.security.ProtectionDomain; - -// This test is sensitive to -Xmx. It must be run with -xmx64m. -// Running with a different -Xmx requires changing the parameters and careful re-testing. -public class HumongousDuringDumpTransformer implements ClassFileTransformer { - public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, - ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { - if (name.equals("Hello")) { - try { - makeHumongousRegions(); - } catch (Throwable t) { - array = null; - humon = null; - System.out.println("Unexpected error: " + t); - t.printStackTrace(); - } - } - array = null; - return null; - } - - private static Instrumentation savedInstrumentation; - - public static void premain(String agentArguments, Instrumentation instrumentation) { - long xmx = Runtime.getRuntime().maxMemory(); - if (xmx < 60 * 1024 * 1024 || xmx > 80 * 1024 * 1024) { - System.out.println("Running with incorrect heap size: " + xmx); - System.exit(1); - } - - System.out.println("ClassFileTransformer.premain() is called"); - instrumentation.addTransformer(new HumongousDuringDumpTransformer(), /*canRetransform=*/true); - savedInstrumentation = instrumentation; - } - - public static Instrumentation getInstrumentation() { - return savedInstrumentation; - } - - public static void agentmain(String args, Instrumentation inst) throws Exception { - premain(args, inst); - } - - Object[] array; - - static final int DUMMY_SIZE = 4096 - 16 - 8; - static final int HUMON_SIZE = 4 * 1024 * 1024 - 16 - 8; - static final int SKIP = 13; - - byte humon[] = null; - boolean first = true; - - public synchronized void makeHumongousRegions() { - if (!first) { - return; - } - System.out.println("==============================================================================="); - first = false; - - int total = 0; - array = new Object[100000]; - System.out.println(array); - - // (1) Allocate about 8MB of old objects. - for (int n=0, i=0; total < 8 * 1024 * 1024; n++) { - // Make enough allocations to cause a GC (for 64MB heap) to create - // old regions. - // - // But don't completely fill up the heap. That would cause OOM and - // may not be handled gracefully inside class transformation! - Object x = new byte[DUMMY_SIZE]; - if ((n % SKIP) == 0) { - array[i++] = x; - total += DUMMY_SIZE; - } - } - - System.gc(); - - // (2) Now allocate a humongous array. It will sit above the 8MB of old regions. - humon = new byte[HUMON_SIZE]; - array = null; - System.gc(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/HumongousDuringDumpTransformer.java 2019-07-24 08:27:30.281468966 -0400 @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.Instrumentation; +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; + +// This test is sensitive to -Xmx. It must be run with -xmx64m. +// Running with a different -Xmx requires changing the parameters and careful re-testing. +public class HumongousDuringDumpTransformer implements ClassFileTransformer { + public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, + ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { + if (name.equals("Hello")) { + try { + makeHumongousRegions(); + } catch (Throwable t) { + array = null; + humon = null; + System.out.println("Unexpected error: " + t); + t.printStackTrace(); + } + } + array = null; + return null; + } + + private static Instrumentation savedInstrumentation; + + public static void premain(String agentArguments, Instrumentation instrumentation) { + long xmx = Runtime.getRuntime().maxMemory(); + if (xmx < 60 * 1024 * 1024 || xmx > 80 * 1024 * 1024) { + System.out.println("Running with incorrect heap size: " + xmx); + System.exit(1); + } + + System.out.println("ClassFileTransformer.premain() is called"); + instrumentation.addTransformer(new HumongousDuringDumpTransformer(), /*canRetransform=*/true); + savedInstrumentation = instrumentation; + } + + public static Instrumentation getInstrumentation() { + return savedInstrumentation; + } + + public static void agentmain(String args, Instrumentation inst) throws Exception { + premain(args, inst); + } + + Object[] array; + + static final int DUMMY_SIZE = 4096 - 16 - 8; + static final int HUMON_SIZE = 4 * 1024 * 1024 - 16 - 8; + static final int SKIP = 13; + + byte humon[] = null; + boolean first = true; + + public synchronized void makeHumongousRegions() { + if (!first) { + return; + } + System.out.println("==============================================================================="); + first = false; + + int total = 0; + array = new Object[100000]; + System.out.println(array); + + // (1) Allocate about 8MB of old objects. + for (int n=0, i=0; total < 8 * 1024 * 1024; n++) { + // Make enough allocations to cause a GC (for 64MB heap) to create + // old regions. + // + // But don't completely fill up the heap. That would cause OOM and + // may not be handled gracefully inside class transformation! + Object x = new byte[DUMMY_SIZE]; + if ((n % SKIP) == 0) { + array[i++] = x; + total += DUMMY_SIZE; + } + } + + System.gc(); + + // (2) Now allocate a humongous array. It will sit above the 8MB of old regions. + humon = new byte[HUMON_SIZE]; + array = null; + System.gc(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/javaldr/HumongousDuringDumpTransformer.mf 2019-07-24 08:27:30.897468944 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -Premain-Class: HumongousDuringDumpTransformer -Agent-Class: HumongousDuringDumpTransformer -Can-Retransform-Classes: true -Can-Redefine-Classes: true --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javaldr/HumongousDuringDumpTransformer.mf 2019-07-24 08:27:30.629468954 -0400 @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Premain-Class: HumongousDuringDumpTransformer +Agent-Class: HumongousDuringDumpTransformer +Can-Retransform-Classes: true +Can-Redefine-Classes: true --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/javax/annotation/processing/FilerException.jasm 2019-07-24 08:27:31.241468932 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package javax/annotation/processing; - -public class FilerException - version 51:0 -{ - -public Method "":"()V" - stack 1 locals 1 -{ - aload_0; - invokespecial Method java/lang/Object."":"()V"; - return; -} - - -public Method toString:"()Ljava/lang/String;" - stack 1 locals 1 -{ - ldc String "hi"; - areturn; -} - -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javax/annotation/processing/FilerException.jasm 2019-07-24 08:27:30.957468942 -0400 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package javax/annotation/processing; + +public class FilerException + version 51:0 +{ + +public Method "":"()V" + stack 1 locals 1 +{ + aload_0; + invokespecial Method java/lang/Object."":"()V"; + return; +} + + +public Method toString:"()Ljava/lang/String;" + stack 1 locals 1 +{ + ldc String "hi"; + areturn; +} + +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/javax/sound/sampled/MyClass.jasm 2019-07-24 08:27:31.593468920 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package javax/sound/sampled; - -public class MyClass - version 51:0 -{ - -public Method "":"()V" - stack 1 locals 1 -{ - aload_0; - invokespecial Method java/lang/Object."":"()V"; - return; -} - - -public Method toString:"()Ljava/lang/String;" - stack 1 locals 1 -{ - ldc String "hi"; - areturn; -} - -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/javax/sound/sampled/MyClass.jasm 2019-07-24 08:27:31.285468931 -0400 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package javax/sound/sampled; + +public class MyClass + version 51:0 +{ + +public Method "":"()V" + stack 1 locals 1 +{ + aload_0; + invokespecial Method java/lang/Object."":"()V"; + return; +} + + +public Method toString:"()Ljava/lang/String;" + stack 1 locals 1 +{ + ldc String "hi"; + areturn; +} + +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/CheckUnsupportedDumpingOptions.java 2019-07-24 08:27:31.917468909 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Abort dumping if any of the new jigsaw vm options is specified. - * @requires vm.cds - * @library /test/lib .. - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * jdk.internal.jvmstat/sun.jvmstat.monitor - * @compile ../test-classes/Hello.java - * @run driver CheckUnsupportedDumpingOptions - */ - -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class CheckUnsupportedDumpingOptions { - private static final String[] jigsawOptions = { - "--limit-modules", - "--upgrade-module-path", - "--patch-module" - }; - private static final String[] optionValues = { - "mymod", - ".", - "java.naming=javax.naming.spi.NamingManger" - }; - - public static void main(String[] args) throws Exception { - String source = "package javax.naming.spi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), - "mods/java.naming"); - - JarBuilder.build("hello", "Hello"); - String appJar = TestCommon.getTestJar("hello.jar"); - String appClasses[] = {"Hello"}; - for (int i = 0; i < jigsawOptions.length; i++) { - OutputAnalyzer output; - output = TestCommon.dump(appJar, appClasses, "-Xlog:cds,cds+hashtables", - jigsawOptions[i], optionValues[i]); - output.shouldContain("Cannot use the following option " + - "when dumping the shared archive: " + jigsawOptions[i]) - .shouldHaveExitValue(1); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/CheckUnsupportedDumpingOptions.java 2019-07-24 08:27:31.637468918 -0400 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Abort dumping if any of the new jigsaw vm options is specified. + * @requires vm.cds + * @library /test/lib .. + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * jdk.internal.jvmstat/sun.jvmstat.monitor + * @compile ../test-classes/Hello.java + * @run driver CheckUnsupportedDumpingOptions + */ + +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class CheckUnsupportedDumpingOptions { + private static final String[] jigsawOptions = { + "--limit-modules", + "--upgrade-module-path", + "--patch-module" + }; + private static final String[] optionValues = { + "mymod", + ".", + "java.naming=javax.naming.spi.NamingManger" + }; + + public static void main(String[] args) throws Exception { + String source = "package javax.naming.spi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), + "mods/java.naming"); + + JarBuilder.build("hello", "Hello"); + String appJar = TestCommon.getTestJar("hello.jar"); + String appClasses[] = {"Hello"}; + for (int i = 0; i < jigsawOptions.length; i++) { + OutputAnalyzer output; + output = TestCommon.dump(appJar, appClasses, "-Xlog:cds,cds+hashtables", + jigsawOptions[i], optionValues[i]); + output.shouldContain("Cannot use the following option " + + "when dumping the shared archive: " + jigsawOptions[i]) + .shouldHaveExitValue(1); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/JigsawOptionsCombo.java 2019-07-24 08:27:32.261468897 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,222 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test combinations of jigsaw options that affect the use of AppCDS - * - * @requires vm.cds & !vm.graal.enabled - * @library /test/lib .. - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * jdk.internal.jvmstat/sun.jvmstat.monitor - * @compile ../test-classes/Hello.java ../test-classes/HelloMore.java - * @run driver JigsawOptionsCombo - */ -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; -import java.util.ArrayList; - - -// Remaining WORK: TODO: -// 1. test with -m initial-module; waiting for changes from Chris will provide -// utils to build modules -// 2. Loading classes from Jmod files - waiting on utils -// 3. Loading classes from exploded module dir" - -public class JigsawOptionsCombo { - - public static void main(String[] args) throws Exception { - String source = "package javax.naming.spi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), - "mods/java.naming"); - - JarBuilder.build("hello", "Hello"); - JarBuilder.build("hello_more", "HelloMore"); - - (new JigsawOptionsCombo()).runTests(); - } - - - private ArrayList testCaseTable = new ArrayList(); - - public static String infoDuringDump(String option) { - return "Cannot use the following option when dumping the shared archive: " + option; - } - - public void runTests() throws Exception { - - testCaseTable.add(new TestCase( - "basic: Basic dump and execute, to verify the test plumbing works", - "", "", 0, - "", "", 0, true) ); - - String bcpArg = "-Xbootclasspath/a:" + - TestCommon.getTestJar("hello_more.jar"); - - testCaseTable.add(new TestCase( - "Xbootclasspath/a: is OK for both dump and run time", - bcpArg, "", 0, - bcpArg, "", 0, true) ); - - testCaseTable.add(new TestCase( - "module-path-01: --module-path is ignored for dump time", - "--module-path mods", "", 0, - null, null, 0, true) ); - - testCaseTable.add(new TestCase( - "module-path-02: --module-path is ok for run time", - "", "", 0, - "--module-path mods", "", 0, true) ); - - testCaseTable.add(new TestCase( - "add-modules-01: --add-modules is ok at dump time", - "--add-modules java.management", - "", 0, - null, null, 0, true) ); - - testCaseTable.add(new TestCase( - "add-modules-02: --add-modules is ok at run time", - "", "", 0, - "--add-modules java.management", "", 0, true) ); - - testCaseTable.add(new TestCase( - "limit-modules-01: --limit-modules is ignored at dump time", - "--limit-modules java.base", - infoDuringDump("--limit-modules"), 1, - null, null, 0, true) ); - - testCaseTable.add(new TestCase( - "limit-modules-02: --limit-modules is ok at run time", - "", "", 0, - "--limit-modules java.base", "", 0, false) ); - - testCaseTable.add(new TestCase( - "upgrade-module-path-01: --upgrade-module-path is ignored at dump time", - "--upgrade-module-path mods", - infoDuringDump("--upgrade-module-path"), 1, - null, null, 0, true) ); - - testCaseTable.add(new TestCase( - "-upgrade-module-path-module-path-02: --upgrade-module-path is ok at run time", - "", "", 0, - "--upgrade-module-path mods", "", 0, false) ); - - for (TestCase tc : testCaseTable) tc.execute(); - } - - - // class representing a singe test case - public class TestCase { - String description; - String dumpTimeArgs; - String dumpTimeExpectedOutput; - int dumpTimeExpectedExitValue; - String runTimeArgs; - String runTimeExpectedOutput; - int runTimeExpectedExitValue; - boolean sharingOn; - - private String appJar = TestCommon.getTestJar("hello.jar"); - private String appClasses[] = {"Hello"}; - - - public TestCase(String description, - String dumpTimeArgs, String dumpTimeExpectedOutput, int dumpTimeExpectedExitValue, - String runTimeArgs, String runTimeExpectedOutput, int runTimeExpectedExitValue, - boolean sharingOn) { - - this.description = description; - this.dumpTimeArgs = dumpTimeArgs; - this.dumpTimeExpectedOutput = dumpTimeExpectedOutput; - this.dumpTimeExpectedExitValue = dumpTimeExpectedExitValue; - this.runTimeArgs = runTimeArgs; - this.runTimeExpectedOutput = runTimeExpectedOutput; - this.runTimeExpectedExitValue = runTimeExpectedExitValue; - this.sharingOn = sharingOn; - } - - - public void execute() throws Exception { - System.out.println("Description: " + description); - - // ===== dump step - create the archive - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, appClasses, getDumpOptions()); - - if (dumpTimeExpectedExitValue == 0) { - TestCommon.checkDump(dumpOutput, dumpTimeExpectedOutput); - } else { - dumpOutput.shouldMatch(dumpTimeExpectedOutput); - dumpOutput.shouldHaveExitValue(dumpTimeExpectedExitValue); - } - - // ===== exec step - use the archive - if (runTimeArgs != null) { - OutputAnalyzer execOutput = TestCommon.exec(appJar, getRunOptions()); - - if (runTimeExpectedExitValue == 0) { - if (sharingOn) { - TestCommon.checkExec(execOutput, runTimeExpectedOutput, "Hello World"); - } else { - execOutput.shouldHaveExitValue(0) - .shouldContain(runTimeExpectedOutput) - .shouldContain("Hello World"); - } - } else { - execOutput.shouldMatch(dumpTimeExpectedOutput); - execOutput.shouldHaveExitValue(dumpTimeExpectedExitValue); - } - } - } - - - // dump command line options can be separated by a space - private String[] getDumpOptions() { - return dumpTimeArgs.split(" "); - } - - - // run command line options can be separated by a space - private String[] getRunOptions() { - ArrayList result = new ArrayList<>(); - - if (runTimeArgs != "") { - String splitArgs[] = runTimeArgs.split(" "); - for (String arg : splitArgs) - result.add(arg); - } - - result.add("Hello"); - return result.toArray(new String[1]); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/JigsawOptionsCombo.java 2019-07-24 08:27:31.965468907 -0400 @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test combinations of jigsaw options that affect the use of AppCDS + * + * @requires vm.cds & !vm.graal.enabled + * @library /test/lib .. + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * jdk.internal.jvmstat/sun.jvmstat.monitor + * @compile ../test-classes/Hello.java ../test-classes/HelloMore.java + * @run driver JigsawOptionsCombo + */ +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; +import java.util.ArrayList; + + +// Remaining WORK: TODO: +// 1. test with -m initial-module; waiting for changes from Chris will provide +// utils to build modules +// 2. Loading classes from Jmod files - waiting on utils +// 3. Loading classes from exploded module dir" + +public class JigsawOptionsCombo { + + public static void main(String[] args) throws Exception { + String source = "package javax.naming.spi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), + "mods/java.naming"); + + JarBuilder.build("hello", "Hello"); + JarBuilder.build("hello_more", "HelloMore"); + + (new JigsawOptionsCombo()).runTests(); + } + + + private ArrayList testCaseTable = new ArrayList(); + + public static String infoDuringDump(String option) { + return "Cannot use the following option when dumping the shared archive: " + option; + } + + public void runTests() throws Exception { + + testCaseTable.add(new TestCase( + "basic: Basic dump and execute, to verify the test plumbing works", + "", "", 0, + "", "", 0, true) ); + + String bcpArg = "-Xbootclasspath/a:" + + TestCommon.getTestJar("hello_more.jar"); + + testCaseTable.add(new TestCase( + "Xbootclasspath/a: is OK for both dump and run time", + bcpArg, "", 0, + bcpArg, "", 0, true) ); + + testCaseTable.add(new TestCase( + "module-path-01: --module-path is ignored for dump time", + "--module-path mods", "", 0, + null, null, 0, true) ); + + testCaseTable.add(new TestCase( + "module-path-02: --module-path is ok for run time", + "", "", 0, + "--module-path mods", "", 0, true) ); + + testCaseTable.add(new TestCase( + "add-modules-01: --add-modules is ok at dump time", + "--add-modules java.management", + "", 0, + null, null, 0, true) ); + + testCaseTable.add(new TestCase( + "add-modules-02: --add-modules is ok at run time", + "", "", 0, + "--add-modules java.management", "", 0, true) ); + + testCaseTable.add(new TestCase( + "limit-modules-01: --limit-modules is ignored at dump time", + "--limit-modules java.base", + infoDuringDump("--limit-modules"), 1, + null, null, 0, true) ); + + testCaseTable.add(new TestCase( + "limit-modules-02: --limit-modules is ok at run time", + "", "", 0, + "--limit-modules java.base", "", 0, false) ); + + testCaseTable.add(new TestCase( + "upgrade-module-path-01: --upgrade-module-path is ignored at dump time", + "--upgrade-module-path mods", + infoDuringDump("--upgrade-module-path"), 1, + null, null, 0, true) ); + + testCaseTable.add(new TestCase( + "-upgrade-module-path-module-path-02: --upgrade-module-path is ok at run time", + "", "", 0, + "--upgrade-module-path mods", "", 0, false) ); + + for (TestCase tc : testCaseTable) tc.execute(); + } + + + // class representing a singe test case + public class TestCase { + String description; + String dumpTimeArgs; + String dumpTimeExpectedOutput; + int dumpTimeExpectedExitValue; + String runTimeArgs; + String runTimeExpectedOutput; + int runTimeExpectedExitValue; + boolean sharingOn; + + private String appJar = TestCommon.getTestJar("hello.jar"); + private String appClasses[] = {"Hello"}; + + + public TestCase(String description, + String dumpTimeArgs, String dumpTimeExpectedOutput, int dumpTimeExpectedExitValue, + String runTimeArgs, String runTimeExpectedOutput, int runTimeExpectedExitValue, + boolean sharingOn) { + + this.description = description; + this.dumpTimeArgs = dumpTimeArgs; + this.dumpTimeExpectedOutput = dumpTimeExpectedOutput; + this.dumpTimeExpectedExitValue = dumpTimeExpectedExitValue; + this.runTimeArgs = runTimeArgs; + this.runTimeExpectedOutput = runTimeExpectedOutput; + this.runTimeExpectedExitValue = runTimeExpectedExitValue; + this.sharingOn = sharingOn; + } + + + public void execute() throws Exception { + System.out.println("Description: " + description); + + // ===== dump step - create the archive + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, appClasses, getDumpOptions()); + + if (dumpTimeExpectedExitValue == 0) { + TestCommon.checkDump(dumpOutput, dumpTimeExpectedOutput); + } else { + dumpOutput.shouldMatch(dumpTimeExpectedOutput); + dumpOutput.shouldHaveExitValue(dumpTimeExpectedExitValue); + } + + // ===== exec step - use the archive + if (runTimeArgs != null) { + OutputAnalyzer execOutput = TestCommon.exec(appJar, getRunOptions()); + + if (runTimeExpectedExitValue == 0) { + if (sharingOn) { + TestCommon.checkExec(execOutput, runTimeExpectedOutput, "Hello World"); + } else { + execOutput.shouldHaveExitValue(0) + .shouldContain(runTimeExpectedOutput) + .shouldContain("Hello World"); + } + } else { + execOutput.shouldMatch(dumpTimeExpectedOutput); + execOutput.shouldHaveExitValue(dumpTimeExpectedExitValue); + } + } + } + + + // dump command line options can be separated by a space + private String[] getDumpOptions() { + return dumpTimeArgs.split(" "); + } + + + // run command line options can be separated by a space + private String[] getRunOptions() { + ArrayList result = new ArrayList<>(); + + if (runTimeArgs != "") { + String splitArgs[] = runTimeArgs.split(" "); + for (String arg : splitArgs) + result.add(arg); + } + + result.add("Hello"); + return result.toArray(new String[1]); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/AppClassInCP.java 2019-07-24 08:27:32.645468883 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary a test to demonstrate that an application class in the -cp - * will be archived although --patch-module is specified. The class in - * the -cp has no dependencies on the class in the --patch-module. - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver AppClassInCP - */ - -import java.io.File; -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class AppClassInCP { - private static String moduleJar; - private static String appJar; - - public static void main(String args[]) throws Throwable { - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming.jar file. - String source = "package javax.naming.spi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - String classDir = System.getProperty("test.classes"); - - ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), - classDir); - - // Build the jar file that will be used for the module "java.naming". - JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); - moduleJar = TestCommon.getTestJar("javanaming.jar"); - - String source2 = "package mypackage; " + - "public class Hello { " + - " static { " + - " System.out.println(\"Hello!\"); " + - " } " + - "}"; - ClassFileInstaller.writeClassToDisk("mypackage/Hello", - InMemoryJavaCompiler.compile("mypackage.Hello", source2), - classDir); - - JarBuilder.build("hello", "mypackage/Hello"); - appJar = TestCommon.getTestJar("hello.jar"); - - System.out.println("Test dumping with --patch-module"); - OutputAnalyzer output = - TestCommon.dump(appJar, - TestCommon.list("javax/naming/spi/NamingManager", "mypackage/Hello"), - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "PatchMain", "javax.naming.spi.NamingManager", "mypackage.Hello"); - output.shouldHaveExitValue(1) - .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); - - String classPath = appJar + File.pathSeparator + classDir; - System.out.println("classPath: " + classPath); - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", - "-cp", classPath, - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "PatchMain", "javax.naming.spi.NamingManager", "mypackage.Hello") - .assertSilentlyDisabledCDS(0, "I pass!", "Hello!"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/AppClassInCP.java 2019-07-24 08:27:32.309468895 -0400 @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary a test to demonstrate that an application class in the -cp + * will be archived although --patch-module is specified. The class in + * the -cp has no dependencies on the class in the --patch-module. + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver AppClassInCP + */ + +import java.io.File; +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class AppClassInCP { + private static String moduleJar; + private static String appJar; + + public static void main(String args[]) throws Throwable { + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming.jar file. + String source = "package javax.naming.spi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + String classDir = System.getProperty("test.classes"); + + ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), + classDir); + + // Build the jar file that will be used for the module "java.naming". + JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); + moduleJar = TestCommon.getTestJar("javanaming.jar"); + + String source2 = "package mypackage; " + + "public class Hello { " + + " static { " + + " System.out.println(\"Hello!\"); " + + " } " + + "}"; + ClassFileInstaller.writeClassToDisk("mypackage/Hello", + InMemoryJavaCompiler.compile("mypackage.Hello", source2), + classDir); + + JarBuilder.build("hello", "mypackage/Hello"); + appJar = TestCommon.getTestJar("hello.jar"); + + System.out.println("Test dumping with --patch-module"); + OutputAnalyzer output = + TestCommon.dump(appJar, + TestCommon.list("javax/naming/spi/NamingManager", "mypackage/Hello"), + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "PatchMain", "javax.naming.spi.NamingManager", "mypackage.Hello"); + output.shouldHaveExitValue(1) + .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); + + String classPath = appJar + File.pathSeparator + classDir; + System.out.println("classPath: " + classPath); + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", + "-cp", classPath, + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "PatchMain", "javax.naming.spi.NamingManager", "mypackage.Hello") + .assertSilentlyDisabledCDS(0, "I pass!", "Hello!"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/CustomPackage.java 2019-07-24 08:27:33.029468870 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary if a class is defined to a package which is not defined to any - * module in the jimage, the class will not be found during dump - * time but it will be used during run time. - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver CustomPackage - */ - -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class CustomPackage { - private static String moduleJar; - - public static void main(String args[]) throws Throwable { - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming.jar file. - String source = "package javax.naming.myspi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - ClassFileInstaller.writeClassToDisk("javax/naming/myspi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.myspi.NamingManager", source, "--patch-module=java.naming"), - System.getProperty("test.classes")); - - // Build the jar file that will be used for the module "java.naming". - JarBuilder.build("javanaming", "javax/naming/myspi/NamingManager"); - moduleJar = TestCommon.getTestJar("javanaming.jar"); - - System.out.println("Test dumping with --patch-module"); - OutputAnalyzer output = - TestCommon.dump(null, - TestCommon.list("javax/naming/myspi/NamingManager"), - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "-Xlog:class+path=info", - "PatchMain", "javax.naming.myspi.NamingManager"); - output.shouldHaveExitValue(1) - .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); - - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "-Xlog:class+path=info", - "PatchMain", "javax.naming.myspi.NamingManager") - .assertSilentlyDisabledCDS(0, "I pass!"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/CustomPackage.java 2019-07-24 08:27:32.701468881 -0400 @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary if a class is defined to a package which is not defined to any + * module in the jimage, the class will not be found during dump + * time but it will be used during run time. + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver CustomPackage + */ + +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class CustomPackage { + private static String moduleJar; + + public static void main(String args[]) throws Throwable { + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming.jar file. + String source = "package javax.naming.myspi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + ClassFileInstaller.writeClassToDisk("javax/naming/myspi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.myspi.NamingManager", source, "--patch-module=java.naming"), + System.getProperty("test.classes")); + + // Build the jar file that will be used for the module "java.naming". + JarBuilder.build("javanaming", "javax/naming/myspi/NamingManager"); + moduleJar = TestCommon.getTestJar("javanaming.jar"); + + System.out.println("Test dumping with --patch-module"); + OutputAnalyzer output = + TestCommon.dump(null, + TestCommon.list("javax/naming/myspi/NamingManager"), + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "-Xlog:class+path=info", + "PatchMain", "javax.naming.myspi.NamingManager"); + output.shouldHaveExitValue(1) + .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); + + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "-Xlog:class+path=info", + "PatchMain", "javax.naming.myspi.NamingManager") + .assertSilentlyDisabledCDS(0, "I pass!"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/MismatchedPatchModule.java 2019-07-24 08:27:33.373468858 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary different settings of --patch-module at dump time and runtime are - * acceptable. The class found in runtime --patch-module entry should - * be used. - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver MismatchedPatchModule - */ - -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class MismatchedPatchModule { - private static String moduleJar; - - public static void main(String args[]) throws Throwable { - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming.jar file. - String source = "package javax.naming.spi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), - System.getProperty("test.classes")); - - // Build the jar file that will be used for the module "java.naming". - JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); - moduleJar = TestCommon.getTestJar("javanaming.jar"); - - // Case 1: --patch-module specified for dump time - System.out.println("Case 1: --patch-module specified for dump time and run time"); - OutputAnalyzer output = - TestCommon.dump(null, - TestCommon.list("javax/naming/spi/NamingManager"), - "--patch-module=java.naming=" + moduleJar, - "PatchMain", "javax.naming.spi.NamingManager"); - output.shouldHaveExitValue(1) - .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); - - // Case 2: --patch-module specified for run time but not for dump time - System.out.println("Case 2: --patch-module specified for run time but not for dump time"); - String appJar = JarBuilder.build("PatchMain-app", "PatchMain"); - output = - TestCommon.dump(appJar, - TestCommon.list("javax/naming/spi/NamingManager"), - "PatchMain", "javax.naming.spi.NamingManager"); - TestCommon.checkDump(output); - - // javax.naming.spi.NamingManager is patched at runtime - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", - "--patch-module=java.naming=" + moduleJar, - "--patch-module=java.naming2=" + moduleJar, - "-Xlog:class+path=info", - "PatchMain", "javax.naming.spi.NamingManager") - .assertSilentlyDisabledCDS(0, "I pass!"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/MismatchedPatchModule.java 2019-07-24 08:27:33.085468868 -0400 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary different settings of --patch-module at dump time and runtime are + * acceptable. The class found in runtime --patch-module entry should + * be used. + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver MismatchedPatchModule + */ + +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class MismatchedPatchModule { + private static String moduleJar; + + public static void main(String args[]) throws Throwable { + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming.jar file. + String source = "package javax.naming.spi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), + System.getProperty("test.classes")); + + // Build the jar file that will be used for the module "java.naming". + JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); + moduleJar = TestCommon.getTestJar("javanaming.jar"); + + // Case 1: --patch-module specified for dump time + System.out.println("Case 1: --patch-module specified for dump time and run time"); + OutputAnalyzer output = + TestCommon.dump(null, + TestCommon.list("javax/naming/spi/NamingManager"), + "--patch-module=java.naming=" + moduleJar, + "PatchMain", "javax.naming.spi.NamingManager"); + output.shouldHaveExitValue(1) + .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); + + // Case 2: --patch-module specified for run time but not for dump time + System.out.println("Case 2: --patch-module specified for run time but not for dump time"); + String appJar = JarBuilder.build("PatchMain-app", "PatchMain"); + output = + TestCommon.dump(appJar, + TestCommon.list("javax/naming/spi/NamingManager"), + "PatchMain", "javax.naming.spi.NamingManager"); + TestCommon.checkDump(output); + + // javax.naming.spi.NamingManager is patched at runtime + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", + "--patch-module=java.naming=" + moduleJar, + "--patch-module=java.naming2=" + moduleJar, + "-Xlog:class+path=info", + "PatchMain", "javax.naming.spi.NamingManager") + .assertSilentlyDisabledCDS(0, "I pass!"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchDir.java 2019-07-24 08:27:33.721468846 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary a simple test to ensure that a directory in the --patch-module - * option does not affect dump process - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver PatchDir - */ - -import java.io.File; -import jdk.test.lib.compiler.InMemoryJavaCompiler; - -public class PatchDir { - private static String moduleJar; - - public static void main(String args[]) throws Throwable { - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming.jar file. - String source = "package javax.naming.spi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - String classDir = System.getProperty("test.classes"); - ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), - classDir); - - JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); - moduleJar = TestCommon.getTestJar("javanaming.jar"); - - System.out.println("Test dumping with --patch-module"); - TestCommon.dump(null, - TestCommon.list("javax/naming/spi/NamingManager"), - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "PatchMain", "javax.naming.spi.NamingManager") - .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module") - .shouldHaveExitValue(1); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/PatchDir.java 2019-07-24 08:27:33.425468856 -0400 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary a simple test to ensure that a directory in the --patch-module + * option does not affect dump process + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver PatchDir + */ + +import java.io.File; +import jdk.test.lib.compiler.InMemoryJavaCompiler; + +public class PatchDir { + private static String moduleJar; + + public static void main(String args[]) throws Throwable { + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming.jar file. + String source = "package javax.naming.spi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + String classDir = System.getProperty("test.classes"); + ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), + classDir); + + JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); + moduleJar = TestCommon.getTestJar("javanaming.jar"); + + System.out.println("Test dumping with --patch-module"); + TestCommon.dump(null, + TestCommon.list("javax/naming/spi/NamingManager"), + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "PatchMain", "javax.naming.spi.NamingManager") + .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module") + .shouldHaveExitValue(1); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchJavaBase.java 2019-07-24 08:27:34.073468834 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary sharing is disabled if java.base is patch at runtime - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver PatchJavaBase - */ - -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class PatchJavaBase { - private static String moduleJar; - - public static void main(String args[]) throws Throwable { - - String source = "package java.lang; " + - "public class NewClass { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - ClassFileInstaller.writeClassToDisk("java/lang/NewClass", - InMemoryJavaCompiler.compile("java.lang.NewClass", source, "--patch-module=java.base"), - System.getProperty("test.classes")); - - JarBuilder.build("javabase", "java/lang/NewClass"); - moduleJar = TestCommon.getTestJar("javabase.jar"); - - System.out.println("Test dumping with --patch-module"); - String runError = "Unable to use shared archive: CDS is disabled when java.base module is patched"; - String dumpingError = "Cannot use the following option when dumping the shared archive: --patch-module"; - String errMsg; - if (TestCommon.isDynamicArchive()) { - errMsg = runError; - } else { - errMsg = dumpingError; - } - OutputAnalyzer output = - TestCommon.dump(null, null, - "--patch-module=java.base=" + moduleJar, - "PatchMain", "java.lang.NewClass"); - output.shouldHaveExitValue(1) - .shouldContain(errMsg); - - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", - "--patch-module=java.base=" + moduleJar, - "PatchMain", "java.lang.NewClass") - .assertAbnormalExit(runError); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/PatchJavaBase.java 2019-07-24 08:27:33.777468844 -0400 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary sharing is disabled if java.base is patch at runtime + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver PatchJavaBase + */ + +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class PatchJavaBase { + private static String moduleJar; + + public static void main(String args[]) throws Throwable { + + String source = "package java.lang; " + + "public class NewClass { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + ClassFileInstaller.writeClassToDisk("java/lang/NewClass", + InMemoryJavaCompiler.compile("java.lang.NewClass", source, "--patch-module=java.base"), + System.getProperty("test.classes")); + + JarBuilder.build("javabase", "java/lang/NewClass"); + moduleJar = TestCommon.getTestJar("javabase.jar"); + + System.out.println("Test dumping with --patch-module"); + String runError = "Unable to use shared archive: CDS is disabled when java.base module is patched"; + String dumpingError = "Cannot use the following option when dumping the shared archive: --patch-module"; + String errMsg; + if (TestCommon.isDynamicArchive()) { + errMsg = runError; + } else { + errMsg = dumpingError; + } + OutputAnalyzer output = + TestCommon.dump(null, null, + "--patch-module=java.base=" + moduleJar, + "PatchMain", "java.lang.NewClass"); + output.shouldHaveExitValue(1) + .shouldContain(errMsg); + + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", + "--patch-module=java.base=" + moduleJar, + "PatchMain", "java.lang.NewClass") + .assertAbnormalExit(runError); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchMain.java 2019-07-24 08:27:34.421468821 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -// This loads the class affected by the --patch-module option. For the test to pass -// it must load the class from the --patch-module directory, not the jimage file. -public class PatchMain { - public static void main(String[] args) throws Exception { - for (int i = 0; i < args.length; i++) { - if (args[i].equals("cdsutils.DynamicDumpHelper")) { - break; - } - Class.forName(args[i]); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/PatchMain.java 2019-07-24 08:27:34.125468832 -0400 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// This loads the class affected by the --patch-module option. For the test to pass +// it must load the class from the --patch-module directory, not the jimage file. +public class PatchMain { + public static void main(String[] args) throws Exception { + for (int i = 0; i < args.length; i++) { + if (args[i].equals("cdsutils.DynamicDumpHelper")) { + break; + } + Class.forName(args[i]); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/Simple.java 2019-07-24 08:27:34.757468810 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary a simple test to ensure that class is loaded from jar file in --patch-module at runtime - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver Simple - */ - -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class Simple { - private static String moduleJar; - - public static void main(String args[]) throws Throwable { - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming.jar file. - String source = "package javax.naming.spi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), - System.getProperty("test.classes")); - - // Build the jar file that will be used for the module "java.naming". - JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); - moduleJar = TestCommon.getTestJar("javanaming.jar"); - - System.out.println("Test dumping with --patch-module"); - OutputAnalyzer output = - TestCommon.dump(null, - TestCommon.list("javax/naming/spi/NamingManager"), - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "-Xlog:class+path=info", - "PatchMain", "javax.naming.spi.NamingManager"); - output.shouldHaveExitValue(1) - .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); - - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "-Xlog:class+path=info", - "PatchMain", "javax.naming.spi.NamingManager") - .assertSilentlyDisabledCDS(0, "I pass!"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/Simple.java 2019-07-24 08:27:34.477468820 -0400 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary a simple test to ensure that class is loaded from jar file in --patch-module at runtime + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver Simple + */ + +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class Simple { + private static String moduleJar; + + public static void main(String args[]) throws Throwable { + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming.jar file. + String source = "package javax.naming.spi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), + System.getProperty("test.classes")); + + // Build the jar file that will be used for the module "java.naming". + JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); + moduleJar = TestCommon.getTestJar("javanaming.jar"); + + System.out.println("Test dumping with --patch-module"); + OutputAnalyzer output = + TestCommon.dump(null, + TestCommon.list("javax/naming/spi/NamingManager"), + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "-Xlog:class+path=info", + "PatchMain", "javax.naming.spi.NamingManager"); + output.shouldHaveExitValue(1) + .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); + + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "-Xlog:class+path=info", + "PatchMain", "javax.naming.spi.NamingManager") + .assertSilentlyDisabledCDS(0, "I pass!"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/SubClassOfPatchedClass.java 2019-07-24 08:27:35.105468798 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary the class in the -cp is a subclass of the class in --patch-module. The - * patched class should be used at runtime. - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver SubClassOfPatchedClass - */ - -import java.io.File; -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class SubClassOfPatchedClass { - private static String moduleJar; - private static String appJar; - - public static void main(String args[]) throws Throwable { - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming.jar file. - String source = "package javax.naming; " + - "public class Reference { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - String classDir = System.getProperty("test.classes"); - - ClassFileInstaller.writeClassToDisk("javax/naming/Reference", - InMemoryJavaCompiler.compile("javax.naming.Reference", source, "--patch-module=java.naming"), - classDir); - - // Build the jar file that will be used for the module "java.naming". - JarBuilder.build("javanaming", "javax/naming/Reference"); - moduleJar = TestCommon.getTestJar("javanaming.jar"); - - String source2 = "package mypackage; " + - "public class MyReference extends javax.naming.Reference { " + - " static { " + - " System.out.println(\"MyReference!\"); " + - " } " + - " public MyReference(String mystring) { " + - " super(mystring); " + - " } " + - "}"; - ClassFileInstaller.writeClassToDisk("mypackage/MyReference", - InMemoryJavaCompiler.compile("mypackage.MyReference", source2), - classDir); - - JarBuilder.build("myjavanaming", "mypackage/MyReference"); - appJar = TestCommon.getTestJar("myjavanaming.jar"); - - System.out.println("Test dumping with --patch-module"); - OutputAnalyzer output = - TestCommon.dump(appJar, - TestCommon.list("javax/naming/Reference", "mypackage/MyReference"), - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "PatchMain", "javax.naming.Reference", "mypackage.MyReference"); - output.shouldHaveExitValue(1) - .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); - - String classPath = appJar + File.pathSeparator + classDir; - System.out.println("classPath: " + classPath); - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", - "-cp", classPath, - "--patch-module=java.naming=" + moduleJar, - "-Xlog:class+load", - "PatchMain", "javax.naming.Reference", "mypackage.MyReference") - .assertSilentlyDisabledCDS(0, "MyReference source: file:", "I pass!"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/SubClassOfPatchedClass.java 2019-07-24 08:27:34.809468808 -0400 @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary the class in the -cp is a subclass of the class in --patch-module. The + * patched class should be used at runtime. + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver SubClassOfPatchedClass + */ + +import java.io.File; +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class SubClassOfPatchedClass { + private static String moduleJar; + private static String appJar; + + public static void main(String args[]) throws Throwable { + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming.jar file. + String source = "package javax.naming; " + + "public class Reference { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + String classDir = System.getProperty("test.classes"); + + ClassFileInstaller.writeClassToDisk("javax/naming/Reference", + InMemoryJavaCompiler.compile("javax.naming.Reference", source, "--patch-module=java.naming"), + classDir); + + // Build the jar file that will be used for the module "java.naming". + JarBuilder.build("javanaming", "javax/naming/Reference"); + moduleJar = TestCommon.getTestJar("javanaming.jar"); + + String source2 = "package mypackage; " + + "public class MyReference extends javax.naming.Reference { " + + " static { " + + " System.out.println(\"MyReference!\"); " + + " } " + + " public MyReference(String mystring) { " + + " super(mystring); " + + " } " + + "}"; + ClassFileInstaller.writeClassToDisk("mypackage/MyReference", + InMemoryJavaCompiler.compile("mypackage.MyReference", source2), + classDir); + + JarBuilder.build("myjavanaming", "mypackage/MyReference"); + appJar = TestCommon.getTestJar("myjavanaming.jar"); + + System.out.println("Test dumping with --patch-module"); + OutputAnalyzer output = + TestCommon.dump(appJar, + TestCommon.list("javax/naming/Reference", "mypackage/MyReference"), + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "PatchMain", "javax.naming.Reference", "mypackage.MyReference"); + output.shouldHaveExitValue(1) + .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); + + String classPath = appJar + File.pathSeparator + classDir; + System.out.println("classPath: " + classPath); + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", + "-cp", classPath, + "--patch-module=java.naming=" + moduleJar, + "-Xlog:class+load", + "PatchMain", "javax.naming.Reference", "mypackage.MyReference") + .assertSilentlyDisabledCDS(0, "MyReference source: file:", "I pass!"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/TwoJars.java 2019-07-24 08:27:35.501468784 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @requires vm.cds - * @summary a patched class found in --patch-module should be used at runtime - * @library ../.. - * @library /test/hotspot/jtreg/testlibrary - * @library /test/lib - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @build PatchMain - * @run driver TwoJars - */ - -import java.io.File; -import jdk.test.lib.compiler.InMemoryJavaCompiler; -import jdk.test.lib.process.OutputAnalyzer; - -public class TwoJars { - private static String moduleJar; - private static String moduleJar2; - - public static void main(String args[]) throws Throwable { - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming.jar file. - String source = "package javax.naming.spi; " + - "public class NamingManager { " + - " static { " + - " System.out.println(\"I pass!\"); " + - " } " + - "}"; - - // Create a class file in the module java.naming. This class file - // will be put in the javanaming2.jar file. - String source2 = "package javax.naming.spi; " + - "public class DirectoryManager { " + - " static { " + - " System.out.println(\"I fail!\"); " + - " } " + - "}"; - - ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", - InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), - System.getProperty("test.classes")); - - // Build the jar file that will be used for the module "java.naming". - JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); - moduleJar = TestCommon.getTestJar("javanaming.jar"); - - ClassFileInstaller.writeClassToDisk("javax/naming/spi/DirectoryManager", - InMemoryJavaCompiler.compile("javax.naming.spi.DirectoryManager", source2, "--patch-module=java.naming"), - System.getProperty("test.classes")); - - // Build the jar file that will be used for the module "java.naming". - JarBuilder.build("javanaming2", "javax/naming/spi/DirectoryManager"); - moduleJar2 = TestCommon.getTestJar("javanaming2.jar"); - - System.out.println("Test dumping with --patch-module"); - OutputAnalyzer output = - TestCommon.dump(null, - TestCommon.list("javax/naming/spi/NamingManager"), - "--patch-module=java.naming=" + moduleJar2 + File.pathSeparator + moduleJar, - "-Xlog:class+load", - "-Xlog:class+path=info", - "PatchMain", "javax.naming.spi.NamingManager"); - output.shouldHaveExitValue(1) - .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); - - TestCommon.run( - "-XX:+UnlockDiagnosticVMOptions", - "--patch-module=java.naming=" + moduleJar2 + File.pathSeparator + moduleJar, - "-Xlog:class+load", - "-Xlog:class+path=info", - "PatchMain", "javax.naming.spi.NamingManager") - .assertSilentlyDisabledCDS(0, "I pass!"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/PatchModule/TwoJars.java 2019-07-24 08:27:35.161468796 -0400 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @requires vm.cds + * @summary a patched class found in --patch-module should be used at runtime + * @library ../.. + * @library /test/hotspot/jtreg/testlibrary + * @library /test/lib + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @build PatchMain + * @run driver TwoJars + */ + +import java.io.File; +import jdk.test.lib.compiler.InMemoryJavaCompiler; +import jdk.test.lib.process.OutputAnalyzer; + +public class TwoJars { + private static String moduleJar; + private static String moduleJar2; + + public static void main(String args[]) throws Throwable { + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming.jar file. + String source = "package javax.naming.spi; " + + "public class NamingManager { " + + " static { " + + " System.out.println(\"I pass!\"); " + + " } " + + "}"; + + // Create a class file in the module java.naming. This class file + // will be put in the javanaming2.jar file. + String source2 = "package javax.naming.spi; " + + "public class DirectoryManager { " + + " static { " + + " System.out.println(\"I fail!\"); " + + " } " + + "}"; + + ClassFileInstaller.writeClassToDisk("javax/naming/spi/NamingManager", + InMemoryJavaCompiler.compile("javax.naming.spi.NamingManager", source, "--patch-module=java.naming"), + System.getProperty("test.classes")); + + // Build the jar file that will be used for the module "java.naming". + JarBuilder.build("javanaming", "javax/naming/spi/NamingManager"); + moduleJar = TestCommon.getTestJar("javanaming.jar"); + + ClassFileInstaller.writeClassToDisk("javax/naming/spi/DirectoryManager", + InMemoryJavaCompiler.compile("javax.naming.spi.DirectoryManager", source2, "--patch-module=java.naming"), + System.getProperty("test.classes")); + + // Build the jar file that will be used for the module "java.naming". + JarBuilder.build("javanaming2", "javax/naming/spi/DirectoryManager"); + moduleJar2 = TestCommon.getTestJar("javanaming2.jar"); + + System.out.println("Test dumping with --patch-module"); + OutputAnalyzer output = + TestCommon.dump(null, + TestCommon.list("javax/naming/spi/NamingManager"), + "--patch-module=java.naming=" + moduleJar2 + File.pathSeparator + moduleJar, + "-Xlog:class+load", + "-Xlog:class+path=info", + "PatchMain", "javax.naming.spi.NamingManager"); + output.shouldHaveExitValue(1) + .shouldContain("Cannot use the following option when dumping the shared archive: --patch-module"); + + TestCommon.run( + "-XX:+UnlockDiagnosticVMOptions", + "--patch-module=java.naming=" + moduleJar2 + File.pathSeparator + moduleJar, + "-Xlog:class+load", + "-Xlog:class+path=info", + "PatchMain", "javax.naming.spi.NamingManager") + .assertSilentlyDisabledCDS(0, "I pass!"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/BootAppendTests.java 2019-07-24 08:27:35.889468770 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,259 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @summary AppCDS tests for testing -Xbootclasspath/a - * @requires vm.cds & !vm.graal.enabled - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * jdk.internal.jvmstat/sun.jvmstat.monitor - * @compile src/jdk/test/Main.java - * @compile src/com/sun/tools/javac/MyMain.jasm - * @compile src/sun/nio/cs/ext/MyClass.java - * @compile src/sun/nio/cs/ext1/MyClass.java - * @run driver BootAppendTests - */ - -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; - -public class BootAppendTests { - private static final String TEST_SRC = System.getProperty("test.src"); - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path CLASSES_DIR = Paths.get("classes"); - - private static final String MAIN_CLASS = "jdk.test.Main"; - private static final String APP_MODULE_CLASS = "com/sun/tools/javac/MyMain"; - private static final String BOOT_APPEND_MODULE_CLASS = "sun/nio/cs/ext/MyClass"; - private static final String BOOT_APPEND_CLASS = "sun/nio/cs/ext1/MyClass"; - private static final String[] ARCHIVE_CLASSES = - {APP_MODULE_CLASS, BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_CLASS}; - - private static String appJar; - private static String bootAppendJar; - private static String testArchiveName; - - public static void main(String... args) throws Exception { - dumpArchive(); - - System.out.println("TESTCASE: 1: testBootAppendModuleClassWithoutAppCDS"); - testBootAppendModuleClassWithoutAppCDS(); - - System.out.println("TESTCASE: 2" ); - testBootAppendModuleClassWithAppCDS(); - - System.out.println("TESTCASE: 3" ); - testBootAppendExcludedModuleClassWithoutAppCDS(); - - System.out.println("TESTCASE: 4" ); - testBootAppendExcludedModuleClassWithAppCDS(); - - System.out.println("TESTCASE: 5" ); - testBootAppendClassWithoutAppCDS(); - - System.out.println("TESTCASE: 6" ); - testBootAppendClassWithAppCDS(); - - System.out.println("TESTCASE: 7" ); - testBootAppendAppModuleClassWithoutAppCDS(); - - System.out.println("TESTCASE: 9" ); - testBootAppendAppModuleClassWithAppCDS(); - - System.out.println("TESTCASE: 9" ); - testBootAppendAppExcludeModuleClassWithoutAppCDS(); - - System.out.println("TESTCASE: 10" ); - testBootAppendAppExcludeModuleClassAppCDS(); - } - - static void dumpArchive() throws Exception { - JarBuilder.build("classpathtests", "jdk/test/Main"); - appJar = TestCommon.getTestJar("classpathtests.jar"); - - JarBuilder.build("bootAppend", - APP_MODULE_CLASS, BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_CLASS); - bootAppendJar = TestCommon.getTestJar("bootAppend.jar"); - - OutputAnalyzer output1 = TestCommon.dump( - appJar, TestCommon.list(ARCHIVE_CLASSES), "-Xbootclasspath/a:" + bootAppendJar); - TestCommon.checkDump(output1); - - if (!TestCommon.isUnableToMap(output1)) { - // Make sure all the classes were successfully archived. - for (String archiveClass : ARCHIVE_CLASSES) { - output1.shouldNotContain("Preload Warning: Cannot find " + archiveClass); - } - } - - testArchiveName = TestCommon.getCurrentArchiveName(); - } - - // Test #1: A class in package defined in boot module - // - should not be loaded from the -Xbootclasspath/a without AppCDS - public static void testBootAppendModuleClassWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #1", BOOT_APPEND_MODULE_CLASS, "false"); - - CDSTestUtils.runWithArchiveAndCheck(opts); - } - - // Test #2: A shared class in package defined in boot module that's archived - // from -Xbootclasspath/a - // - should not be loaded by AppCDS - public static void testBootAppendModuleClassWithAppCDS() throws Exception { - OutputAnalyzer output = TestCommon.exec( - appJar, - "-Xbootclasspath/a:" + bootAppendJar, - MAIN_CLASS, - "Test #2", BOOT_APPEND_MODULE_CLASS, "false"); - TestCommon.checkExec(output); - } - - - // Test #3: A class in excluded package defined in boot module - // - should be loaded from the -Xbootclasspath/a by the boot classloader - public static void testBootAppendExcludedModuleClassWithoutAppCDS() throws Exception { - TestCommon.run( - "-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar, - "-Xlog:class+load=info", - "--limit-modules", "java.base", - MAIN_CLASS, "Test #3", BOOT_APPEND_MODULE_CLASS, "true", "BOOT") - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(".class.load. sun.nio.cs.ext.MyClass source:.*bootAppend.jar"); - }); - } - - // Test #4: A shared class in excluded package that's archived from - // -Xbootclasspath/a - // - should be loaded from the jar since AppCDS will be disabled with - // the --limit-modules option - public static void testBootAppendExcludedModuleClassWithAppCDS() throws Exception { - TestCommon.run( - "-cp", appJar, "-Xbootclasspath/a:" + bootAppendJar, - "-Xlog:class+load=info", - "--limit-modules", "java.base", - MAIN_CLASS, - "Test #4", BOOT_APPEND_MODULE_CLASS, "true", "BOOT") - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(".class.load. sun.nio.cs.ext.MyClass source:.*bootAppend.jar"); - }); - } - - - // Test #5: A class not in package defined in boot module - // - should be loaded from the -Xbootclasspath/a without AppCDS - public static void testBootAppendClassWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #5", BOOT_APPEND_CLASS, "true", "BOOT"); - - CDSTestUtils.runWithArchiveAndCheck(opts); - } - - - // Test #6: A shared class not in package defined in boot module that's - // archived from -Xbootclasspath/a - // - should be loaded from the archive by the bootstrap class loader - public static void testBootAppendClassWithAppCDS() throws Exception { - OutputAnalyzer output = TestCommon.exec( - appJar, - "-Xbootclasspath/a:" + bootAppendJar, - "-XX:+TraceClassLoading", - MAIN_CLASS, - "Test #6", BOOT_APPEND_CLASS, "true", "BOOT"); - TestCommon.checkExec(output); - if (!TestCommon.isUnableToMap(output)) - output.shouldContain("[class,load] sun.nio.cs.ext1.MyClass source: shared objects file"); - } - - - // Test #7: A class in package defined in jimage app module - // - should not be loaded from the -Xbootclasspath/a without AppCDS - public static void testBootAppendAppModuleClassWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #7", APP_MODULE_CLASS, "false"); - - CDSTestUtils.runWithArchiveAndCheck(opts); - } - - - // Test #8: A shared class in package defined in jimage app module that's - // archived from -Xbootclasspath/a - // - should not be loaded from the archive - public static void testBootAppendAppModuleClassWithAppCDS() throws Exception { - OutputAnalyzer output = TestCommon.exec( - appJar, - "-Xbootclasspath/a:" + bootAppendJar, - MAIN_CLASS, - "Test #8", APP_MODULE_CLASS, "false"); - TestCommon.checkExec(output); - } - - - // Test #9: A class in excluded package defined in jimage app module - // - should be loaded from the -Xbootclasspath/a without AppCDS - public static void testBootAppendAppExcludeModuleClassWithoutAppCDS() - throws Exception { - - TestCommon.run( - "-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar, - "-Xlog:class+load=info", - "--limit-modules", "java.base", - MAIN_CLASS, "Test #9", APP_MODULE_CLASS, "true", "BOOT") - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(".class.load. com.sun.tools.javac.MyMain source:.*bootAppend.jar"); - }); - } - - // Test #10: A shared class in excluded package defined in jimage app module - // - should be loaded from the -Xbootclasspath/a with AppCDS - public static void testBootAppendAppExcludeModuleClassAppCDS() throws Exception { - TestCommon.run( - "-cp", appJar, "-Xbootclasspath/a:" + bootAppendJar, - "-Xlog:class+load=info", - "--limit-modules", "java.base", - MAIN_CLASS, "Test #10", APP_MODULE_CLASS, "true", "BOOT") - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch(".class.load. com.sun.tools.javac.MyMain source:.*bootAppend.jar"); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/BootAppendTests.java 2019-07-24 08:27:35.557468782 -0400 @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @summary AppCDS tests for testing -Xbootclasspath/a + * @requires vm.cds & !vm.graal.enabled + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * jdk.internal.jvmstat/sun.jvmstat.monitor + * @compile src/jdk/test/Main.java + * @compile src/com/sun/tools/javac/MyMain.jasm + * @compile src/sun/nio/cs/ext/MyClass.java + * @compile src/sun/nio/cs/ext1/MyClass.java + * @run driver BootAppendTests + */ + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +public class BootAppendTests { + private static final String TEST_SRC = System.getProperty("test.src"); + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path CLASSES_DIR = Paths.get("classes"); + + private static final String MAIN_CLASS = "jdk.test.Main"; + private static final String APP_MODULE_CLASS = "com/sun/tools/javac/MyMain"; + private static final String BOOT_APPEND_MODULE_CLASS = "sun/nio/cs/ext/MyClass"; + private static final String BOOT_APPEND_CLASS = "sun/nio/cs/ext1/MyClass"; + private static final String[] ARCHIVE_CLASSES = + {APP_MODULE_CLASS, BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_CLASS}; + + private static String appJar; + private static String bootAppendJar; + private static String testArchiveName; + + public static void main(String... args) throws Exception { + dumpArchive(); + + System.out.println("TESTCASE: 1: testBootAppendModuleClassWithoutAppCDS"); + testBootAppendModuleClassWithoutAppCDS(); + + System.out.println("TESTCASE: 2" ); + testBootAppendModuleClassWithAppCDS(); + + System.out.println("TESTCASE: 3" ); + testBootAppendExcludedModuleClassWithoutAppCDS(); + + System.out.println("TESTCASE: 4" ); + testBootAppendExcludedModuleClassWithAppCDS(); + + System.out.println("TESTCASE: 5" ); + testBootAppendClassWithoutAppCDS(); + + System.out.println("TESTCASE: 6" ); + testBootAppendClassWithAppCDS(); + + System.out.println("TESTCASE: 7" ); + testBootAppendAppModuleClassWithoutAppCDS(); + + System.out.println("TESTCASE: 9" ); + testBootAppendAppModuleClassWithAppCDS(); + + System.out.println("TESTCASE: 9" ); + testBootAppendAppExcludeModuleClassWithoutAppCDS(); + + System.out.println("TESTCASE: 10" ); + testBootAppendAppExcludeModuleClassAppCDS(); + } + + static void dumpArchive() throws Exception { + JarBuilder.build("classpathtests", "jdk/test/Main"); + appJar = TestCommon.getTestJar("classpathtests.jar"); + + JarBuilder.build("bootAppend", + APP_MODULE_CLASS, BOOT_APPEND_MODULE_CLASS, BOOT_APPEND_CLASS); + bootAppendJar = TestCommon.getTestJar("bootAppend.jar"); + + OutputAnalyzer output1 = TestCommon.dump( + appJar, TestCommon.list(ARCHIVE_CLASSES), "-Xbootclasspath/a:" + bootAppendJar); + TestCommon.checkDump(output1); + + if (!TestCommon.isUnableToMap(output1)) { + // Make sure all the classes were successfully archived. + for (String archiveClass : ARCHIVE_CLASSES) { + output1.shouldNotContain("Preload Warning: Cannot find " + archiveClass); + } + } + + testArchiveName = TestCommon.getCurrentArchiveName(); + } + + // Test #1: A class in package defined in boot module + // - should not be loaded from the -Xbootclasspath/a without AppCDS + public static void testBootAppendModuleClassWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #1", BOOT_APPEND_MODULE_CLASS, "false"); + + CDSTestUtils.runWithArchiveAndCheck(opts); + } + + // Test #2: A shared class in package defined in boot module that's archived + // from -Xbootclasspath/a + // - should not be loaded by AppCDS + public static void testBootAppendModuleClassWithAppCDS() throws Exception { + OutputAnalyzer output = TestCommon.exec( + appJar, + "-Xbootclasspath/a:" + bootAppendJar, + MAIN_CLASS, + "Test #2", BOOT_APPEND_MODULE_CLASS, "false"); + TestCommon.checkExec(output); + } + + + // Test #3: A class in excluded package defined in boot module + // - should be loaded from the -Xbootclasspath/a by the boot classloader + public static void testBootAppendExcludedModuleClassWithoutAppCDS() throws Exception { + TestCommon.run( + "-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar, + "-Xlog:class+load=info", + "--limit-modules", "java.base", + MAIN_CLASS, "Test #3", BOOT_APPEND_MODULE_CLASS, "true", "BOOT") + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(".class.load. sun.nio.cs.ext.MyClass source:.*bootAppend.jar"); + }); + } + + // Test #4: A shared class in excluded package that's archived from + // -Xbootclasspath/a + // - should be loaded from the jar since AppCDS will be disabled with + // the --limit-modules option + public static void testBootAppendExcludedModuleClassWithAppCDS() throws Exception { + TestCommon.run( + "-cp", appJar, "-Xbootclasspath/a:" + bootAppendJar, + "-Xlog:class+load=info", + "--limit-modules", "java.base", + MAIN_CLASS, + "Test #4", BOOT_APPEND_MODULE_CLASS, "true", "BOOT") + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(".class.load. sun.nio.cs.ext.MyClass source:.*bootAppend.jar"); + }); + } + + + // Test #5: A class not in package defined in boot module + // - should be loaded from the -Xbootclasspath/a without AppCDS + public static void testBootAppendClassWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #5", BOOT_APPEND_CLASS, "true", "BOOT"); + + CDSTestUtils.runWithArchiveAndCheck(opts); + } + + + // Test #6: A shared class not in package defined in boot module that's + // archived from -Xbootclasspath/a + // - should be loaded from the archive by the bootstrap class loader + public static void testBootAppendClassWithAppCDS() throws Exception { + OutputAnalyzer output = TestCommon.exec( + appJar, + "-Xbootclasspath/a:" + bootAppendJar, + "-XX:+TraceClassLoading", + MAIN_CLASS, + "Test #6", BOOT_APPEND_CLASS, "true", "BOOT"); + TestCommon.checkExec(output); + if (!TestCommon.isUnableToMap(output)) + output.shouldContain("[class,load] sun.nio.cs.ext1.MyClass source: shared objects file"); + } + + + // Test #7: A class in package defined in jimage app module + // - should not be loaded from the -Xbootclasspath/a without AppCDS + public static void testBootAppendAppModuleClassWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar) + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #7", APP_MODULE_CLASS, "false"); + + CDSTestUtils.runWithArchiveAndCheck(opts); + } + + + // Test #8: A shared class in package defined in jimage app module that's + // archived from -Xbootclasspath/a + // - should not be loaded from the archive + public static void testBootAppendAppModuleClassWithAppCDS() throws Exception { + OutputAnalyzer output = TestCommon.exec( + appJar, + "-Xbootclasspath/a:" + bootAppendJar, + MAIN_CLASS, + "Test #8", APP_MODULE_CLASS, "false"); + TestCommon.checkExec(output); + } + + + // Test #9: A class in excluded package defined in jimage app module + // - should be loaded from the -Xbootclasspath/a without AppCDS + public static void testBootAppendAppExcludeModuleClassWithoutAppCDS() + throws Exception { + + TestCommon.run( + "-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar, + "-Xlog:class+load=info", + "--limit-modules", "java.base", + MAIN_CLASS, "Test #9", APP_MODULE_CLASS, "true", "BOOT") + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(".class.load. com.sun.tools.javac.MyMain source:.*bootAppend.jar"); + }); + } + + // Test #10: A shared class in excluded package defined in jimage app module + // - should be loaded from the -Xbootclasspath/a with AppCDS + public static void testBootAppendAppExcludeModuleClassAppCDS() throws Exception { + TestCommon.run( + "-cp", appJar, "-Xbootclasspath/a:" + bootAppendJar, + "-Xlog:class+load=info", + "--limit-modules", "java.base", + MAIN_CLASS, "Test #10", APP_MODULE_CLASS, "true", "BOOT") + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch(".class.load. com.sun.tools.javac.MyMain source:.*bootAppend.jar"); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/ClassPathTests.java 2019-07-24 08:27:36.349468754 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,260 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds & !vm.graal.enabled - * @library ../.. - * @library /test/lib - * @modules java.compiler - * java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @compile src/jdk/test/Main.java - * @compile src/com/sun/tools/javac/Main.jasm - * @compile src/com/sun/tools/javac/MyMain.jasm - * @compile ../../../SharedArchiveFile/javax/annotation/processing/FilerException.jasm - * @run driver ClassPathTests - * @summary AppCDS tests for testing classpath/package conflicts - */ - -/* - * These tests will verify that AppCDS will correctly handle archived classes - * on the classpath that are in a package that is also exported by the jimage. - * These classes should fail to load unless --limit-modules is used to hide the - * package exported by the jimage. There are 8 variants of this test: - * - With a jimage app package and with a jimage ext package - * - With --limit-modules and without --limit-modules - * - With AppCDS and without AppCDS (to verify behaviour is the same for both). - * - * There is also a 9th test to verify that when --limit-modules is used, a jimage - * class in the archive can be replaced by a classpath class with the - * same name and package. - */ - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.Asserts; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; - -import jtreg.SkippedException; - - -public class ClassPathTests { - private static final String TEST_SRC = System.getProperty("test.src"); - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path CLASSES_DIR = Paths.get("classes"); - - // the test module - private static final String MAIN_CLASS = "jdk.test.Main"; - private static final String LIMITMODS_MAIN_CLASS = "jdk.test.LimitModsMain"; - - // test classes to archive. These are both in UPGRADED_MODULES - private static final String JIMAGE_CLASS = "com/sun/tools/javac/Main"; - private static final String APP_ARCHIVE_CLASS = "com/sun/tools/javac/MyMain"; - private static final String PLATFORM_ARCHIVE_CLASS = "javax/annotation/processing/FilerException"; - private static final String[] ARCHIVE_CLASSES = {APP_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, JIMAGE_CLASS}; - private static final int NUMBER_OF_TEST_CASES = 10; - - private static String appJar; - private static String testArchiveName; - - - public static void main(String[] args) throws Throwable { - ClassPathTests tests = new ClassPathTests(); - tests.dumpArchive(); - - Method[] methods = tests.getClass().getDeclaredMethods(); - int numOfTestMethodsRun = 0; - for (Method m : methods) { - if (m.getName().startsWith("test")) { - System.out.println("About to run test method: " + m.getName()); - try { - m.invoke(tests); - } catch (InvocationTargetException ite) { - Throwable throwable = ite.getCause(); - if (throwable instanceof SkippedException) { - throw throwable; - } else { - throw ite; - } - } - numOfTestMethodsRun++; - } - } - - Asserts.assertTrue((numOfTestMethodsRun == NUMBER_OF_TEST_CASES), - "Expected " + NUMBER_OF_TEST_CASES + " test methods to run, actual number is " - + numOfTestMethodsRun); - } - - private void dumpArchive() throws Exception { - // Create a jar file with all the classes related to this test. - JarBuilder.build( "classpathtests", - APP_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, JIMAGE_CLASS, - "jdk/test/Main"); - appJar = TestCommon.getTestJar("classpathtests.jar"); - - // dump the archive with altnernate jdk.comiler and jdk.activation classes in the class list - OutputAnalyzer output1 = TestCommon.dump(appJar, TestCommon.list(ARCHIVE_CLASSES)); - TestCommon.checkDump(output1); - // The PLATFORM_ARCHIVE_CLASS belongs to the java.compiler - // module will be found from the module during dumping. - // The JIMAGE_CLASS will be found from the jdk.compiler module during - // dumping. - // The APP_ARCHIVE_CLASS, which belongs to a package within the - // jdk.compiler module, will not be found during dump time. - for (String archiveClass : ARCHIVE_CLASSES) { - if (archiveClass.equals(APP_ARCHIVE_CLASS)) { - output1.shouldContain("Preload Warning: Cannot find " + archiveClass); - } else { - output1.shouldNotContain("Preload Warning: Cannot find " + archiveClass); - } - } - - testArchiveName = TestCommon.getCurrentArchiveName(); - } - - // #1: Archived classpath class in same package as jimage app class. With AppCDS. - // Should fail to load. - public void testAppClassWithAppCDS() throws Exception { - OutputAnalyzer output = TestCommon.exec( - appJar, MAIN_CLASS, - "Test #1", APP_ARCHIVE_CLASS, "false"); // last 3 args passed to test - TestCommon.checkExec(output); - } - - // #2: Archived classpath class in same package as jimage app class. Without AppCDS. - // Should fail to load. - public void testAppClassWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-cp", appJar) - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #2", APP_ARCHIVE_CLASS, "false"); - - CDSTestUtils.runWithArchiveAndCheck(opts); - } - - // #3: Archived classpath class in same package as jimage ext class. With AppCDS. - // The class should be loaded from the module. - public void testExtClassWithAppCDS() throws Exception { - OutputAnalyzer output = TestCommon.exec( - appJar, MAIN_CLASS, - "Test #3", PLATFORM_ARCHIVE_CLASS, "true", "EXT"); // last 4 args passed to test - TestCommon.checkExec(output); - } - - // #4: Archived classpath class in same package as jimage ext class. Without AppCDS. - // The class should be loaded from the module. - public void testExtClassWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-cp", appJar) - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #4", PLATFORM_ARCHIVE_CLASS, "true", "EXT"); - - CDSTestUtils.runWithArchiveAndCheck(opts); - } - - // #5: Archived classpath class in same package as jimage app class. With AppCDS. - // Should load with CDS disabled because --limit-modules is used. - public void testAppClassWithLimitModsWithAppCDS() throws Exception { - TestCommon.run("-cp", appJar, - "--limit-modules", "java.base", - MAIN_CLASS, - "Test #5", APP_ARCHIVE_CLASS, "true") // last 3 args passed to test - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0); - }); - } - - // #6: Archived classpath class in same package as jimage app class. Without AppCDS. - // Should load with CDS disabled because --limit-modules is used. - public void testAppClassWithLimitModsWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-cp", appJar, "--limit-modules", "java.base") - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #6", APP_ARCHIVE_CLASS, "true"); - CDSTestUtils.run(opts) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0); - }); - } - - // #7: Archived classpath class in same package as jimage ext class. With AppCDS. - // Should load with CDS disabled because --limit-modules is used. - public void testExtClassWithLimitModsWithAppCDS() throws Exception { - TestCommon.run("-cp", appJar, - "--limit-modules", "java.base", - MAIN_CLASS, - "Test #7", PLATFORM_ARCHIVE_CLASS, "true") // last 3 args passed to test - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0); - }); - } - - // #8: Archived classpath class in same package as jimage ext class. Without AppCDS. - // Should load with CDS disabled because --limit-modules is used. - public void testExtClassWithLimitModsWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-cp", appJar, "--limit-modules", "java.base") - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #8", PLATFORM_ARCHIVE_CLASS, "true"); - CDSTestUtils.run(opts) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0); - }); - } - - // #9: Archived classpath class with same name as jimage app class. With AppCDS. - // Should load with CDS disabled because --limit-modules is used. - public void testReplacingJImageClassWithAppCDS() throws Exception { - TestCommon.run("-cp", appJar, - "--limit-modules", "java.base", - MAIN_CLASS, - "Test #9", JIMAGE_CLASS, "true") // last 3 args passed to test - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0); - }); - } - - // #10: Archived classpath class with same name as jimage app class. Without AppCDS. - // Should load because --limit-modules is used. Note the archive will actually contain - // the original jimage version of the class, but AppCDS should refuse to load it - // since --limit-modules is used. This should result in the -cp version being used. - public void testReplacingJImageClassWithoutAppCDS() throws Exception { - CDSOptions opts = (new CDSOptions()) - .addPrefix("-cp", appJar, "--limit-modules", "java.base") - .setArchiveName(testArchiveName) - .addSuffix(MAIN_CLASS, "Test #10", JIMAGE_CLASS, "true"); - CDSTestUtils.run(opts) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/ClassPathTests.java 2019-07-24 08:27:36.001468766 -0400 @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds & !vm.graal.enabled + * @library ../.. + * @library /test/lib + * @modules java.compiler + * java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @compile src/jdk/test/Main.java + * @compile src/com/sun/tools/javac/Main.jasm + * @compile src/com/sun/tools/javac/MyMain.jasm + * @compile ../../../cds/javax/annotation/processing/FilerException.jasm + * @run driver ClassPathTests + * @summary AppCDS tests for testing classpath/package conflicts + */ + +/* + * These tests will verify that AppCDS will correctly handle archived classes + * on the classpath that are in a package that is also exported by the jimage. + * These classes should fail to load unless --limit-modules is used to hide the + * package exported by the jimage. There are 8 variants of this test: + * - With a jimage app package and with a jimage ext package + * - With --limit-modules and without --limit-modules + * - With AppCDS and without AppCDS (to verify behaviour is the same for both). + * + * There is also a 9th test to verify that when --limit-modules is used, a jimage + * class in the archive can be replaced by a classpath class with the + * same name and package. + */ + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.Asserts; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.process.OutputAnalyzer; + +import jtreg.SkippedException; + + +public class ClassPathTests { + private static final String TEST_SRC = System.getProperty("test.src"); + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path CLASSES_DIR = Paths.get("classes"); + + // the test module + private static final String MAIN_CLASS = "jdk.test.Main"; + private static final String LIMITMODS_MAIN_CLASS = "jdk.test.LimitModsMain"; + + // test classes to archive. These are both in UPGRADED_MODULES + private static final String JIMAGE_CLASS = "com/sun/tools/javac/Main"; + private static final String APP_ARCHIVE_CLASS = "com/sun/tools/javac/MyMain"; + private static final String PLATFORM_ARCHIVE_CLASS = "javax/annotation/processing/FilerException"; + private static final String[] ARCHIVE_CLASSES = {APP_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, JIMAGE_CLASS}; + private static final int NUMBER_OF_TEST_CASES = 10; + + private static String appJar; + private static String testArchiveName; + + + public static void main(String[] args) throws Throwable { + ClassPathTests tests = new ClassPathTests(); + tests.dumpArchive(); + + Method[] methods = tests.getClass().getDeclaredMethods(); + int numOfTestMethodsRun = 0; + for (Method m : methods) { + if (m.getName().startsWith("test")) { + System.out.println("About to run test method: " + m.getName()); + try { + m.invoke(tests); + } catch (InvocationTargetException ite) { + Throwable throwable = ite.getCause(); + if (throwable instanceof SkippedException) { + throw throwable; + } else { + throw ite; + } + } + numOfTestMethodsRun++; + } + } + + Asserts.assertTrue((numOfTestMethodsRun == NUMBER_OF_TEST_CASES), + "Expected " + NUMBER_OF_TEST_CASES + " test methods to run, actual number is " + + numOfTestMethodsRun); + } + + private void dumpArchive() throws Exception { + // Create a jar file with all the classes related to this test. + JarBuilder.build( "classpathtests", + APP_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, JIMAGE_CLASS, + "jdk/test/Main"); + appJar = TestCommon.getTestJar("classpathtests.jar"); + + // dump the archive with altnernate jdk.comiler and jdk.activation classes in the class list + OutputAnalyzer output1 = TestCommon.dump(appJar, TestCommon.list(ARCHIVE_CLASSES)); + TestCommon.checkDump(output1); + // The PLATFORM_ARCHIVE_CLASS belongs to the java.compiler + // module will be found from the module during dumping. + // The JIMAGE_CLASS will be found from the jdk.compiler module during + // dumping. + // The APP_ARCHIVE_CLASS, which belongs to a package within the + // jdk.compiler module, will not be found during dump time. + for (String archiveClass : ARCHIVE_CLASSES) { + if (archiveClass.equals(APP_ARCHIVE_CLASS)) { + output1.shouldContain("Preload Warning: Cannot find " + archiveClass); + } else { + output1.shouldNotContain("Preload Warning: Cannot find " + archiveClass); + } + } + + testArchiveName = TestCommon.getCurrentArchiveName(); + } + + // #1: Archived classpath class in same package as jimage app class. With AppCDS. + // Should fail to load. + public void testAppClassWithAppCDS() throws Exception { + OutputAnalyzer output = TestCommon.exec( + appJar, MAIN_CLASS, + "Test #1", APP_ARCHIVE_CLASS, "false"); // last 3 args passed to test + TestCommon.checkExec(output); + } + + // #2: Archived classpath class in same package as jimage app class. Without AppCDS. + // Should fail to load. + public void testAppClassWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-cp", appJar) + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #2", APP_ARCHIVE_CLASS, "false"); + + CDSTestUtils.runWithArchiveAndCheck(opts); + } + + // #3: Archived classpath class in same package as jimage ext class. With AppCDS. + // The class should be loaded from the module. + public void testExtClassWithAppCDS() throws Exception { + OutputAnalyzer output = TestCommon.exec( + appJar, MAIN_CLASS, + "Test #3", PLATFORM_ARCHIVE_CLASS, "true", "EXT"); // last 4 args passed to test + TestCommon.checkExec(output); + } + + // #4: Archived classpath class in same package as jimage ext class. Without AppCDS. + // The class should be loaded from the module. + public void testExtClassWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-cp", appJar) + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #4", PLATFORM_ARCHIVE_CLASS, "true", "EXT"); + + CDSTestUtils.runWithArchiveAndCheck(opts); + } + + // #5: Archived classpath class in same package as jimage app class. With AppCDS. + // Should load with CDS disabled because --limit-modules is used. + public void testAppClassWithLimitModsWithAppCDS() throws Exception { + TestCommon.run("-cp", appJar, + "--limit-modules", "java.base", + MAIN_CLASS, + "Test #5", APP_ARCHIVE_CLASS, "true") // last 3 args passed to test + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0); + }); + } + + // #6: Archived classpath class in same package as jimage app class. Without AppCDS. + // Should load with CDS disabled because --limit-modules is used. + public void testAppClassWithLimitModsWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-cp", appJar, "--limit-modules", "java.base") + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #6", APP_ARCHIVE_CLASS, "true"); + CDSTestUtils.run(opts) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0); + }); + } + + // #7: Archived classpath class in same package as jimage ext class. With AppCDS. + // Should load with CDS disabled because --limit-modules is used. + public void testExtClassWithLimitModsWithAppCDS() throws Exception { + TestCommon.run("-cp", appJar, + "--limit-modules", "java.base", + MAIN_CLASS, + "Test #7", PLATFORM_ARCHIVE_CLASS, "true") // last 3 args passed to test + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0); + }); + } + + // #8: Archived classpath class in same package as jimage ext class. Without AppCDS. + // Should load with CDS disabled because --limit-modules is used. + public void testExtClassWithLimitModsWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-cp", appJar, "--limit-modules", "java.base") + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #8", PLATFORM_ARCHIVE_CLASS, "true"); + CDSTestUtils.run(opts) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0); + }); + } + + // #9: Archived classpath class with same name as jimage app class. With AppCDS. + // Should load with CDS disabled because --limit-modules is used. + public void testReplacingJImageClassWithAppCDS() throws Exception { + TestCommon.run("-cp", appJar, + "--limit-modules", "java.base", + MAIN_CLASS, + "Test #9", JIMAGE_CLASS, "true") // last 3 args passed to test + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0); + }); + } + + // #10: Archived classpath class with same name as jimage app class. Without AppCDS. + // Should load because --limit-modules is used. Note the archive will actually contain + // the original jimage version of the class, but AppCDS should refuse to load it + // since --limit-modules is used. This should result in the -cp version being used. + public void testReplacingJImageClassWithoutAppCDS() throws Exception { + CDSOptions opts = (new CDSOptions()) + .addPrefix("-cp", appJar, "--limit-modules", "java.base") + .setArchiveName(testArchiveName) + .addSuffix(MAIN_CLASS, "Test #10", JIMAGE_CLASS, "true"); + CDSTestUtils.run(opts) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java 2019-07-24 08:27:36.757468740 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Ensure that classes found in jimage takes precedence over classes found in -Xbootclasspath/a. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.compiler - * jdk.jartool/sun.tools.jar - * @compile ../../test-classes/DummyClassHelper.java - * @compile ../../test-classes/java/net/HttpCookie.jasm - * @compile ../../../SharedArchiveFile/javax/annotation/processing/FilerException.jasm - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver DummyClassesInBootClassPath - */ - -import java.io.File; -import java.util.List; -import java.util.ArrayList; -import jdk.test.lib.process.OutputAnalyzer; - -public class DummyClassesInBootClassPath { - private static final String METHOD_NAME = "thisClassIsDummy()"; - - static void checkOutput(OutputAnalyzer output, String[] classNames) throws Exception { - for (int i = 0; i < classNames.length; i++) { - String cn = classNames[i].replace('/', '.'); - TestCommon.checkExec(output, - "java.lang.NoSuchMethodException: " + cn + "." + - METHOD_NAME); - output.shouldNotContain(cn + ".class should be in shared space."); - } - } - - public static void main(String[] args) throws Exception { - String classNames[] = { "java/net/HttpCookie", - "javax/annotation/processing/FilerException"}; - JarBuilder.build("dummyClasses", classNames[0], classNames[1]); - - String appJar = TestCommon.getTestJar("dummyClasses.jar"); - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, classNames, "-Xbootclasspath/a:" + appJar); - TestCommon.checkDump(dumpOutput); - - List argsList = new ArrayList(); - for (int i = 0; i < classNames.length; i++) { - argsList.add(classNames[i].replace('/', '.')); - } - String[] arguments = new String[argsList.size()]; - arguments = argsList.toArray(arguments); - TestCommon.run( - "-Xbootclasspath/a:" + appJar, - "DummyClassHelper", arguments[0], arguments[1]) - .assertNormalExit(output -> checkOutput(output, classNames)); - - JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); - String bootClassPath = "-Xbootclasspath/a:" + appJar + - File.pathSeparator + whiteBoxJar; - dumpOutput = TestCommon.dump( - appJar, classNames, bootClassPath); - argsList.add("testWithWhiteBox"); - arguments = new String[argsList.size()]; - arguments = argsList.toArray(arguments); - String[] opts = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", - bootClassPath, "-Xlog:class+path=trace", - "DummyClassHelper", arguments[0], arguments[1], arguments[2]}; - TestCommon.run(opts) - .assertNormalExit(output -> checkOutput(output, classNames)); - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/DummyClassesInBootClassPath.java 2019-07-24 08:27:36.441468751 -0400 @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Ensure that classes found in jimage takes precedence over classes found in -Xbootclasspath/a. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.compiler + * jdk.jartool/sun.tools.jar + * @compile ../../test-classes/DummyClassHelper.java + * @compile ../../test-classes/java/net/HttpCookie.jasm + * @compile ../../../cds/javax/annotation/processing/FilerException.jasm + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver DummyClassesInBootClassPath + */ + +import java.io.File; +import java.util.List; +import java.util.ArrayList; +import jdk.test.lib.process.OutputAnalyzer; + +public class DummyClassesInBootClassPath { + private static final String METHOD_NAME = "thisClassIsDummy()"; + + static void checkOutput(OutputAnalyzer output, String[] classNames) throws Exception { + for (int i = 0; i < classNames.length; i++) { + String cn = classNames[i].replace('/', '.'); + TestCommon.checkExec(output, + "java.lang.NoSuchMethodException: " + cn + "." + + METHOD_NAME); + output.shouldNotContain(cn + ".class should be in shared space."); + } + } + + public static void main(String[] args) throws Exception { + String classNames[] = { "java/net/HttpCookie", + "javax/annotation/processing/FilerException"}; + JarBuilder.build("dummyClasses", classNames[0], classNames[1]); + + String appJar = TestCommon.getTestJar("dummyClasses.jar"); + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, classNames, "-Xbootclasspath/a:" + appJar); + TestCommon.checkDump(dumpOutput); + + List argsList = new ArrayList(); + for (int i = 0; i < classNames.length; i++) { + argsList.add(classNames[i].replace('/', '.')); + } + String[] arguments = new String[argsList.size()]; + arguments = argsList.toArray(arguments); + TestCommon.run( + "-Xbootclasspath/a:" + appJar, + "DummyClassHelper", arguments[0], arguments[1]) + .assertNormalExit(output -> checkOutput(output, classNames)); + + JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar"); + String bootClassPath = "-Xbootclasspath/a:" + appJar + + File.pathSeparator + whiteBoxJar; + dumpOutput = TestCommon.dump( + appJar, classNames, bootClassPath); + argsList.add("testWithWhiteBox"); + arguments = new String[argsList.size()]; + arguments = argsList.toArray(arguments); + String[] opts = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", + bootClassPath, "-Xlog:class+path=trace", + "DummyClassHelper", arguments[0], arguments[1], arguments[2]}; + TestCommon.run(opts) + .assertNormalExit(output -> checkOutput(output, classNames)); + } +} + --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/EmptyClassInBootClassPath.java 2019-07-24 08:27:37.125468727 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test a few scenarios if an empty class, which has the same name as the one in the jimage, is specified in the -Xbootclasspath/a - * 1) boot loader will always load the class from the bootclasspath - * 2) app loader will load the class from the jimage by default; - * app loader will load the class from the bootclasspath if the - * "--limit-modules java.base" option is specified - * @requires vm.cds & !vm.graal.enabled - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.access - * java.management - * jdk.jartool/sun.tools.jar - * jdk.internal.jvmstat/sun.jvmstat.monitor - * @compile ../../test-classes/EmptyClassHelper.java - * @compile ../../test-classes/com/sun/tools/javac/Main.jasm - * @run driver EmptyClassInBootClassPath - */ - -import java.io.File; -import java.lang.*; -import java.lang.reflect.*; -import java.util.List; -import java.util.ArrayList; -import jdk.test.lib.process.OutputAnalyzer; - -public class EmptyClassInBootClassPath { - static final String EXPECTED_EXCEPTION = - "java.lang.NoSuchMethodException: com.sun.tools.javac.Main.main([Ljava.lang.String;)"; - public static void main(String[] args) throws Exception { - String[] className = {"com/sun/tools/javac/Main"}; - JarBuilder.build("emptyClass", className); - String appJar = TestCommon.getTestJar("emptyClass.jar"); - JarBuilder.build("EmptyClassHelper", "EmptyClassHelper"); - String helperJar = TestCommon.getTestJar("EmptyClassHelper.jar"); - OutputAnalyzer dumpOutput = TestCommon.dump( - appJar, className, "-Xbootclasspath/a:" + appJar); - TestCommon.checkDump(dumpOutput); - dumpOutput.shouldNotContain("Preload Warning: skipping class from -Xbootclasspath/a " + className[0]); - - String bootclasspath = "-Xbootclasspath/a:" + appJar; - String classPath = "-Djava.class.path=" + appJar + File.pathSeparator + helperJar; - List argsList = new ArrayList(); - argsList.add(classPath); - argsList.add(bootclasspath); - argsList.add("--add-exports=java.base/jdk.internal.access=ALL-UNNAMED"); - argsList.add("EmptyClassHelper"); - - // case 1: load class in bootclasspath using app loader - argsList.add("useAppLoader"); - String[] opts = new String[argsList.size()]; - opts = argsList.toArray(opts); - TestCommon.run(opts).assertNormalExit("appLoader found method main"); - - // case 2: load class in bootclasspath using boot loader - argsList.remove(argsList.size() - 1); - argsList.add("useBootLoader"); - opts = new String[argsList.size()]; - opts = argsList.toArray(opts); - TestCommon.run(opts).assertNormalExit(EXPECTED_EXCEPTION); - - // case 3: load class in bootclasspath using app loader with '--limit-modules java.base' - argsList.add(0, "--limit-modules"); - argsList.add(1, "java.base"); - argsList.remove(argsList.size() - 1); - argsList.add("useAppLoader"); - opts = new String[argsList.size()]; - opts = argsList.toArray(opts); - TestCommon.run(opts) - .assertSilentlyDisabledCDS(0, EXPECTED_EXCEPTION); - - // case 4: load class in bootclasspath using boot loader with '--limit-modules java.base' - argsList.remove(argsList.size() - 1); - argsList.add("useBootLoader"); - opts = new String[argsList.size()]; - opts = argsList.toArray(opts); - TestCommon.run(opts) - .assertSilentlyDisabledCDS(0, EXPECTED_EXCEPTION); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/EmptyClassInBootClassPath.java 2019-07-24 08:27:36.849468737 -0400 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test a few scenarios if an empty class, which has the same name as the one in the jimage, is specified in the -Xbootclasspath/a + * 1) boot loader will always load the class from the bootclasspath + * 2) app loader will load the class from the jimage by default; + * app loader will load the class from the bootclasspath if the + * "--limit-modules java.base" option is specified + * @requires vm.cds & !vm.graal.enabled + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.access + * java.management + * jdk.jartool/sun.tools.jar + * jdk.internal.jvmstat/sun.jvmstat.monitor + * @compile ../../test-classes/EmptyClassHelper.java + * @compile ../../test-classes/com/sun/tools/javac/Main.jasm + * @run driver EmptyClassInBootClassPath + */ + +import java.io.File; +import java.lang.*; +import java.lang.reflect.*; +import java.util.List; +import java.util.ArrayList; +import jdk.test.lib.process.OutputAnalyzer; + +public class EmptyClassInBootClassPath { + static final String EXPECTED_EXCEPTION = + "java.lang.NoSuchMethodException: com.sun.tools.javac.Main.main([Ljava.lang.String;)"; + public static void main(String[] args) throws Exception { + String[] className = {"com/sun/tools/javac/Main"}; + JarBuilder.build("emptyClass", className); + String appJar = TestCommon.getTestJar("emptyClass.jar"); + JarBuilder.build("EmptyClassHelper", "EmptyClassHelper"); + String helperJar = TestCommon.getTestJar("EmptyClassHelper.jar"); + OutputAnalyzer dumpOutput = TestCommon.dump( + appJar, className, "-Xbootclasspath/a:" + appJar); + TestCommon.checkDump(dumpOutput); + dumpOutput.shouldNotContain("Preload Warning: skipping class from -Xbootclasspath/a " + className[0]); + + String bootclasspath = "-Xbootclasspath/a:" + appJar; + String classPath = "-Djava.class.path=" + appJar + File.pathSeparator + helperJar; + List argsList = new ArrayList(); + argsList.add(classPath); + argsList.add(bootclasspath); + argsList.add("--add-exports=java.base/jdk.internal.access=ALL-UNNAMED"); + argsList.add("EmptyClassHelper"); + + // case 1: load class in bootclasspath using app loader + argsList.add("useAppLoader"); + String[] opts = new String[argsList.size()]; + opts = argsList.toArray(opts); + TestCommon.run(opts).assertNormalExit("appLoader found method main"); + + // case 2: load class in bootclasspath using boot loader + argsList.remove(argsList.size() - 1); + argsList.add("useBootLoader"); + opts = new String[argsList.size()]; + opts = argsList.toArray(opts); + TestCommon.run(opts).assertNormalExit(EXPECTED_EXCEPTION); + + // case 3: load class in bootclasspath using app loader with '--limit-modules java.base' + argsList.add(0, "--limit-modules"); + argsList.add(1, "java.base"); + argsList.remove(argsList.size() - 1); + argsList.add("useAppLoader"); + opts = new String[argsList.size()]; + opts = argsList.toArray(opts); + TestCommon.run(opts) + .assertSilentlyDisabledCDS(0, EXPECTED_EXCEPTION); + + // case 4: load class in bootclasspath using boot loader with '--limit-modules java.base' + argsList.remove(argsList.size() - 1); + argsList.add("useBootLoader"); + opts = new String[argsList.size()]; + opts = argsList.toArray(opts); + TestCommon.run(opts) + .assertSilentlyDisabledCDS(0, EXPECTED_EXCEPTION); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/com/sun/tools/javac/Main.jasm 2019-07-24 08:27:37.469468715 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com/sun/tools/javac; - -public class Main - version 51:0 -{ - -public Method "":"()V" - stack 1 locals 1 -{ - aload_0; - invokespecial Method java/lang/Object."":"()V"; - return; -} - -public Method toString:"()Ljava/lang/String;" - stack 1 locals 1 -{ - ldc String "hi"; - areturn; -} - -} // end class Main --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/src/com/sun/tools/javac/Main.jasm 2019-07-24 08:27:37.209468724 -0400 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com/sun/tools/javac; + +public class Main + version 51:0 +{ + +public Method "":"()V" + stack 1 locals 1 +{ + aload_0; + invokespecial Method java/lang/Object."":"()V"; + return; +} + +public Method toString:"()Ljava/lang/String;" + stack 1 locals 1 +{ + ldc String "hi"; + areturn; +} + +} // end class Main --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/com/sun/tools/javac/MyMain.jasm 2019-07-24 08:27:37.813468703 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com/sun/tools/javac; - -public class MyMain - version 51:0 -{ - -public Method "":"()V" - stack 1 locals 1 -{ - aload_0; - invokespecial Method java/lang/Object."":"()V"; - return; -} - -public Method toString:"()Ljava/lang/String;" - stack 1 locals 1 -{ - ldc String "hi"; - areturn; -} - -} // end class Main2 --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/src/com/sun/tools/javac/MyMain.jasm 2019-07-24 08:27:37.521468713 -0400 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com/sun/tools/javac; + +public class MyMain + version 51:0 +{ + +public Method "":"()V" + stack 1 locals 1 +{ + aload_0; + invokespecial Method java/lang/Object."":"()V"; + return; +} + +public Method toString:"()Ljava/lang/String;" + stack 1 locals 1 +{ + ldc String "hi"; + areturn; +} + +} // end class Main2 --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/jdk/test/Main.java 2019-07-24 08:27:38.161468691 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * Tests loading an archived class that has the same class name as one in the - * jimage. The class should normally fail to load since a classpath class is not - * allowed to have the same package name as a module in the jimage. However, - * if --limit-modules was used then archived class should be loaded. - */ - -package jdk.test; - -public class Main { - static final ClassLoader BOOT_LOADER = null; - static final ClassLoader PLATFORM_LOADER = ClassLoader.getPlatformClassLoader(); - static final ClassLoader SYS_LOADER = ClassLoader.getSystemClassLoader(); - - public static void main(String[] args) throws Exception { - boolean shouldLoad = false; - ClassLoader expectedLoader = SYS_LOADER; - - /* - * 3 Arguments are passed to this test: - * 1. testName: Name of the test being run. - * 2. className: Name of the class to load and instantiate. - * 3. shouldLoad: Either "true" or "false" to indicate whether the class should - * successfully load ("true" indicates --limit-modules was used.) - * The 4th argument is optional. It specifies the classloader. - */ - - assertTrue(args.length <= 4); - String testName = args[0]; - String className = args[1].replace('/', '.'); - String shouldLoadName = args[2]; // "true" or "false" - String loaderName = "SYS"; - if (args.length == 4) { - loaderName = args[3]; - } - - if (shouldLoadName.equals("true")) { - shouldLoad = true; - } else if (shouldLoadName.equals("false")) { - shouldLoad = false; - } else { - assertTrue(false); - } - - if (loaderName.equals("SYS")) { - expectedLoader = SYS_LOADER; - } else if (loaderName.equals("EXT")) { - expectedLoader = PLATFORM_LOADER; - } else if (loaderName.equals("BOOT")) { - expectedLoader = BOOT_LOADER; - } - - System.out.println(testName + ": class=" + className + " shouldLoad=" + - shouldLoadName + " by loader:" + expectedLoader); - - // Try to load the specified class with the default ClassLoader. - Class clazz = null; - try { - clazz = Class.forName(className); - } catch (ClassNotFoundException e) { - System.out.println(e); - } - - if (clazz != null) { - // class loaded - if (shouldLoad) { - // Make sure we got the expected defining ClassLoader - ClassLoader actualLoader = clazz.getClassLoader(); - if (actualLoader != expectedLoader) { - throw new RuntimeException(testName + " FAILED: " + clazz + " loaded by " + actualLoader + - ", expected " + expectedLoader); - } - // Make sure we got the right version of the class. toString() of an instance - // of the overridden version of the class should return "hi". - if (actualLoader == SYS_LOADER) { - String s = clazz.newInstance().toString(); - if (!s.equals("hi")) { - throw new RuntimeException(testName + " FAILED: toString() returned \"" + s - + "\" instead of \"hi\"" ); - } - } - System.out.println(testName + " PASSED: class loaded as expected."); - } else { - throw new RuntimeException(testName + " FAILED: class loaded, but should have failed to load."); - } - } else { - // class did not load - if (shouldLoad) { - throw new RuntimeException(testName + " FAILED: class failed to load."); - } else { - System.out.println(testName + " PASSED: ClassNotFoundException thrown as expected"); - } - } - } - - static void assertTrue(boolean expr) { - if (!expr) - throw new RuntimeException("assertion failed"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/src/jdk/test/Main.java 2019-07-24 08:27:37.869468701 -0400 @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * Tests loading an archived class that has the same class name as one in the + * jimage. The class should normally fail to load since a classpath class is not + * allowed to have the same package name as a module in the jimage. However, + * if --limit-modules was used then archived class should be loaded. + */ + +package jdk.test; + +public class Main { + static final ClassLoader BOOT_LOADER = null; + static final ClassLoader PLATFORM_LOADER = ClassLoader.getPlatformClassLoader(); + static final ClassLoader SYS_LOADER = ClassLoader.getSystemClassLoader(); + + public static void main(String[] args) throws Exception { + boolean shouldLoad = false; + ClassLoader expectedLoader = SYS_LOADER; + + /* + * 3 Arguments are passed to this test: + * 1. testName: Name of the test being run. + * 2. className: Name of the class to load and instantiate. + * 3. shouldLoad: Either "true" or "false" to indicate whether the class should + * successfully load ("true" indicates --limit-modules was used.) + * The 4th argument is optional. It specifies the classloader. + */ + + assertTrue(args.length <= 4); + String testName = args[0]; + String className = args[1].replace('/', '.'); + String shouldLoadName = args[2]; // "true" or "false" + String loaderName = "SYS"; + if (args.length == 4) { + loaderName = args[3]; + } + + if (shouldLoadName.equals("true")) { + shouldLoad = true; + } else if (shouldLoadName.equals("false")) { + shouldLoad = false; + } else { + assertTrue(false); + } + + if (loaderName.equals("SYS")) { + expectedLoader = SYS_LOADER; + } else if (loaderName.equals("EXT")) { + expectedLoader = PLATFORM_LOADER; + } else if (loaderName.equals("BOOT")) { + expectedLoader = BOOT_LOADER; + } + + System.out.println(testName + ": class=" + className + " shouldLoad=" + + shouldLoadName + " by loader:" + expectedLoader); + + // Try to load the specified class with the default ClassLoader. + Class clazz = null; + try { + clazz = Class.forName(className); + } catch (ClassNotFoundException e) { + System.out.println(e); + } + + if (clazz != null) { + // class loaded + if (shouldLoad) { + // Make sure we got the expected defining ClassLoader + ClassLoader actualLoader = clazz.getClassLoader(); + if (actualLoader != expectedLoader) { + throw new RuntimeException(testName + " FAILED: " + clazz + " loaded by " + actualLoader + + ", expected " + expectedLoader); + } + // Make sure we got the right version of the class. toString() of an instance + // of the overridden version of the class should return "hi". + if (actualLoader == SYS_LOADER) { + String s = clazz.newInstance().toString(); + if (!s.equals("hi")) { + throw new RuntimeException(testName + " FAILED: toString() returned \"" + s + + "\" instead of \"hi\"" ); + } + } + System.out.println(testName + " PASSED: class loaded as expected."); + } else { + throw new RuntimeException(testName + " FAILED: class loaded, but should have failed to load."); + } + } else { + // class did not load + if (shouldLoad) { + throw new RuntimeException(testName + " FAILED: class failed to load."); + } else { + System.out.println(testName + " PASSED: ClassNotFoundException thrown as expected"); + } + } + } + + static void assertTrue(boolean expr) { + if (!expr) + throw new RuntimeException("assertion failed"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/sun/nio/cs/ext/MyClass.java 2019-07-24 08:27:38.497468679 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.nio.cs.ext; - -public class MyClass { - public String toString() { - return "hi"; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/src/sun/nio/cs/ext/MyClass.java 2019-07-24 08:27:38.221468689 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.nio.cs.ext; + +public class MyClass { + public String toString() { + return "hi"; + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/sun/nio/cs/ext1/MyClass.java 2019-07-24 08:27:38.889468666 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.nio.cs.ext1; - -public class MyClass { - public String toString() { - return "hi"; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/classpathtests/src/sun/nio/cs/ext1/MyClass.java 2019-07-24 08:27:38.561468677 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.nio.cs.ext1; + +public class MyClass { + public String toString() { + return "hi"; + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/AddModules.java 2019-07-24 08:27:39.241468654 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @compile ../../test-classes/Hello.java - * @run driver AddModules - * @summary sanity test the --add-modules option - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.process.OutputAnalyzer; - -public class AddModules { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String TEST_SRC = System.getProperty("test.src"); - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String MAIN_MODULE1 = "com.greetings"; - private static final String MAIN_MODULE2 = "com.hello"; - private static final String SUB_MODULE = "org.astro"; - - // the module main class - private static final String MAIN_CLASS1 = "com.greetings.Main"; - private static final String MAIN_CLASS2 = "com.hello.Main"; - private static final String APP_CLASS = "org.astro.World"; - - private static Path moduleDir = null; - private static Path subJar = null; - private static Path mainJar1 = null; - private static Path mainJar2 = null; - private static String appJar; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(SUB_MODULE), - MODS_DIR.resolve(SUB_MODULE), - null); - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(MAIN_MODULE1), - MODS_DIR.resolve(MAIN_MODULE1), - MODS_DIR.toString()); - - JarBuilder.compileModule(SRC_DIR.resolve(MAIN_MODULE2), - MODS_DIR.resolve(MAIN_MODULE2), - MODS_DIR.toString()); - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - subJar = moduleDir.resolve(SUB_MODULE + ".jar"); - String classes = MODS_DIR.resolve(SUB_MODULE).toString(); - JarBuilder.createModularJar(subJar.toString(), classes, null); - - mainJar1 = moduleDir.resolve(MAIN_MODULE1 + ".jar"); - classes = MODS_DIR.resolve(MAIN_MODULE1).toString(); - JarBuilder.createModularJar(mainJar1.toString(), classes, MAIN_CLASS1); - - mainJar2 = moduleDir.resolve(MAIN_MODULE2 + ".jar"); - classes = MODS_DIR.resolve(MAIN_MODULE2).toString(); - JarBuilder.createModularJar(mainJar2.toString(), classes, MAIN_CLASS2); - - } - - public static void main(String... args) throws Exception { - appJar = JarBuilder.getOrCreateHelloJar(); - // compile the modules and create the modular jar files - buildTestModule(); - String appClasses[] = {MAIN_CLASS1, MAIN_CLASS2, APP_CLASS}; - // create an archive with the classes in the modules built in the - // previous step - OutputAnalyzer output = TestCommon.createArchive( - appJar, appClasses, - "--module-path", moduleDir.toString(), - "--add-modules", - MAIN_MODULE1 + "," + MAIN_MODULE2); - TestCommon.checkDump(output); - String prefix[] = {"-Djava.class.path=" + appJar, "-Xlog:class+load=trace"}; - - // run the com.greetings module with the archive with the --module-path - // the same as the one during dump time. - // The classes should be loaded from the archive. - TestCommon.runWithModules(prefix, - null, // --upgrade-module-path - moduleDir.toString(), // --module-path - MAIN_MODULE1) // -m - .assertNormalExit(out -> { - out.shouldContain("[class,load] com.greetings.Main source: shared objects file") - .shouldContain("[class,load] org.astro.World source: shared objects file"); - }); - - // run the com.hello module with the archive with the --module-path - // the same as the one during dump time. - // The classes should be loaded from the archive. - TestCommon.runWithModules(prefix, - null, // --upgrade-module-path - moduleDir.toString(), // --module-path - MAIN_MODULE2) // -m - .assertNormalExit(out -> { - out.shouldContain("[class,load] com.hello.Main source: shared objects file") - .shouldContain("[class,load] org.astro.World source: shared objects file"); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/AddModules.java 2019-07-24 08:27:38.945468664 -0400 @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @compile ../../test-classes/Hello.java + * @run driver AddModules + * @summary sanity test the --add-modules option + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.process.OutputAnalyzer; + +public class AddModules { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String TEST_SRC = System.getProperty("test.src"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String MAIN_MODULE1 = "com.greetings"; + private static final String MAIN_MODULE2 = "com.hello"; + private static final String SUB_MODULE = "org.astro"; + + // the module main class + private static final String MAIN_CLASS1 = "com.greetings.Main"; + private static final String MAIN_CLASS2 = "com.hello.Main"; + private static final String APP_CLASS = "org.astro.World"; + + private static Path moduleDir = null; + private static Path subJar = null; + private static Path mainJar1 = null; + private static Path mainJar2 = null; + private static String appJar; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(SUB_MODULE), + MODS_DIR.resolve(SUB_MODULE), + null); + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(MAIN_MODULE1), + MODS_DIR.resolve(MAIN_MODULE1), + MODS_DIR.toString()); + + JarBuilder.compileModule(SRC_DIR.resolve(MAIN_MODULE2), + MODS_DIR.resolve(MAIN_MODULE2), + MODS_DIR.toString()); + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + subJar = moduleDir.resolve(SUB_MODULE + ".jar"); + String classes = MODS_DIR.resolve(SUB_MODULE).toString(); + JarBuilder.createModularJar(subJar.toString(), classes, null); + + mainJar1 = moduleDir.resolve(MAIN_MODULE1 + ".jar"); + classes = MODS_DIR.resolve(MAIN_MODULE1).toString(); + JarBuilder.createModularJar(mainJar1.toString(), classes, MAIN_CLASS1); + + mainJar2 = moduleDir.resolve(MAIN_MODULE2 + ".jar"); + classes = MODS_DIR.resolve(MAIN_MODULE2).toString(); + JarBuilder.createModularJar(mainJar2.toString(), classes, MAIN_CLASS2); + + } + + public static void main(String... args) throws Exception { + appJar = JarBuilder.getOrCreateHelloJar(); + // compile the modules and create the modular jar files + buildTestModule(); + String appClasses[] = {MAIN_CLASS1, MAIN_CLASS2, APP_CLASS}; + // create an archive with the classes in the modules built in the + // previous step + OutputAnalyzer output = TestCommon.createArchive( + appJar, appClasses, + "--module-path", moduleDir.toString(), + "--add-modules", + MAIN_MODULE1 + "," + MAIN_MODULE2); + TestCommon.checkDump(output); + String prefix[] = {"-Djava.class.path=" + appJar, "-Xlog:class+load=trace"}; + + // run the com.greetings module with the archive with the --module-path + // the same as the one during dump time. + // The classes should be loaded from the archive. + TestCommon.runWithModules(prefix, + null, // --upgrade-module-path + moduleDir.toString(), // --module-path + MAIN_MODULE1) // -m + .assertNormalExit(out -> { + out.shouldContain("[class,load] com.greetings.Main source: shared objects file") + .shouldContain("[class,load] org.astro.World source: shared objects file"); + }); + + // run the com.hello module with the archive with the --module-path + // the same as the one during dump time. + // The classes should be loaded from the archive. + TestCommon.runWithModules(prefix, + null, // --upgrade-module-path + moduleDir.toString(), // --module-path + MAIN_MODULE2) // -m + .assertNormalExit(out -> { + out.shouldContain("[class,load] com.hello.Main source: shared objects file") + .shouldContain("[class,load] org.astro.World source: shared objects file"); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/AddOpens.java 2019-07-24 08:27:39.629468640 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @run driver AddOpens - * @summary sanity test the --add-opens option - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.process.OutputAnalyzer; - -public class AddOpens { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String TEST_SRC = System.getProperty("test.src"); - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String TEST_MODULE1 = "com.simple"; - - // the module main class - private static final String MAIN_CLASS = "com.simple.Main"; - - private static Path moduleDir = null; - private static Path moduleDir2 = null; - private static Path destJar = null; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), - MODS_DIR.resolve(TEST_MODULE1), - MODS_DIR.toString()); - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); - - Path srcJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); - destJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); - String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); - JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); - Files.copy(srcJar, destJar); - - } - - public static void main(String... args) throws Exception { - // compile the modules and create the modular jar files - buildTestModule(); - String appClasses[] = {MAIN_CLASS}; - // create an archive with both -cp and --module-path in the command line. - // Only the class in the modular jar in the --module-path will be archived; - // the class in the modular jar in the -cp won't be archived. - OutputAnalyzer output = TestCommon.createArchive( - destJar.toString(), appClasses, - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1); - TestCommon.checkDump(output); - - // run with the archive using the same command line as in dump time - // plus the "--add-opens java.base/java.lang=com.simple" option. - // The main class should be loaded from the archive. - // The setaccessible(true) on the ClassLoader.defineClass method should - // be successful. - TestCommon.run( "-Xlog:class+load=trace", - "-cp", destJar.toString(), - "--add-opens", "java.base/java.lang=" + TEST_MODULE1, - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1, "with_add_opens") - .assertNormalExit( - "[class,load] com.simple.Main source: shared objects file", - "method.setAccessible succeeded!"); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/AddOpens.java 2019-07-24 08:27:39.349468650 -0400 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @run driver AddOpens + * @summary sanity test the --add-opens option + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.process.OutputAnalyzer; + +public class AddOpens { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String TEST_SRC = System.getProperty("test.src"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String TEST_MODULE1 = "com.simple"; + + // the module main class + private static final String MAIN_CLASS = "com.simple.Main"; + + private static Path moduleDir = null; + private static Path moduleDir2 = null; + private static Path destJar = null; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), + MODS_DIR.resolve(TEST_MODULE1), + MODS_DIR.toString()); + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); + + Path srcJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); + destJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); + String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); + JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); + Files.copy(srcJar, destJar); + + } + + public static void main(String... args) throws Exception { + // compile the modules and create the modular jar files + buildTestModule(); + String appClasses[] = {MAIN_CLASS}; + // create an archive with both -cp and --module-path in the command line. + // Only the class in the modular jar in the --module-path will be archived; + // the class in the modular jar in the -cp won't be archived. + OutputAnalyzer output = TestCommon.createArchive( + destJar.toString(), appClasses, + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1); + TestCommon.checkDump(output); + + // run with the archive using the same command line as in dump time + // plus the "--add-opens java.base/java.lang=com.simple" option. + // The main class should be loaded from the archive. + // The setaccessible(true) on the ClassLoader.defineClass method should + // be successful. + TestCommon.run( "-Xlog:class+load=trace", + "-cp", destJar.toString(), + "--add-opens", "java.base/java.lang=" + TEST_MODULE1, + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1, "with_add_opens") + .assertNormalExit( + "[class,load] com.simple.Main source: shared objects file", + "method.setAccessible succeeded!"); + + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/AddReads.java 2019-07-24 08:27:40.057468625 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @run driver AddReads - * @summary sanity test the --add-reads option - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.Asserts; - -public class AddReads { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String TEST_SRC = System.getProperty("test.src"); - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String MAIN_MODULE = "com.norequires"; - private static final String SUB_MODULE = "org.astro"; - - // the module main class - private static final String MAIN_CLASS = "com.norequires.Main"; - private static final String APP_CLASS = "org.astro.World"; - - private static Path moduleDir = null; - private static Path subJar = null; - private static Path mainJar = null; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(SUB_MODULE), - MODS_DIR.resolve(SUB_MODULE), - null); - - Asserts.assertTrue(CompilerUtils - .compile(SRC_DIR.resolve(MAIN_MODULE), - MODS_DIR.resolve(MAIN_MODULE), - "-cp", MODS_DIR.resolve(SUB_MODULE).toString(), - "--add-reads", "com.norequires=ALL-UNNAMED")); - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - subJar = moduleDir.resolve(SUB_MODULE + ".jar"); - String classes = MODS_DIR.resolve(SUB_MODULE).toString(); - JarBuilder.createModularJar(subJar.toString(), classes, null); - - mainJar = moduleDir.resolve(MAIN_MODULE + ".jar"); - classes = MODS_DIR.resolve(MAIN_MODULE).toString(); - JarBuilder.createModularJar(mainJar.toString(), classes, MAIN_CLASS); - } - - public static void main(String... args) throws Exception { - // compile the modules and create the modular jar files - buildTestModule(); - String appClasses[] = {MAIN_CLASS, APP_CLASS}; - // create an archive with the classes in the modules built in the - // previous step - OutputAnalyzer output = TestCommon.createArchive( - null, appClasses, - "--module-path", moduleDir.toString(), - "--add-modules", SUB_MODULE, - "--add-reads", "com.norequires=org.astro", - "-m", MAIN_MODULE); - TestCommon.checkDump(output); - String prefix[] = {"-Djava.class.path=", "-Xlog:class+load=trace", - "--add-modules", SUB_MODULE, - "--add-reads", "com.norequires=org.astro"}; - - // run the com.norequires module with the archive with the same args - // used during dump time. - // The classes should be loaded from the archive. - TestCommon.runWithModules(prefix, - null, // --upgrade-module-path - moduleDir.toString(), // --module-path - MAIN_MODULE) // -m - .assertNormalExit(out -> { - out.shouldContain("[class,load] com.norequires.Main source: shared objects file") - .shouldContain("[class,load] org.astro.World source: shared objects file"); - }); - - // create an archive with -cp pointing to the jar file containing the - // org.astro module and --module-path pointing to the main module - output = TestCommon.createArchive( - subJar.toString(), appClasses, - "--module-path", moduleDir.toString(), - "--add-modules", SUB_MODULE, - "--add-reads", "com.norequires=org.astro", - "-m", MAIN_MODULE); - TestCommon.checkDump(output); - // run the com.norequires module with the archive with the sub-module - // in the -cp and with -add-reads=com.norequires=ALL-UNNAMED - // The main class should be loaded from the archive. - // The org.astro.World should be loaded from the jar. - String prefix2[] = {"-cp", subJar.toString(), "-Xlog:class+load=trace", - "--add-reads", "com.norequires=ALL-UNNAMED"}; - TestCommon.runWithModules(prefix2, - null, // --upgrade-module-path - moduleDir.toString(), // --module-path - MAIN_MODULE) // -m - .assertNormalExit(out -> { - out.shouldContain("[class,load] com.norequires.Main source: shared objects file") - .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); - }); - - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/AddReads.java 2019-07-24 08:27:39.733468636 -0400 @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @run driver AddReads + * @summary sanity test the --add-reads option + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Asserts; + +public class AddReads { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String TEST_SRC = System.getProperty("test.src"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String MAIN_MODULE = "com.norequires"; + private static final String SUB_MODULE = "org.astro"; + + // the module main class + private static final String MAIN_CLASS = "com.norequires.Main"; + private static final String APP_CLASS = "org.astro.World"; + + private static Path moduleDir = null; + private static Path subJar = null; + private static Path mainJar = null; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(SUB_MODULE), + MODS_DIR.resolve(SUB_MODULE), + null); + + Asserts.assertTrue(CompilerUtils + .compile(SRC_DIR.resolve(MAIN_MODULE), + MODS_DIR.resolve(MAIN_MODULE), + "-cp", MODS_DIR.resolve(SUB_MODULE).toString(), + "--add-reads", "com.norequires=ALL-UNNAMED")); + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + subJar = moduleDir.resolve(SUB_MODULE + ".jar"); + String classes = MODS_DIR.resolve(SUB_MODULE).toString(); + JarBuilder.createModularJar(subJar.toString(), classes, null); + + mainJar = moduleDir.resolve(MAIN_MODULE + ".jar"); + classes = MODS_DIR.resolve(MAIN_MODULE).toString(); + JarBuilder.createModularJar(mainJar.toString(), classes, MAIN_CLASS); + } + + public static void main(String... args) throws Exception { + // compile the modules and create the modular jar files + buildTestModule(); + String appClasses[] = {MAIN_CLASS, APP_CLASS}; + // create an archive with the classes in the modules built in the + // previous step + OutputAnalyzer output = TestCommon.createArchive( + null, appClasses, + "--module-path", moduleDir.toString(), + "--add-modules", SUB_MODULE, + "--add-reads", "com.norequires=org.astro", + "-m", MAIN_MODULE); + TestCommon.checkDump(output); + String prefix[] = {"-Djava.class.path=", "-Xlog:class+load=trace", + "--add-modules", SUB_MODULE, + "--add-reads", "com.norequires=org.astro"}; + + // run the com.norequires module with the archive with the same args + // used during dump time. + // The classes should be loaded from the archive. + TestCommon.runWithModules(prefix, + null, // --upgrade-module-path + moduleDir.toString(), // --module-path + MAIN_MODULE) // -m + .assertNormalExit(out -> { + out.shouldContain("[class,load] com.norequires.Main source: shared objects file") + .shouldContain("[class,load] org.astro.World source: shared objects file"); + }); + + // create an archive with -cp pointing to the jar file containing the + // org.astro module and --module-path pointing to the main module + output = TestCommon.createArchive( + subJar.toString(), appClasses, + "--module-path", moduleDir.toString(), + "--add-modules", SUB_MODULE, + "--add-reads", "com.norequires=org.astro", + "-m", MAIN_MODULE); + TestCommon.checkDump(output); + // run the com.norequires module with the archive with the sub-module + // in the -cp and with -add-reads=com.norequires=ALL-UNNAMED + // The main class should be loaded from the archive. + // The org.astro.World should be loaded from the jar. + String prefix2[] = {"-cp", subJar.toString(), "-Xlog:class+load=trace", + "--add-reads", "com.norequires=ALL-UNNAMED"}; + TestCommon.runWithModules(prefix2, + null, // --upgrade-module-path + moduleDir.toString(), // --module-path + MAIN_MODULE) // -m + .assertNormalExit(out -> { + out.shouldContain("[class,load] com.norequires.Main source: shared objects file") + .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); + }); + + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/ExportModule.java 2019-07-24 08:27:40.405468613 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,161 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @run driver ExportModule - * @summary Tests involve exporting a module from the module path to a jar in the -cp. - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.compiler.CompilerUtils; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.Asserts; - -public class ExportModule { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String TEST_SRC = System.getProperty("test.src"); - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String TEST_MODULE1 = "com.greetings"; - private static final String TEST_MODULE2 = "org.astro"; - - // unnamed module package name - private static final String PKG_NAME = "com.nomodule"; - - // the module main class - private static final String MAIN_CLASS = "com.greetings.Main"; - private static final String APP_CLASS = "org.astro.World"; - - // unnamed module main class - private static final String UNNAMED_MAIN = "com.nomodule.Main"; - - private static Path moduleDir = null; - private static Path moduleDir2 = null; - private static Path appJar = null; - private static Path appJar2 = null; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE2), - MODS_DIR.resolve(TEST_MODULE2), - null); - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), - MODS_DIR.resolve(TEST_MODULE1), - MODS_DIR.toString()); - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - Path jar = moduleDir.resolve(TEST_MODULE2 + ".jar"); - String classes = MODS_DIR.resolve(TEST_MODULE2).toString(); - JarBuilder.createModularJar(jar.toString(), classes, null); - - moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); - appJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); - classes = MODS_DIR.resolve(TEST_MODULE1).toString(); - JarBuilder.createModularJar(appJar.toString(), classes, MAIN_CLASS); - - // build a non-modular jar containing the main class which - // requires the org.astro package - boolean compiled - = CompilerUtils.compile(SRC_DIR.resolve(PKG_NAME), - MODS_DIR.resolve(PKG_NAME), - "--module-path", MODS_DIR.toString(), - "--add-modules", TEST_MODULE2, - "--add-exports", "org.astro/org.astro=ALL-UNNAMED"); - Asserts.assertTrue(compiled, "test package did not compile"); - - appJar2 = moduleDir2.resolve(PKG_NAME + ".jar"); - classes = MODS_DIR.resolve(PKG_NAME).toString(); - JarBuilder.createModularJar(appJar2.toString(), classes, null); - } - - public static void main(String... args) throws Exception { - // compile the modules and create the modular jar files - buildTestModule(); - String appClasses[] = {MAIN_CLASS, APP_CLASS}; - // create an archive with the class in the org.astro module built in the - // previous step and the main class from the modular jar in the -cp - // note: the main class is in the modular jar in the -cp which requires - // the module in the --module-path - OutputAnalyzer output = TestCommon.createArchive( - appJar.toString(), appClasses, - "--module-path", moduleDir.toString(), - "--add-modules", TEST_MODULE2, MAIN_CLASS); - TestCommon.checkDump(output); - - // run it using the archive - // both the main class and the class from the org.astro module should - // be loaded from the archive - TestCommon.run("-Xlog:class+load=trace", - "-cp", appJar.toString(), - "--module-path", moduleDir.toString(), - "--add-modules", TEST_MODULE2, MAIN_CLASS) - .assertNormalExit( - "[class,load] org.astro.World source: shared objects file", - "[class,load] com.greetings.Main source: shared objects file"); - - String appClasses2[] = {UNNAMED_MAIN, APP_CLASS}; - // create an archive with the main class from a non-modular jar in the - // -cp and the class from the org.astro module - // note: the org.astro package needs to be exported to "ALL-UNNAMED" - // module since the jar in the -cp is a non-modular jar and thus it is - // unnmaed. - output = TestCommon.createArchive( - appJar2.toString(), appClasses2, - "--module-path", moduleDir.toString(), - "--add-modules", TEST_MODULE2, - "--add-exports", "org.astro/org.astro=ALL-UNNAMED", - UNNAMED_MAIN); - TestCommon.checkDump(output); - - // both the main class and the class from the org.astro module should - // be loaded from the archive - TestCommon.run("-Xlog:class+load=trace", - "-cp", appJar2.toString(), - "--module-path", moduleDir.toString(), - "--add-modules", TEST_MODULE2, - "--add-exports", "org.astro/org.astro=ALL-UNNAMED", - UNNAMED_MAIN) - .assertNormalExit( - "[class,load] org.astro.World source: shared objects file", - "[class,load] com.nomodule.Main source: shared objects file"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/ExportModule.java 2019-07-24 08:27:40.137468622 -0400 @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @run driver ExportModule + * @summary Tests involve exporting a module from the module path to a jar in the -cp. + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.compiler.CompilerUtils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Asserts; + +public class ExportModule { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String TEST_SRC = System.getProperty("test.src"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String TEST_MODULE1 = "com.greetings"; + private static final String TEST_MODULE2 = "org.astro"; + + // unnamed module package name + private static final String PKG_NAME = "com.nomodule"; + + // the module main class + private static final String MAIN_CLASS = "com.greetings.Main"; + private static final String APP_CLASS = "org.astro.World"; + + // unnamed module main class + private static final String UNNAMED_MAIN = "com.nomodule.Main"; + + private static Path moduleDir = null; + private static Path moduleDir2 = null; + private static Path appJar = null; + private static Path appJar2 = null; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE2), + MODS_DIR.resolve(TEST_MODULE2), + null); + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), + MODS_DIR.resolve(TEST_MODULE1), + MODS_DIR.toString()); + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + Path jar = moduleDir.resolve(TEST_MODULE2 + ".jar"); + String classes = MODS_DIR.resolve(TEST_MODULE2).toString(); + JarBuilder.createModularJar(jar.toString(), classes, null); + + moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); + appJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); + classes = MODS_DIR.resolve(TEST_MODULE1).toString(); + JarBuilder.createModularJar(appJar.toString(), classes, MAIN_CLASS); + + // build a non-modular jar containing the main class which + // requires the org.astro package + boolean compiled + = CompilerUtils.compile(SRC_DIR.resolve(PKG_NAME), + MODS_DIR.resolve(PKG_NAME), + "--module-path", MODS_DIR.toString(), + "--add-modules", TEST_MODULE2, + "--add-exports", "org.astro/org.astro=ALL-UNNAMED"); + Asserts.assertTrue(compiled, "test package did not compile"); + + appJar2 = moduleDir2.resolve(PKG_NAME + ".jar"); + classes = MODS_DIR.resolve(PKG_NAME).toString(); + JarBuilder.createModularJar(appJar2.toString(), classes, null); + } + + public static void main(String... args) throws Exception { + // compile the modules and create the modular jar files + buildTestModule(); + String appClasses[] = {MAIN_CLASS, APP_CLASS}; + // create an archive with the class in the org.astro module built in the + // previous step and the main class from the modular jar in the -cp + // note: the main class is in the modular jar in the -cp which requires + // the module in the --module-path + OutputAnalyzer output = TestCommon.createArchive( + appJar.toString(), appClasses, + "--module-path", moduleDir.toString(), + "--add-modules", TEST_MODULE2, MAIN_CLASS); + TestCommon.checkDump(output); + + // run it using the archive + // both the main class and the class from the org.astro module should + // be loaded from the archive + TestCommon.run("-Xlog:class+load=trace", + "-cp", appJar.toString(), + "--module-path", moduleDir.toString(), + "--add-modules", TEST_MODULE2, MAIN_CLASS) + .assertNormalExit( + "[class,load] org.astro.World source: shared objects file", + "[class,load] com.greetings.Main source: shared objects file"); + + String appClasses2[] = {UNNAMED_MAIN, APP_CLASS}; + // create an archive with the main class from a non-modular jar in the + // -cp and the class from the org.astro module + // note: the org.astro package needs to be exported to "ALL-UNNAMED" + // module since the jar in the -cp is a non-modular jar and thus it is + // unnmaed. + output = TestCommon.createArchive( + appJar2.toString(), appClasses2, + "--module-path", moduleDir.toString(), + "--add-modules", TEST_MODULE2, + "--add-exports", "org.astro/org.astro=ALL-UNNAMED", + UNNAMED_MAIN); + TestCommon.checkDump(output); + + // both the main class and the class from the org.astro module should + // be loaded from the archive + TestCommon.run("-Xlog:class+load=trace", + "-cp", appJar2.toString(), + "--module-path", moduleDir.toString(), + "--add-modules", TEST_MODULE2, + "--add-exports", "org.astro/org.astro=ALL-UNNAMED", + UNNAMED_MAIN) + .assertNormalExit( + "[class,load] org.astro.World source: shared objects file", + "[class,load] com.nomodule.Main source: shared objects file"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/JvmtiAddPath.java 2019-07-24 08:27:40.793468599 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary JvmtiEnv::AddToBootstrapClassLoaderSearch and JvmtiEnv::AddToSystemClassLoaderSearch should disable AppCDS - * @requires vm.cds - * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @compile ../../test-classes/JvmtiApp.java - * @run driver/timeout=240 JvmtiAddPath - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class JvmtiAddPath { - static String use_whitebox_jar; - static String[] no_extra_matches = {}; - static String[] check_appcds_enabled = { - "[class,load] ExtraClass source: shared object" - }; - static String[] check_appcds_disabled = { - "[class,load] ExtraClass source: file:" - }; - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String TEST_SRC = System.getProperty("test.src"); - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String TEST_MODULE1 = "com.simple"; - - // the module main class - private static final String MAIN_CLASS = "com.simple.Main"; - - private static Path moduleDir = null; - private static Path mainJar = null; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), - MODS_DIR.resolve(TEST_MODULE1), - MODS_DIR.toString()); - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - - mainJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); - String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); - JarBuilder.createModularJar(mainJar.toString(), classes, MAIN_CLASS); - } - - static void run(String cp, String... args) throws Exception { - run(no_extra_matches, cp, args); - } - - static void run(String[] extra_matches, String cp, String... args) throws Exception { - String[] opts = {"-cp", cp, "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", use_whitebox_jar}; - opts = TestCommon.concat(opts, args); - TestCommon.run(opts).assertNormalExit(extra_matches); - } - - public static void main(String[] args) throws Exception { - buildTestModule(); - JarBuilder.build("jvmti_app", "JvmtiApp", "ExtraClass"); - JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); - - // In all the test cases below, appJar does not contain Hello.class. Instead, we - // append JAR file(s) that contain Hello.class to the boot classpath, the app - // classpath, or both, and verify that Hello.class is loaded by the expected ClassLoader. - String appJar = TestCommon.getTestJar("jvmti_app.jar"); // contains JvmtiApp.class - String addappJar = mainJar.toString(); // contains Main.class - String addbootJar = mainJar.toString(); // contains Main.class - String twoAppJars = appJar + File.pathSeparator + addappJar; - String modulePath = "--module-path=" + moduleDir.toString(); - String wbJar = TestCommon.getTestJar("WhiteBox.jar"); - use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - - OutputAnalyzer output = TestCommon.createArchive( - appJar, - TestCommon.list("JvmtiApp", "ExtraClass", MAIN_CLASS), - use_whitebox_jar, - modulePath); - TestCommon.checkDump(output); - - System.out.println("Test case 1: not adding module path - Hello.class should not be found"); - run(check_appcds_enabled, appJar, - "-Xlog:class+load", "JvmtiApp", "noadd", MAIN_CLASS); // appcds should be enabled - - System.out.println("Test case 2: add to boot classpath only - should find Hello.class in boot loader"); - String[] toCheck = TestCommon.isDynamicArchive() ? check_appcds_enabled : - check_appcds_disabled; - run(toCheck, appJar, - "-Xlog:class+load=trace", - modulePath, - "JvmtiApp", "bootonly", addbootJar, MAIN_CLASS); // appcds should be disabled - - System.out.println("Test case 3: add to app classpath only - should find Hello.class in app loader"); - run(appJar, modulePath, - "JvmtiApp", "apponly", addappJar, MAIN_CLASS); - - System.out.println("Test case 4: add to boot and app paths - should find Hello.class in boot loader"); - run(appJar, modulePath, - "JvmtiApp", "appandboot", addbootJar, addappJar, MAIN_CLASS); - - System.out.println("Test case 5: add to app using -cp, but add to boot using JVMTI - should find Hello.class in boot loader"); - run(appJar, modulePath, - "JvmtiApp", "bootonly", addappJar, MAIN_CLASS); - - System.out.println("Test case 6: add to app using AppCDS, but add to boot using JVMTI - should find Hello.class in boot loader"); - output = TestCommon.createArchive( - appJar, TestCommon.list("JvmtiApp", "ExtraClass"), - use_whitebox_jar, - modulePath); - TestCommon.checkDump(output); - run(twoAppJars, modulePath, - "JvmtiApp", "bootonly", addappJar, MAIN_CLASS); - - System.out.println("Test case 7: add to app using AppCDS, no JVMTI calls - should find Hello.class in app loader"); - run(twoAppJars, modulePath, - "JvmtiApp", "noadd-appcds", MAIN_CLASS); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/JvmtiAddPath.java 2019-07-24 08:27:40.489468610 -0400 @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary JvmtiEnv::AddToBootstrapClassLoaderSearch and JvmtiEnv::AddToSystemClassLoaderSearch should disable AppCDS + * @requires vm.cds + * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @compile ../../test-classes/JvmtiApp.java + * @run driver/timeout=240 JvmtiAddPath + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class JvmtiAddPath { + static String use_whitebox_jar; + static String[] no_extra_matches = {}; + static String[] check_appcds_enabled = { + "[class,load] ExtraClass source: shared object" + }; + static String[] check_appcds_disabled = { + "[class,load] ExtraClass source: file:" + }; + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String TEST_SRC = System.getProperty("test.src"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String TEST_MODULE1 = "com.simple"; + + // the module main class + private static final String MAIN_CLASS = "com.simple.Main"; + + private static Path moduleDir = null; + private static Path mainJar = null; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), + MODS_DIR.resolve(TEST_MODULE1), + MODS_DIR.toString()); + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + + mainJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); + String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); + JarBuilder.createModularJar(mainJar.toString(), classes, MAIN_CLASS); + } + + static void run(String cp, String... args) throws Exception { + run(no_extra_matches, cp, args); + } + + static void run(String[] extra_matches, String cp, String... args) throws Exception { + String[] opts = {"-cp", cp, "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", use_whitebox_jar}; + opts = TestCommon.concat(opts, args); + TestCommon.run(opts).assertNormalExit(extra_matches); + } + + public static void main(String[] args) throws Exception { + buildTestModule(); + JarBuilder.build("jvmti_app", "JvmtiApp", "ExtraClass"); + JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox"); + + // In all the test cases below, appJar does not contain Hello.class. Instead, we + // append JAR file(s) that contain Hello.class to the boot classpath, the app + // classpath, or both, and verify that Hello.class is loaded by the expected ClassLoader. + String appJar = TestCommon.getTestJar("jvmti_app.jar"); // contains JvmtiApp.class + String addappJar = mainJar.toString(); // contains Main.class + String addbootJar = mainJar.toString(); // contains Main.class + String twoAppJars = appJar + File.pathSeparator + addappJar; + String modulePath = "--module-path=" + moduleDir.toString(); + String wbJar = TestCommon.getTestJar("WhiteBox.jar"); + use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + + OutputAnalyzer output = TestCommon.createArchive( + appJar, + TestCommon.list("JvmtiApp", "ExtraClass", MAIN_CLASS), + use_whitebox_jar, + modulePath); + TestCommon.checkDump(output); + + System.out.println("Test case 1: not adding module path - Hello.class should not be found"); + run(check_appcds_enabled, appJar, + "-Xlog:class+load", "JvmtiApp", "noadd", MAIN_CLASS); // appcds should be enabled + + System.out.println("Test case 2: add to boot classpath only - should find Hello.class in boot loader"); + String[] toCheck = TestCommon.isDynamicArchive() ? check_appcds_enabled : + check_appcds_disabled; + run(toCheck, appJar, + "-Xlog:class+load=trace", + modulePath, + "JvmtiApp", "bootonly", addbootJar, MAIN_CLASS); // appcds should be disabled + + System.out.println("Test case 3: add to app classpath only - should find Hello.class in app loader"); + run(appJar, modulePath, + "JvmtiApp", "apponly", addappJar, MAIN_CLASS); + + System.out.println("Test case 4: add to boot and app paths - should find Hello.class in boot loader"); + run(appJar, modulePath, + "JvmtiApp", "appandboot", addbootJar, addappJar, MAIN_CLASS); + + System.out.println("Test case 5: add to app using -cp, but add to boot using JVMTI - should find Hello.class in boot loader"); + run(appJar, modulePath, + "JvmtiApp", "bootonly", addappJar, MAIN_CLASS); + + System.out.println("Test case 6: add to app using AppCDS, but add to boot using JVMTI - should find Hello.class in boot loader"); + output = TestCommon.createArchive( + appJar, TestCommon.list("JvmtiApp", "ExtraClass"), + use_whitebox_jar, + modulePath); + TestCommon.checkDump(output); + run(twoAppJars, modulePath, + "JvmtiApp", "bootonly", addappJar, MAIN_CLASS); + + System.out.println("Test case 7: add to app using AppCDS, no JVMTI calls - should find Hello.class in app loader"); + run(twoAppJars, modulePath, + "JvmtiApp", "noadd-appcds", MAIN_CLASS); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/MainModuleOnly.java 2019-07-24 08:27:41.169468586 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @run main/othervm MainModuleOnly - * @summary Test some scenarios with a main modular jar specified in the --module-path and -cp options in the command line. - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; - -import jdk.test.lib.cds.CDSTestUtils.Result; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.Platform; - -public class MainModuleOnly { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String TEST_SRC = System.getProperty("test.src"); - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String TEST_MODULE1 = "com.simple"; - - // the module main class - private static final String MAIN_CLASS = "com.simple.Main"; - - private static Path moduleDir = null; - private static Path moduleDir2 = null; - private static Path destJar = null; - - private static final String jarFileError = "A jar file is not the one used while building the shared archive file:"; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), - MODS_DIR.resolve(TEST_MODULE1), - MODS_DIR.toString()); - - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); - - Path srcJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); - destJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); - String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); - JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); - Files.copy(srcJar, destJar); - - } - - public static void main(String... args) throws Exception { - // compile the modules and create the modular jar files - buildTestModule(); - String appClasses[] = {MAIN_CLASS}; - // create an archive with both -cp and --module-path in the command line. - // Only the class in the modular jar in the --module-path will be archived; - // the class in the modular jar in the -cp won't be archived. - OutputAnalyzer output = TestCommon.createArchive( - destJar.toString(), appClasses, - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1); - TestCommon.checkDump(output); - - // run with the archive using the same command line as in dump time. - // The main class should be loaded from the archive. - TestCommon.run("-Xlog:class+load=trace", - "-cp", destJar.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertNormalExit("[class,load] com.simple.Main source: shared objects file"); - - // run with the archive with the main class name inserted before the -m. - // The main class name will be picked up before the module name. So the - // main class should be loaded from the jar in the -cp. - TestCommon.run("-Xlog:class+load=trace", - "-cp", destJar.toString(), - "--module-path", moduleDir.toString(), - MAIN_CLASS, "-m", TEST_MODULE1) - .assertNormalExit(out -> - out.shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar")); - - // run with the archive with exploded module. Since during dump time, we - // only archive classes from the modular jar in the --module-path, the - // main class should be loaded from the exploded module directory. - TestCommon.run("-Xlog:class+load=trace", - "-cp", destJar.toString(), - "--module-path", MODS_DIR.toString(), - "-m", TEST_MODULE1 + "/" + MAIN_CLASS) - .assertNormalExit(out -> { - out.shouldMatch(".class.load. com.simple.Main source:.*com.simple") - .shouldContain(MODS_DIR.toString()); - }); - - // run with the archive with the --upgrade-module-path option. - // CDS will be disabled with this options and the main class will be - // loaded from the modular jar. - TestCommon.run("-Xlog:class+load=trace", - "-cp", destJar.toString(), - "--upgrade-module-path", moduleDir.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch("CDS is disabled when the.*option is specified") - .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); - }); - // run with the archive with the --limit-modules option. - // CDS will be disabled with this options and the main class will be - // loaded from the modular jar. - TestCommon.run("-Xlog:class+load=trace", - "-cp", destJar.toString(), - "--limit-modules", "java.base," + TEST_MODULE1, - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch("CDS is disabled when the.*option is specified") - .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); - }); - // run with the archive with the --patch-module option. - // CDS will be disabled with this options and the main class will be - // loaded from the modular jar. - TestCommon.run("-Xlog:class+load=trace", - "-cp", destJar.toString(), - "--patch-module", TEST_MODULE1 + "=" + MODS_DIR.toString(), - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1) - .assertSilentlyDisabledCDS(out -> { - out.shouldHaveExitValue(0) - .shouldMatch("CDS is disabled when the.*option is specified") - .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); - }); - // modify the timestamp of the jar file - (new File(destJar.toString())).setLastModified(System.currentTimeMillis() + 2000); - // run with the archive and the jar with modified timestamp. - // It should fail due to timestamp of the jar doesn't match the one - // used during dump time. - Result res = TestCommon.run("-cp", destJar.toString(), - "-Xlog:cds", - "--module-path", moduleDir.toString(), - "-m", TEST_MODULE1); - res.assertAbnormalExit(jarFileError); - // create an archive with a non-empty directory in the --module-path. - // The dumping process will exit with an error due to non-empty directory - // in the --module-path. - String mainModule = TEST_MODULE1; - if (TestCommon.isDynamicArchive()) { - mainModule += "/" + MAIN_CLASS; - } - output = TestCommon.createArchive(destJar.toString(), appClasses, - "--module-path", MODS_DIR.toString(), - "-m", mainModule); - output.shouldHaveExitValue(1) - .shouldMatch("Error: non-empty directory.*com.simple"); - - // test module path with very long length - // - // This test can't be run on the windows platform due to an existing - // issue in ClassLoader::get_canonical_path() (JDK-8190737). - if (Platform.isWindows()) { - System.out.println("Long module path test cannot be tested on the Windows platform."); - return; - } - Path longDir = USER_DIR; - int pathLen = longDir.toString().length(); - int PATH_LEN = 2034; - int MAX_DIR_LEN = 250; - while (pathLen < PATH_LEN) { - int remaining = PATH_LEN - pathLen; - int subPathLen = remaining > MAX_DIR_LEN ? MAX_DIR_LEN : remaining; - char[] chars = new char[subPathLen]; - Arrays.fill(chars, 'x'); - String subPath = new String(chars); - longDir = Paths.get(longDir.toString(), subPath); - pathLen = longDir.toString().length(); - } - File longDirFile = new File(longDir.toString()); - try { - longDirFile.mkdirs(); - } catch (Exception e) { - throw e; - } - Path longDirJar = longDir.resolve(TEST_MODULE1 + ".jar"); - // IOException results from the Files.copy() call on platform - // such as MacOS X. Test can't be proceeded further with the - // exception. - try { - Files.copy(destJar, longDirJar); - } catch (java.io.IOException ioe) { - System.out.println("Caught IOException from Files.copy(). Cannot continue."); - return; - } - output = TestCommon.createArchive(destJar.toString(), appClasses, - "-Xlog:exceptions=trace", - "--module-path", longDirJar.toString(), - "-m", TEST_MODULE1); - if (output.getExitValue() != 0) { - output.shouldMatch("os::stat error.*CDS dump aborted"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/MainModuleOnly.java 2019-07-24 08:27:40.893468596 -0400 @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @run main/othervm MainModuleOnly + * @summary Test some scenarios with a main modular jar specified in the --module-path and -cp options in the command line. + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; + +import jdk.test.lib.cds.CDSTestUtils.Result; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Platform; + +public class MainModuleOnly { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String TEST_SRC = System.getProperty("test.src"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String TEST_MODULE1 = "com.simple"; + + // the module main class + private static final String MAIN_CLASS = "com.simple.Main"; + + private static Path moduleDir = null; + private static Path moduleDir2 = null; + private static Path destJar = null; + + private static final String jarFileError = "A jar file is not the one used while building the shared archive file:"; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(TEST_MODULE1), + MODS_DIR.resolve(TEST_MODULE1), + MODS_DIR.toString()); + + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); + + Path srcJar = moduleDir.resolve(TEST_MODULE1 + ".jar"); + destJar = moduleDir2.resolve(TEST_MODULE1 + ".jar"); + String classes = MODS_DIR.resolve(TEST_MODULE1).toString(); + JarBuilder.createModularJar(srcJar.toString(), classes, MAIN_CLASS); + Files.copy(srcJar, destJar); + + } + + public static void main(String... args) throws Exception { + // compile the modules and create the modular jar files + buildTestModule(); + String appClasses[] = {MAIN_CLASS}; + // create an archive with both -cp and --module-path in the command line. + // Only the class in the modular jar in the --module-path will be archived; + // the class in the modular jar in the -cp won't be archived. + OutputAnalyzer output = TestCommon.createArchive( + destJar.toString(), appClasses, + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1); + TestCommon.checkDump(output); + + // run with the archive using the same command line as in dump time. + // The main class should be loaded from the archive. + TestCommon.run("-Xlog:class+load=trace", + "-cp", destJar.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertNormalExit("[class,load] com.simple.Main source: shared objects file"); + + // run with the archive with the main class name inserted before the -m. + // The main class name will be picked up before the module name. So the + // main class should be loaded from the jar in the -cp. + TestCommon.run("-Xlog:class+load=trace", + "-cp", destJar.toString(), + "--module-path", moduleDir.toString(), + MAIN_CLASS, "-m", TEST_MODULE1) + .assertNormalExit(out -> + out.shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar")); + + // run with the archive with exploded module. Since during dump time, we + // only archive classes from the modular jar in the --module-path, the + // main class should be loaded from the exploded module directory. + TestCommon.run("-Xlog:class+load=trace", + "-cp", destJar.toString(), + "--module-path", MODS_DIR.toString(), + "-m", TEST_MODULE1 + "/" + MAIN_CLASS) + .assertNormalExit(out -> { + out.shouldMatch(".class.load. com.simple.Main source:.*com.simple") + .shouldContain(MODS_DIR.toString()); + }); + + // run with the archive with the --upgrade-module-path option. + // CDS will be disabled with this options and the main class will be + // loaded from the modular jar. + TestCommon.run("-Xlog:class+load=trace", + "-cp", destJar.toString(), + "--upgrade-module-path", moduleDir.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch("CDS is disabled when the.*option is specified") + .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); + }); + // run with the archive with the --limit-modules option. + // CDS will be disabled with this options and the main class will be + // loaded from the modular jar. + TestCommon.run("-Xlog:class+load=trace", + "-cp", destJar.toString(), + "--limit-modules", "java.base," + TEST_MODULE1, + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch("CDS is disabled when the.*option is specified") + .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); + }); + // run with the archive with the --patch-module option. + // CDS will be disabled with this options and the main class will be + // loaded from the modular jar. + TestCommon.run("-Xlog:class+load=trace", + "-cp", destJar.toString(), + "--patch-module", TEST_MODULE1 + "=" + MODS_DIR.toString(), + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1) + .assertSilentlyDisabledCDS(out -> { + out.shouldHaveExitValue(0) + .shouldMatch("CDS is disabled when the.*option is specified") + .shouldMatch(".class.load. com.simple.Main source:.*com.simple.jar"); + }); + // modify the timestamp of the jar file + (new File(destJar.toString())).setLastModified(System.currentTimeMillis() + 2000); + // run with the archive and the jar with modified timestamp. + // It should fail due to timestamp of the jar doesn't match the one + // used during dump time. + Result res = TestCommon.run("-cp", destJar.toString(), + "-Xlog:cds", + "--module-path", moduleDir.toString(), + "-m", TEST_MODULE1); + res.assertAbnormalExit(jarFileError); + // create an archive with a non-empty directory in the --module-path. + // The dumping process will exit with an error due to non-empty directory + // in the --module-path. + String mainModule = TEST_MODULE1; + if (TestCommon.isDynamicArchive()) { + mainModule += "/" + MAIN_CLASS; + } + output = TestCommon.createArchive(destJar.toString(), appClasses, + "--module-path", MODS_DIR.toString(), + "-m", mainModule); + output.shouldHaveExitValue(1) + .shouldMatch("Error: non-empty directory.*com.simple"); + + // test module path with very long length + // + // This test can't be run on the windows platform due to an existing + // issue in ClassLoader::get_canonical_path() (JDK-8190737). + if (Platform.isWindows()) { + System.out.println("Long module path test cannot be tested on the Windows platform."); + return; + } + Path longDir = USER_DIR; + int pathLen = longDir.toString().length(); + int PATH_LEN = 2034; + int MAX_DIR_LEN = 250; + while (pathLen < PATH_LEN) { + int remaining = PATH_LEN - pathLen; + int subPathLen = remaining > MAX_DIR_LEN ? MAX_DIR_LEN : remaining; + char[] chars = new char[subPathLen]; + Arrays.fill(chars, 'x'); + String subPath = new String(chars); + longDir = Paths.get(longDir.toString(), subPath); + pathLen = longDir.toString().length(); + } + File longDirFile = new File(longDir.toString()); + try { + longDirFile.mkdirs(); + } catch (Exception e) { + throw e; + } + Path longDirJar = longDir.resolve(TEST_MODULE1 + ".jar"); + // IOException results from the Files.copy() call on platform + // such as MacOS X. Test can't be proceeded further with the + // exception. + try { + Files.copy(destJar, longDirJar); + } catch (java.io.IOException ioe) { + System.out.println("Caught IOException from Files.copy(). Cannot continue."); + return; + } + output = TestCommon.createArchive(destJar.toString(), appClasses, + "-Xlog:exceptions=trace", + "--module-path", longDirJar.toString(), + "-m", TEST_MODULE1); + if (output.getExitValue() != 0) { + output.shouldMatch("os::stat error.*CDS dump aborted"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/ModulePathAndCP.java 2019-07-24 08:27:41.525468574 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,190 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @run driver ModulePathAndCP - * @summary 2 sets of tests: one with only --module-path in the command line; - * another with both -cp and --module-path in the command line. - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.process.OutputAnalyzer; - -public class ModulePathAndCP { - - private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); - - private static final String TEST_SRC = System.getProperty("test.src"); - - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - - // the module name of the test module - private static final String MAIN_MODULE = "com.greetings"; - private static final String APP_MODULE = "org.astro"; - - // the module main class - private static final String MAIN_CLASS = "com.greetings.Main"; - private static final String APP_CLASS = "org.astro.World"; - - private static Path moduleDir = null; - private static Path moduleDir2 = null; - private static Path subJar = null; - private static Path mainJar = null; - private static Path destJar = null; - - public static void buildTestModule() throws Exception { - - // javac -d mods/$TESTMODULE src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(APP_MODULE), - MODS_DIR.resolve(APP_MODULE), - null); - - // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** - JarBuilder.compileModule(SRC_DIR.resolve(MAIN_MODULE), - MODS_DIR.resolve(MAIN_MODULE), - MODS_DIR.toString()); - - moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); - moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); - subJar = moduleDir.resolve(APP_MODULE + ".jar"); - destJar = moduleDir2.resolve(APP_MODULE + ".jar"); - String classes = MODS_DIR.resolve(APP_MODULE).toString(); - JarBuilder.createModularJar(subJar.toString(), classes, null); - Files.copy(subJar, destJar); - - mainJar = moduleDir.resolve(MAIN_MODULE + ".jar"); - Path mainJar2 = moduleDir2.resolve(MAIN_MODULE + ".jar"); - classes = MODS_DIR.resolve(MAIN_MODULE).toString(); - JarBuilder.createModularJar(mainJar.toString(), classes, MAIN_CLASS); - Files.copy(mainJar, mainJar2); - - } - - public static void main(String... args) throws Exception { - run(); - } - - public static void run(String... extra_runtime_args) throws Exception { - // compile the modules and create the modular jar files - buildTestModule(); - String appClasses[] = {MAIN_CLASS, APP_CLASS}; - // create an archive with the classes in the modules built in the - // previous step - OutputAnalyzer output = TestCommon.createArchive( - null, appClasses, - "--module-path", moduleDir.toString(), - "-m", MAIN_MODULE); - TestCommon.checkDump(output); - String prefix[] = {"-Djava.class.path=", "-Xlog:class+load=trace"}; - prefix = TestCommon.concat(prefix, extra_runtime_args); - - // run with the archive with the --module-path the same as the one during - // dump time. The classes should be loaded from the archive. - TestCommon.runWithModules(prefix, - null, // --upgrade-module-path - moduleDir.toString(), // --module-path - MAIN_MODULE) // -m - .assertNormalExit(out -> { - out.shouldContain("[class,load] com.greetings.Main source: shared objects file") - .shouldContain("[class,load] org.astro.World source: shared objects file"); - }); - - // run with the archive with the --module-path different from the one during - // dump time. The classes should be loaded from the jar files. - TestCommon.runWithModules(prefix, - null, // --upgrade-module-path - moduleDir2.toString(), // --module-path - MAIN_MODULE) // -m - .assertNormalExit(out -> { - out.shouldMatch(".class.load. com.greetings.Main source:.*com.greetings.jar") - .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); - }); - - // create an archive with modular jar files in both -cp and --module-path - String jars = subJar.toString() + System.getProperty("path.separator") + - mainJar.toString(); - output = TestCommon.createArchive( jars, appClasses, - "-Xlog:class+load=trace", - "--module-path", moduleDir.toString(), - "-m", MAIN_MODULE); - TestCommon.checkDump(output); - - // run with archive with the main class name specified before - // the module name with the -m option. Since the -m option was specified - // during dump time, the classes in the jar files after the -cp won't be - // archived. Therefore, the classes won't be loaded from the archive but - // will be loaded from the jar files. - TestCommon.run("-Xlog:class+load=trace", - "-cp", jars, - "--module-path", moduleDir.toString(), - MAIN_CLASS, "-m", MAIN_MODULE) - .assertNormalExit(out -> { - out.shouldMatch(".class.load. com.greetings.Main source:.*com.greetings.jar") - .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); - }); - - // similar to the above case but without the main class name. The classes - // should be loaded from the archive. - TestCommon.run("-Xlog:class+load=trace", - "-cp", jars, - "--module-path", moduleDir.toString(), - "-m", MAIN_MODULE) - .assertNormalExit( - "[class,load] com.greetings.Main source: shared objects file", - "[class,load] org.astro.World source: shared objects file"); - - // create an archive with two modular jars in the --module-path - output = TestCommon.createArchive( - null, appClasses, - "--module-path", jars, - "-m", MAIN_MODULE); - TestCommon.checkDump(output); - - // run with the above archive but with the modular jar containing the - // org.astro module in a different location. - // The org.astro.World class should be loaded from the jar. - // The Main class should still be loaded from the archive. - jars = destJar.toString() + System.getProperty("path.separator") + - mainJar.toString(); - TestCommon.runWithModules(prefix, - null, // --upgrade-module-path - jars, // --module-path - MAIN_MODULE) // -m - .assertNormalExit(out -> { - out.shouldContain("[class,load] com.greetings.Main source: shared objects file") - .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); - }); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/ModulePathAndCP.java 2019-07-24 08:27:41.257468583 -0400 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @run driver ModulePathAndCP + * @summary 2 sets of tests: one with only --module-path in the command line; + * another with both -cp and --module-path in the command line. + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.process.OutputAnalyzer; + +public class ModulePathAndCP { + + private static final Path USER_DIR = Paths.get(System.getProperty("user.dir")); + + private static final String TEST_SRC = System.getProperty("test.src"); + + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + + // the module name of the test module + private static final String MAIN_MODULE = "com.greetings"; + private static final String APP_MODULE = "org.astro"; + + // the module main class + private static final String MAIN_CLASS = "com.greetings.Main"; + private static final String APP_CLASS = "org.astro.World"; + + private static Path moduleDir = null; + private static Path moduleDir2 = null; + private static Path subJar = null; + private static Path mainJar = null; + private static Path destJar = null; + + public static void buildTestModule() throws Exception { + + // javac -d mods/$TESTMODULE src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(APP_MODULE), + MODS_DIR.resolve(APP_MODULE), + null); + + // javac -d mods/$TESTMODULE --module-path MOD_DIR src/$TESTMODULE/** + JarBuilder.compileModule(SRC_DIR.resolve(MAIN_MODULE), + MODS_DIR.resolve(MAIN_MODULE), + MODS_DIR.toString()); + + moduleDir = Files.createTempDirectory(USER_DIR, "mlib"); + moduleDir2 = Files.createTempDirectory(USER_DIR, "mlib2"); + subJar = moduleDir.resolve(APP_MODULE + ".jar"); + destJar = moduleDir2.resolve(APP_MODULE + ".jar"); + String classes = MODS_DIR.resolve(APP_MODULE).toString(); + JarBuilder.createModularJar(subJar.toString(), classes, null); + Files.copy(subJar, destJar); + + mainJar = moduleDir.resolve(MAIN_MODULE + ".jar"); + Path mainJar2 = moduleDir2.resolve(MAIN_MODULE + ".jar"); + classes = MODS_DIR.resolve(MAIN_MODULE).toString(); + JarBuilder.createModularJar(mainJar.toString(), classes, MAIN_CLASS); + Files.copy(mainJar, mainJar2); + + } + + public static void main(String... args) throws Exception { + run(); + } + + public static void run(String... extra_runtime_args) throws Exception { + // compile the modules and create the modular jar files + buildTestModule(); + String appClasses[] = {MAIN_CLASS, APP_CLASS}; + // create an archive with the classes in the modules built in the + // previous step + OutputAnalyzer output = TestCommon.createArchive( + null, appClasses, + "--module-path", moduleDir.toString(), + "-m", MAIN_MODULE); + TestCommon.checkDump(output); + String prefix[] = {"-Djava.class.path=", "-Xlog:class+load=trace"}; + prefix = TestCommon.concat(prefix, extra_runtime_args); + + // run with the archive with the --module-path the same as the one during + // dump time. The classes should be loaded from the archive. + TestCommon.runWithModules(prefix, + null, // --upgrade-module-path + moduleDir.toString(), // --module-path + MAIN_MODULE) // -m + .assertNormalExit(out -> { + out.shouldContain("[class,load] com.greetings.Main source: shared objects file") + .shouldContain("[class,load] org.astro.World source: shared objects file"); + }); + + // run with the archive with the --module-path different from the one during + // dump time. The classes should be loaded from the jar files. + TestCommon.runWithModules(prefix, + null, // --upgrade-module-path + moduleDir2.toString(), // --module-path + MAIN_MODULE) // -m + .assertNormalExit(out -> { + out.shouldMatch(".class.load. com.greetings.Main source:.*com.greetings.jar") + .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); + }); + + // create an archive with modular jar files in both -cp and --module-path + String jars = subJar.toString() + System.getProperty("path.separator") + + mainJar.toString(); + output = TestCommon.createArchive( jars, appClasses, + "-Xlog:class+load=trace", + "--module-path", moduleDir.toString(), + "-m", MAIN_MODULE); + TestCommon.checkDump(output); + + // run with archive with the main class name specified before + // the module name with the -m option. Since the -m option was specified + // during dump time, the classes in the jar files after the -cp won't be + // archived. Therefore, the classes won't be loaded from the archive but + // will be loaded from the jar files. + TestCommon.run("-Xlog:class+load=trace", + "-cp", jars, + "--module-path", moduleDir.toString(), + MAIN_CLASS, "-m", MAIN_MODULE) + .assertNormalExit(out -> { + out.shouldMatch(".class.load. com.greetings.Main source:.*com.greetings.jar") + .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); + }); + + // similar to the above case but without the main class name. The classes + // should be loaded from the archive. + TestCommon.run("-Xlog:class+load=trace", + "-cp", jars, + "--module-path", moduleDir.toString(), + "-m", MAIN_MODULE) + .assertNormalExit( + "[class,load] com.greetings.Main source: shared objects file", + "[class,load] org.astro.World source: shared objects file"); + + // create an archive with two modular jars in the --module-path + output = TestCommon.createArchive( + null, appClasses, + "--module-path", jars, + "-m", MAIN_MODULE); + TestCommon.checkDump(output); + + // run with the above archive but with the modular jar containing the + // org.astro module in a different location. + // The org.astro.World class should be loaded from the jar. + // The Main class should still be loaded from the archive. + jars = destJar.toString() + System.getProperty("path.separator") + + mainJar.toString(); + TestCommon.runWithModules(prefix, + null, // --upgrade-module-path + jars, // --module-path + MAIN_MODULE) // -m + .assertNormalExit(out -> { + out.shouldContain("[class,load] com.greetings.Main source: shared objects file") + .shouldMatch(".class.load. org.astro.World source:.*org.astro.jar"); + }); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/ModulePathAndCP_JFR.java 2019-07-24 08:27:41.917468560 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.hasJFR & vm.cds - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.compiler - * jdk.jartool/sun.tools.jar - * jdk.jlink - * @run driver ModulePathAndCP_JFR - * @summary Same as ModulePathAndCP, but add -XX:StartFlightRecording=dumponexit=true to the runtime - * options. This makes sure that the shared classes are compatible with both - * JFR and JVMTI ClassFileLoadHook. - */ - -public class ModulePathAndCP_JFR { - public static void main(String... args) throws Exception { - ModulePathAndCP.run("-XX:StartFlightRecording=dumponexit=true", "-Xlog:cds+jvmti=debug"); - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/ModulePathAndCP_JFR.java 2019-07-24 08:27:41.613468571 -0400 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.hasJFR & vm.cds + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.compiler + * jdk.jartool/sun.tools.jar + * jdk.jlink + * @run driver ModulePathAndCP_JFR + * @summary Same as ModulePathAndCP, but add -XX:StartFlightRecording=dumponexit=true to the runtime + * options. This makes sure that the shared classes are compatible with both + * JFR and JVMTI ClassFileLoadHook. + */ + +public class ModulePathAndCP_JFR { + public static void main(String... args) throws Exception { + ModulePathAndCP.run("-XX:StartFlightRecording=dumponexit=true", "-Xlog:cds+jvmti=debug"); + } +} + --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.greetings/com/greetings/Main.java 2019-07-24 08:27:42.329468546 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com.greetings; -import org.astro.World; -public class Main { - public static void main(String[] args) { - System.out.format("Greetings %s!\n", World.name()); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.greetings/com/greetings/Main.java 2019-07-24 08:27:42.001468557 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com.greetings; +import org.astro.World; +public class Main { + public static void main(String[] args) { + System.out.format("Greetings %s!\n", World.name()); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.greetings/module-info.java 2019-07-24 08:27:42.673468534 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module com.greetings { - requires org.astro; -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.greetings/module-info.java 2019-07-24 08:27:42.373468544 -0400 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module com.greetings { + requires org.astro; +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.hello/com/hello/Main.java 2019-07-24 08:27:43.021468522 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com.hello; -import org.astro.World; -public class Main { - public static void main(String[] args) { - System.out.format("Hello %s!\n", World.name()); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.hello/com/hello/Main.java 2019-07-24 08:27:42.717468532 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com.hello; +import org.astro.World; +public class Main { + public static void main(String[] args) { + System.out.format("Hello %s!\n", World.name()); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.hello/module-info.java 2019-07-24 08:27:43.365468510 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module com.hello { - requires org.astro; -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.hello/module-info.java 2019-07-24 08:27:43.069468520 -0400 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module com.hello { + requires org.astro; +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.nomodule/com/nomodule/Main.java 2019-07-24 08:27:43.725468497 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com.nomodule; -import org.astro.World; -public class Main { - public static void main(String[] args) { - System.out.format("Greetings %s!\n", World.name()); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.nomodule/com/nomodule/Main.java 2019-07-24 08:27:43.409468508 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com.nomodule; +import org.astro.World; +public class Main { + public static void main(String[] args) { + System.out.format("Greetings %s!\n", World.name()); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.norequires/com/norequires/Main.java 2019-07-24 08:27:44.085468485 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com.norequires; -import org.astro.World; -public class Main { - public static void main(String[] args) { - System.out.format("Hello %s!\n", World.name()); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.norequires/com/norequires/Main.java 2019-07-24 08:27:43.773468496 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com.norequires; +import org.astro.World; +public class Main { + public static void main(String[] args) { + System.out.format("Hello %s!\n", World.name()); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.norequires/module-info.java 2019-07-24 08:27:44.409468474 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module com.norequires { } --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.norequires/module-info.java 2019-07-24 08:27:44.133468483 -0400 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module com.norequires { } --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.simple/com/simple/Main.java 2019-07-24 08:27:44.769468461 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com.simple; - -import java.lang.reflect.Method; - -public class Main { - public static void main(String[] args) throws Exception { - System.out.println("Hello World!"); - if (args.length > 0 && args[0].equals("with_add_opens")) { - Method method = ClassLoader.class.getDeclaredMethod("defineClass", - byte[].class, int.class, int.class); - method.setAccessible(true); - System.out.println("method.setAccessible succeeded!"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.simple/com/simple/Main.java 2019-07-24 08:27:44.457468472 -0400 @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com.simple; + +import java.lang.reflect.Method; + +public class Main { + public static void main(String[] args) throws Exception { + System.out.println("Hello World!"); + if (args.length > 0 && args[0].equals("with_add_opens")) { + Method method = ClassLoader.class.getDeclaredMethod("defineClass", + byte[].class, int.class, int.class); + method.setAccessible(true); + System.out.println("method.setAccessible succeeded!"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/com.simple/module-info.java 2019-07-24 08:27:45.093468450 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module com.simple { -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/com.simple/module-info.java 2019-07-24 08:27:44.813468459 -0400 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module com.simple { +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/org.astro/module-info.java 2019-07-24 08:27:45.425468438 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module org.astro { - exports org.astro; -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/org.astro/module-info.java 2019-07-24 08:27:45.133468448 -0400 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module org.astro { + exports org.astro; +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/modulepath/src/org.astro/org/astro/World.java 2019-07-24 08:27:45.805468425 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package org.astro; -public class World { - public static String name() { - return "world"; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/modulepath/src/org.astro/org/astro/World.java 2019-07-24 08:27:45.477468436 -0400 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package org.astro; +public class World { + public static String name() { + return "world"; + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/OverrideTests.java 2019-07-24 08:27:46.053468416 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @requires vm.cds - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * @library ../.. - * @library /test/lib - * @compile ../../test-classes/Hello.java - * @run driver OverrideTests - * @summary AppCDS tests for overriding archived classes with -p and --upgrade-module-path - */ - -/* - * This test consists of 4 tests: - * 1. Archive PLATFORM class and override with --upgrade-module-path. - * 2. Archive PLATFORM class and override with -p. - * 3. Archive APP class and override with --upgrade-module-path. - * 4. Archive App class and override with -p. - * For all 4 tests, the class is instantiatied and toString() is called - * to check whether the archived version or the override version was instantiatied. - * For tests 1 and 3, the overridden version should be instantiatied. - * For tests 2 and 4, the archived version should be instantiated. - * - * This test uses the same test helper class in all 4 cases. It is located in - * src/test/jdk/test/Main.java. It will be invoked once for each test cases, - * with parameters to the test determining how it is run and what the - * expected result is. See Main.java for a description of these 3 arguments. - */ - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import jdk.test.lib.Asserts; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - - -public class OverrideTests { - private static final String TEST_SRC = System.getProperty("test.src"); - private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); - private static final Path MODS_DIR = Paths.get("mods"); - private static String appJar; - // the module that is upgraded - private static final String[] UPGRADED_MODULES = {"jdk.compiler", "java.net.http"}; - private static final Path[] UPGRADEDMODS_DIR = {Paths.get("upgradedmod1"), Paths.get("upgradedmod2")}; - - // the test module - private static final String TEST_MODULE = "test"; - private static final String MAIN_CLASS = "jdk.test.Main"; - - // test classes to archive. These are both in UPGRADED_MODULES - private static final String APP_ARCHIVE_CLASS = "com/sun/tools/javac/Main"; - private static final String PLATFORM_ARCHIVE_CLASS = "java/net/http/HttpTimeoutException"; - private static final String[] ARCHIVE_CLASSES = {APP_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS}; - private static String testArchiveName; - - - public static void main(String[] args) throws Exception { - appJar = JarBuilder.getOrCreateHelloJar(); - OverrideTests tests = new OverrideTests(); - tests.compileModulesAndDumpArchive(); - tests.testAppClassOverriding(); - tests.testPlatformClassOverriding(); - } - - void compileModulesAndDumpArchive() throws Exception { - boolean compiled; - // javac -d upgradedmods/$upgradedMod src/$upgradedMod/** - int i = 0; - for (String upgradedMod : UPGRADED_MODULES) { - compiled = CompilerUtils.compile( - SRC_DIR.resolve(UPGRADED_MODULES[i]), - UPGRADEDMODS_DIR[i].resolve(UPGRADED_MODULES[i]) - ); - Asserts.assertTrue(compiled, UPGRADED_MODULES[i] + " did not compile"); - i++; - } - - // javac -d mods/test --upgrade-module-path upgradedmods ... - compiled = CompilerUtils.compile( - SRC_DIR.resolve(TEST_MODULE), - MODS_DIR.resolve(TEST_MODULE), - "--upgrade-module-path", UPGRADEDMODS_DIR[0].toString() + - System.getProperty("path.separator") + UPGRADEDMODS_DIR[1].toString() - ); - Asserts.assertTrue(compiled, TEST_MODULE + " did not compile"); - - // dump the archive with jdk.compiler and java.net.http classes in the class list - OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list(ARCHIVE_CLASSES)); - TestCommon.checkDump(output); - // Make sure all the classes where successfully archived. - for (String archiveClass : ARCHIVE_CLASSES) { - output.shouldNotContain("Preload Warning: Cannot find " + archiveClass); - } - - testArchiveName = TestCommon.getCurrentArchiveName(); - } - - /** - * APP Class Overriding Tests - * - * Archive APP class com.sun.tools.javac.Main from module jdk.compiler. - * -At run time, upgrade module jdk.compiler using --upgrade-module-path. - * Class.forname(Main) MUST NOT load the archived Main. - * -At run time, module jdk.compiler also exists in --module-path. - * Class.forname(Main) MUST load the archived Main. - */ - public void testAppClassOverriding() throws Exception { - testClassOverriding(APP_ARCHIVE_CLASS, "app"); - } - - /** - * PLATFORM Class Overriding Tests - * - * Archive PLATFORM class java.net.http.HttpTimeoutException from module java.net.http. - * -At run time, upgrade module java.net.http using --upgrade-module-path. - * Class.forname(HttpTimeoutException) MUST NOT load the archived HttpTimeoutException. - * -At run time, module java.net.http also exists in --module-path. - * Class.forname(HttpTimeoutException) MUST load the archived HttpTimeoutException. - */ - public void testPlatformClassOverriding() throws Exception { - testClassOverriding(PLATFORM_ARCHIVE_CLASS, "platform"); - } - - /** - * Run the test twice. Once with upgrade module on --upgrade-module-path and once with it on -p. - * Only modules defined to the PlatformClassLoader are upgradeable. - * Modules defined to the AppClassLoader are not upgradeble; we expect the - * FindException to be thrown. - */ - void testClassOverriding(String archiveClass, String loaderName) throws Exception { - String mid = TEST_MODULE + "/" + MAIN_CLASS; - OutputAnalyzer output; - boolean isAppLoader = loaderName.equals("app"); - int upgradeModIdx = isAppLoader ? 0 : 1; - String expectedException = "java.lang.module.FindException: Unable to compute the hash"; - String prefix[] = new String[3]; - prefix[0] = "-Djava.class.path=" + appJar; - prefix[1] = "--add-modules"; - prefix[2] = "java.net.http"; - - // Run the test with --upgrade-module-path set to alternate location of archiveClass - // The alternate version of archiveClass SHOULD be found. - TestCommon.runWithModules(prefix, - UPGRADEDMODS_DIR[upgradeModIdx].toString(), - MODS_DIR.toString(), - mid, - archiveClass, loaderName, "true") // last 3 args passed to test - .ifNoMappingFailure(out -> out.shouldContain(expectedException)); - - // Now run this same test again, but this time without AppCDS. Behavior should be the same. - CDSOptions opts = (new CDSOptions()) - .addPrefix(prefix) - .setArchiveName(testArchiveName).setUseVersion(false) - .addSuffix("--upgrade-module-path", UPGRADEDMODS_DIR[upgradeModIdx].toString(), - "-p", MODS_DIR.toString(), "-m", mid) - .addSuffix(archiveClass, loaderName, "true"); - - output = CDSTestUtils.runWithArchive(opts); - - try { - output.shouldContain(expectedException); - } catch (Exception e) { - TestCommon.checkCommonExecExceptions(output, e); - } - - // Run the test with -p set to alternate location of archiveClass. - // The alternate version of archiveClass SHOULD NOT be found. - TestCommon.runWithModules( - prefix, - null, - UPGRADEDMODS_DIR[upgradeModIdx].toString() + java.io.File.pathSeparator + MODS_DIR.toString(), - mid, - archiveClass, loaderName, "false") // last 3 args passed to test - .assertNormalExit(); - - // Now run this same test again, but this time without AppCDS. Behavior should be the same. - opts = (new CDSOptions()) - .addPrefix(prefix) - .setArchiveName(testArchiveName).setUseVersion(false) - .addSuffix("-p", MODS_DIR.toString(), "-m", mid) - .addSuffix(archiveClass, loaderName, "false"); // params to the test class - - OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); - if (!CDSTestUtils.isUnableToMap(out)) - out.shouldHaveExitValue(0); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/overridetests/OverrideTests.java 2019-07-24 08:27:45.845468424 -0400 @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @requires vm.cds + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * @library ../.. + * @library /test/lib + * @compile ../../test-classes/Hello.java + * @run driver OverrideTests + * @summary AppCDS tests for overriding archived classes with -p and --upgrade-module-path + */ + +/* + * This test consists of 4 tests: + * 1. Archive PLATFORM class and override with --upgrade-module-path. + * 2. Archive PLATFORM class and override with -p. + * 3. Archive APP class and override with --upgrade-module-path. + * 4. Archive App class and override with -p. + * For all 4 tests, the class is instantiatied and toString() is called + * to check whether the archived version or the override version was instantiatied. + * For tests 1 and 3, the overridden version should be instantiatied. + * For tests 2 and 4, the archived version should be instantiated. + * + * This test uses the same test helper class in all 4 cases. It is located in + * src/test/jdk/test/Main.java. It will be invoked once for each test cases, + * with parameters to the test determining how it is run and what the + * expected result is. See Main.java for a description of these 3 arguments. + */ + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import jdk.test.lib.Asserts; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + + +public class OverrideTests { + private static final String TEST_SRC = System.getProperty("test.src"); + private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); + private static final Path MODS_DIR = Paths.get("mods"); + private static String appJar; + // the module that is upgraded + private static final String[] UPGRADED_MODULES = {"jdk.compiler", "java.net.http"}; + private static final Path[] UPGRADEDMODS_DIR = {Paths.get("upgradedmod1"), Paths.get("upgradedmod2")}; + + // the test module + private static final String TEST_MODULE = "test"; + private static final String MAIN_CLASS = "jdk.test.Main"; + + // test classes to archive. These are both in UPGRADED_MODULES + private static final String APP_ARCHIVE_CLASS = "com/sun/tools/javac/Main"; + private static final String PLATFORM_ARCHIVE_CLASS = "java/net/http/HttpTimeoutException"; + private static final String[] ARCHIVE_CLASSES = {APP_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS}; + private static String testArchiveName; + + + public static void main(String[] args) throws Exception { + appJar = JarBuilder.getOrCreateHelloJar(); + OverrideTests tests = new OverrideTests(); + tests.compileModulesAndDumpArchive(); + tests.testAppClassOverriding(); + tests.testPlatformClassOverriding(); + } + + void compileModulesAndDumpArchive() throws Exception { + boolean compiled; + // javac -d upgradedmods/$upgradedMod src/$upgradedMod/** + int i = 0; + for (String upgradedMod : UPGRADED_MODULES) { + compiled = CompilerUtils.compile( + SRC_DIR.resolve(UPGRADED_MODULES[i]), + UPGRADEDMODS_DIR[i].resolve(UPGRADED_MODULES[i]) + ); + Asserts.assertTrue(compiled, UPGRADED_MODULES[i] + " did not compile"); + i++; + } + + // javac -d mods/test --upgrade-module-path upgradedmods ... + compiled = CompilerUtils.compile( + SRC_DIR.resolve(TEST_MODULE), + MODS_DIR.resolve(TEST_MODULE), + "--upgrade-module-path", UPGRADEDMODS_DIR[0].toString() + + System.getProperty("path.separator") + UPGRADEDMODS_DIR[1].toString() + ); + Asserts.assertTrue(compiled, TEST_MODULE + " did not compile"); + + // dump the archive with jdk.compiler and java.net.http classes in the class list + OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list(ARCHIVE_CLASSES)); + TestCommon.checkDump(output); + // Make sure all the classes where successfully archived. + for (String archiveClass : ARCHIVE_CLASSES) { + output.shouldNotContain("Preload Warning: Cannot find " + archiveClass); + } + + testArchiveName = TestCommon.getCurrentArchiveName(); + } + + /** + * APP Class Overriding Tests + * + * Archive APP class com.sun.tools.javac.Main from module jdk.compiler. + * -At run time, upgrade module jdk.compiler using --upgrade-module-path. + * Class.forname(Main) MUST NOT load the archived Main. + * -At run time, module jdk.compiler also exists in --module-path. + * Class.forname(Main) MUST load the archived Main. + */ + public void testAppClassOverriding() throws Exception { + testClassOverriding(APP_ARCHIVE_CLASS, "app"); + } + + /** + * PLATFORM Class Overriding Tests + * + * Archive PLATFORM class java.net.http.HttpTimeoutException from module java.net.http. + * -At run time, upgrade module java.net.http using --upgrade-module-path. + * Class.forname(HttpTimeoutException) MUST NOT load the archived HttpTimeoutException. + * -At run time, module java.net.http also exists in --module-path. + * Class.forname(HttpTimeoutException) MUST load the archived HttpTimeoutException. + */ + public void testPlatformClassOverriding() throws Exception { + testClassOverriding(PLATFORM_ARCHIVE_CLASS, "platform"); + } + + /** + * Run the test twice. Once with upgrade module on --upgrade-module-path and once with it on -p. + * Only modules defined to the PlatformClassLoader are upgradeable. + * Modules defined to the AppClassLoader are not upgradeble; we expect the + * FindException to be thrown. + */ + void testClassOverriding(String archiveClass, String loaderName) throws Exception { + String mid = TEST_MODULE + "/" + MAIN_CLASS; + OutputAnalyzer output; + boolean isAppLoader = loaderName.equals("app"); + int upgradeModIdx = isAppLoader ? 0 : 1; + String expectedException = "java.lang.module.FindException: Unable to compute the hash"; + String prefix[] = new String[3]; + prefix[0] = "-Djava.class.path=" + appJar; + prefix[1] = "--add-modules"; + prefix[2] = "java.net.http"; + + // Run the test with --upgrade-module-path set to alternate location of archiveClass + // The alternate version of archiveClass SHOULD be found. + TestCommon.runWithModules(prefix, + UPGRADEDMODS_DIR[upgradeModIdx].toString(), + MODS_DIR.toString(), + mid, + archiveClass, loaderName, "true") // last 3 args passed to test + .ifNoMappingFailure(out -> out.shouldContain(expectedException)); + + // Now run this same test again, but this time without AppCDS. Behavior should be the same. + CDSOptions opts = (new CDSOptions()) + .addPrefix(prefix) + .setArchiveName(testArchiveName).setUseVersion(false) + .addSuffix("--upgrade-module-path", UPGRADEDMODS_DIR[upgradeModIdx].toString(), + "-p", MODS_DIR.toString(), "-m", mid) + .addSuffix(archiveClass, loaderName, "true"); + + output = CDSTestUtils.runWithArchive(opts); + + try { + output.shouldContain(expectedException); + } catch (Exception e) { + TestCommon.checkCommonExecExceptions(output, e); + } + + // Run the test with -p set to alternate location of archiveClass. + // The alternate version of archiveClass SHOULD NOT be found. + TestCommon.runWithModules( + prefix, + null, + UPGRADEDMODS_DIR[upgradeModIdx].toString() + java.io.File.pathSeparator + MODS_DIR.toString(), + mid, + archiveClass, loaderName, "false") // last 3 args passed to test + .assertNormalExit(); + + // Now run this same test again, but this time without AppCDS. Behavior should be the same. + opts = (new CDSOptions()) + .addPrefix(prefix) + .setArchiveName(testArchiveName).setUseVersion(false) + .addSuffix("-p", MODS_DIR.toString(), "-m", mid) + .addSuffix(archiveClass, loaderName, "false"); // params to the test class + + OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); + if (!CDSTestUtils.isUnableToMap(out)) + out.shouldHaveExitValue(0); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/java.net.http/java/net/http/HttpTimeoutException.java 2019-07-24 08:27:46.393468404 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package java.net.http; - -public class HttpTimeoutException { - public String toString() { - return "hi"; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/overridetests/src/java.net.http/java/net/http/HttpTimeoutException.java 2019-07-24 08:27:46.093468415 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package java.net.http; + +public class HttpTimeoutException { + public String toString() { + return "hi"; + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/java.net.http/module-info.java 2019-07-24 08:27:46.769468391 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module java.net.http { - exports java.net.http; -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/overridetests/src/java.net.http/module-info.java 2019-07-24 08:27:46.441468403 -0400 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module java.net.http { + exports java.net.http; +} + --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/jdk.compiler/com/sun/tools/javac/Main.java 2019-07-24 08:27:47.157468378 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package com.sun.tools.javac; - -public class Main { - public String toString() { - return "hi"; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/overridetests/src/jdk.compiler/com/sun/tools/javac/Main.java 2019-07-24 08:27:46.825468389 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com.sun.tools.javac; + +public class Main { + public String toString() { + return "hi"; + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/jdk.compiler/module-info.java 2019-07-24 08:27:47.501468366 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module jdk.compiler { - exports com.sun.tools.javac; -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/overridetests/src/jdk.compiler/module-info.java 2019-07-24 08:27:47.197468376 -0400 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module jdk.compiler { + exports com.sun.tools.javac; +} + --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/test/jdk/test/Main.java 2019-07-24 08:27:47.861468353 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * Used with -p or --upgrade-module-path to exercise the replacement - * of classes in modules that are linked into the runtime image. - */ - -package jdk.test; - -public class Main { - static final ClassLoader PLATFORM_LOADER = ClassLoader.getPlatformClassLoader(); - static final ClassLoader SYS_LOADER = ClassLoader.getSystemClassLoader(); - - public static void main(String[] args) throws Exception { - ClassLoader loader = null; - boolean shouldOverride = false; - - /* - * 3 Arguments are passed to this test: - * 1. className: Name of the class to load. - * 2. loaderName: Either "platform" or "app", which specifies which ClassLoader is expected - * to be the defining ClassLoader once the class is loaded. The initiating - * ClassLoader is always the default ClassLoader (which should be the - * app (system) ClassLoader. - * 3. shouldOverride: Either "true" or "false" to indicate whether the loaded class - * should be the one we are attempting to override with (not the archived version). - */ - - assertTrue(args.length == 3, "Unexpected number of arguments: expected 3, actual " + args.length); - String className = args[0].replace('/', '.'); - String loaderName = args[1]; // "platform" or "app" - String shouldOverrideName = args[2]; // "true" or "false" - - if (loaderName.equals("app")) { - loader = SYS_LOADER; - } else if (loaderName.equals("platform")) { - loader = PLATFORM_LOADER; - } else { - assertTrue(false); - } - - if (shouldOverrideName.equals("true")) { - shouldOverride = true; - } else if (shouldOverrideName.equals("false")) { - shouldOverride = false; - } else { - assertTrue(false); - } - - // Load the class with the default ClassLoader. - Class clazz = Class.forName(className, true, loader); - // Make sure we got the expected defining ClassLoader - testLoader(clazz, loader); - - String s = null; - if (shouldOverride) { - // Create an instance and see what toString() returns - clazz.newInstance().toString(); - } - // The overridden version of the class should return "hi". Make sure - // it does only if we are expecting to have loaded the overridden version. - assertTrue("hi".equals(s) == shouldOverride); - } - - /** - * Asserts that given class has the expected defining loader. - */ - static void testLoader(Class clazz, ClassLoader expected) { - ClassLoader loader = clazz.getClassLoader(); - if (loader != expected) { - throw new RuntimeException(clazz + " loaded by " + loader + ", expected " + expected); - } - } - - static void assertTrue(boolean expr) { - assertTrue(expr, ""); - } - - static void assertTrue(boolean expr, String msg) { - if (!expr) - throw new RuntimeException("assertion failed: " + msg); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/overridetests/src/test/jdk/test/Main.java 2019-07-24 08:27:47.553468364 -0400 @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * Used with -p or --upgrade-module-path to exercise the replacement + * of classes in modules that are linked into the runtime image. + */ + +package jdk.test; + +public class Main { + static final ClassLoader PLATFORM_LOADER = ClassLoader.getPlatformClassLoader(); + static final ClassLoader SYS_LOADER = ClassLoader.getSystemClassLoader(); + + public static void main(String[] args) throws Exception { + ClassLoader loader = null; + boolean shouldOverride = false; + + /* + * 3 Arguments are passed to this test: + * 1. className: Name of the class to load. + * 2. loaderName: Either "platform" or "app", which specifies which ClassLoader is expected + * to be the defining ClassLoader once the class is loaded. The initiating + * ClassLoader is always the default ClassLoader (which should be the + * app (system) ClassLoader. + * 3. shouldOverride: Either "true" or "false" to indicate whether the loaded class + * should be the one we are attempting to override with (not the archived version). + */ + + assertTrue(args.length == 3, "Unexpected number of arguments: expected 3, actual " + args.length); + String className = args[0].replace('/', '.'); + String loaderName = args[1]; // "platform" or "app" + String shouldOverrideName = args[2]; // "true" or "false" + + if (loaderName.equals("app")) { + loader = SYS_LOADER; + } else if (loaderName.equals("platform")) { + loader = PLATFORM_LOADER; + } else { + assertTrue(false); + } + + if (shouldOverrideName.equals("true")) { + shouldOverride = true; + } else if (shouldOverrideName.equals("false")) { + shouldOverride = false; + } else { + assertTrue(false); + } + + // Load the class with the default ClassLoader. + Class clazz = Class.forName(className, true, loader); + // Make sure we got the expected defining ClassLoader + testLoader(clazz, loader); + + String s = null; + if (shouldOverride) { + // Create an instance and see what toString() returns + clazz.newInstance().toString(); + } + // The overridden version of the class should return "hi". Make sure + // it does only if we are expecting to have loaded the overridden version. + assertTrue("hi".equals(s) == shouldOverride); + } + + /** + * Asserts that given class has the expected defining loader. + */ + static void testLoader(Class clazz, ClassLoader expected) { + ClassLoader loader = clazz.getClassLoader(); + if (loader != expected) { + throw new RuntimeException(clazz + " loaded by " + loader + ", expected " + expected); + } + } + + static void assertTrue(boolean expr) { + assertTrue(expr, ""); + } + + static void assertTrue(boolean expr, String msg) { + if (!expr) + throw new RuntimeException("assertion failed: " + msg); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/test/module-info.java 2019-07-24 08:27:48.225468341 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -module test { - requires jdk.compiler; - requires java.compiler; -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jigsaw/overridetests/src/test/module-info.java 2019-07-24 08:27:47.909468352 -0400 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +module test { + requires jdk.compiler; + requires java.compiler; +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHook.java 2019-07-24 08:27:48.597468328 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -class LoadMe { - static String getValue() { - return "beforeHook"; - } - static String getOtherValue() { - return "abc-beforeHook-xyz"; - } -} - -public class ClassFileLoadHook { - public enum TestCaseId { - SHARING_OFF_CFLH_ON, // test case to establish a baseline - SHARING_ON_CFLH_OFF, - SHARING_AUTO_CFLH_ON, - SHARING_ON_CFLH_ON - } - - public static void main(String args[]) throws Exception { - TestCaseId testCase = TestCaseId.valueOf(args[0]); - test1(testCase); - test2(testCase); - } - - // Test rewriting the classfile data using CFLH - static void test1(TestCaseId testCase) { - WhiteBox wb = WhiteBox.getWhiteBox(); - - System.out.println("====== ClassFileLoadHook.main():testCase = " + testCase); - System.out.println("getValue():" + LoadMe.getValue()); - System.out.println("getOtherValue():" + LoadMe.getOtherValue()); - - switch (testCase) { - case SHARING_OFF_CFLH_ON: - assertTrue("after_Hook".equals(LoadMe.getValue()) && - "abc-after_Hook-xyz".equals(LoadMe.getOtherValue()), - "Not sharing, this test should replace beforeHook " + - "with after_Hook"); - break; - - case SHARING_ON_CFLH_OFF: - assertTrue(wb.isSharedClass(LoadMe.class), - "LoadMe should be shared, but is not"); - assertTrue("beforeHook".equals(LoadMe.getValue()) && - "abc-beforeHook-xyz".equals(LoadMe.getOtherValue()), - "CFLH off, bug values are redefined"); - break; - - case SHARING_AUTO_CFLH_ON: - case SHARING_ON_CFLH_ON: - // LoadMe is rewritten on CFLH - assertFalse(wb.isSharedClass(LoadMe.class), - "LoadMe should not be shared if CFLH has modified the class"); - assertFalse("beforeHook".equals(LoadMe.getValue()) && - "abc-beforeHook-xyz".equals(LoadMe.getOtherValue()), - "Class contents should be changed if CFLH is enabled"); - break; - - default: - throw new RuntimeException("Invalid testcase"); - - } - } - - // Test the loading of classfile data for non-boot shared classes from jrt:/xxx. - // See JDK-8221351. - static void test2(TestCaseId testCase) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - Class c = Class.forName("java.sql.SQLException"); // defined by platform class loader. - - switch (testCase) { - case SHARING_ON_CFLH_OFF: - case SHARING_ON_CFLH_ON: - assertTrue(wb.isSharedClass(c), "must be shared"); - break; - case SHARING_AUTO_CFLH_ON: - // With -Xshare:auto, the test continues to run with mapping failure. - // In case of mapping failure, java/lang/Object and the app class - // won't be loaded from the archive. - Class objClass = Class.forName("java.lang.Object"); - if (wb.isSharedClass(objClass)) { - assertTrue(wb.isSharedClass(c), "must be shared"); - } else { - assertFalse(wb.isSharedClass(c), "must not be shared"); - } - break; - default: - // this test is not applicable to -Xshare:off - if (testCase != TestCaseId.SHARING_OFF_CFLH_ON) { - throw new RuntimeException("Invalid testcase"); - } - } - } - - private static void assertTrue(boolean expr, String msg) { - if (!expr) - throw new RuntimeException(msg); - } - - private static void assertFalse(boolean expr, String msg) { - if (expr) - throw new RuntimeException(msg); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/ClassFileLoadHook.java 2019-07-24 08:27:48.277468339 -0400 @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +class LoadMe { + static String getValue() { + return "beforeHook"; + } + static String getOtherValue() { + return "abc-beforeHook-xyz"; + } +} + +public class ClassFileLoadHook { + public enum TestCaseId { + SHARING_OFF_CFLH_ON, // test case to establish a baseline + SHARING_ON_CFLH_OFF, + SHARING_AUTO_CFLH_ON, + SHARING_ON_CFLH_ON + } + + public static void main(String args[]) throws Exception { + TestCaseId testCase = TestCaseId.valueOf(args[0]); + test1(testCase); + test2(testCase); + } + + // Test rewriting the classfile data using CFLH + static void test1(TestCaseId testCase) { + WhiteBox wb = WhiteBox.getWhiteBox(); + + System.out.println("====== ClassFileLoadHook.main():testCase = " + testCase); + System.out.println("getValue():" + LoadMe.getValue()); + System.out.println("getOtherValue():" + LoadMe.getOtherValue()); + + switch (testCase) { + case SHARING_OFF_CFLH_ON: + assertTrue("after_Hook".equals(LoadMe.getValue()) && + "abc-after_Hook-xyz".equals(LoadMe.getOtherValue()), + "Not sharing, this test should replace beforeHook " + + "with after_Hook"); + break; + + case SHARING_ON_CFLH_OFF: + assertTrue(wb.isSharedClass(LoadMe.class), + "LoadMe should be shared, but is not"); + assertTrue("beforeHook".equals(LoadMe.getValue()) && + "abc-beforeHook-xyz".equals(LoadMe.getOtherValue()), + "CFLH off, bug values are redefined"); + break; + + case SHARING_AUTO_CFLH_ON: + case SHARING_ON_CFLH_ON: + // LoadMe is rewritten on CFLH + assertFalse(wb.isSharedClass(LoadMe.class), + "LoadMe should not be shared if CFLH has modified the class"); + assertFalse("beforeHook".equals(LoadMe.getValue()) && + "abc-beforeHook-xyz".equals(LoadMe.getOtherValue()), + "Class contents should be changed if CFLH is enabled"); + break; + + default: + throw new RuntimeException("Invalid testcase"); + + } + } + + // Test the loading of classfile data for non-boot shared classes from jrt:/xxx. + // See JDK-8221351. + static void test2(TestCaseId testCase) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + Class c = Class.forName("java.sql.SQLException"); // defined by platform class loader. + + switch (testCase) { + case SHARING_ON_CFLH_OFF: + case SHARING_ON_CFLH_ON: + assertTrue(wb.isSharedClass(c), "must be shared"); + break; + case SHARING_AUTO_CFLH_ON: + // With -Xshare:auto, the test continues to run with mapping failure. + // In case of mapping failure, java/lang/Object and the app class + // won't be loaded from the archive. + Class objClass = Class.forName("java.lang.Object"); + if (wb.isSharedClass(objClass)) { + assertTrue(wb.isSharedClass(c), "must be shared"); + } else { + assertFalse(wb.isSharedClass(c), "must not be shared"); + } + break; + default: + // this test is not applicable to -Xshare:off + if (testCase != TestCaseId.SHARING_OFF_CFLH_ON) { + throw new RuntimeException("Invalid testcase"); + } + } + } + + private static void assertTrue(boolean expr, String msg) { + if (!expr) + throw new RuntimeException(msg); + } + + private static void assertFalse(boolean expr, String msg) { + if (expr) + throw new RuntimeException(msg); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHookTest.java 2019-07-24 08:27:48.925468316 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test jvmti class file loader hook interaction with AppCDS - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @requires vm.cds - * @build ClassFileLoadHook - * @run main/othervm/native ClassFileLoadHookTest - */ - - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - - -public class ClassFileLoadHookTest { - public static String sharedClasses[] = { - "ClassFileLoadHook", - "ClassFileLoadHook$TestCaseId", - "ClassFileLoadHook$1", - "LoadMe", - "java/sql/SQLException" - }; - - public static void main(String[] args) throws Exception { - String wbJar = - ClassFileInstaller.writeJar("WhiteBox.jar", "sun.hotspot.WhiteBox"); - String appJar = - ClassFileInstaller.writeJar("ClassFileLoadHook.jar", sharedClasses); - String useWb = "-Xbootclasspath/a:" + wbJar; - - // First, run the test class directly, w/o sharing, as a baseline reference - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - useWb, - "-agentlib:SimpleClassFileLoadHook=LoadMe,beforeHook,after_Hook", - "ClassFileLoadHook", - "" + ClassFileLoadHook.TestCaseId.SHARING_OFF_CFLH_ON); - TestCommon.executeAndLog(pb, "no-sharing").shouldHaveExitValue(0); - - // Run with AppCDS, but w/o CFLH - second baseline - TestCommon.testDump(appJar, sharedClasses, useWb); - OutputAnalyzer out = TestCommon.exec(appJar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", useWb, - "ClassFileLoadHook", - "" + ClassFileLoadHook.TestCaseId.SHARING_ON_CFLH_OFF); - - TestCommon.checkExec(out); - - - // Now, run with AppCDS with -Xshare:auto and CFLH - out = TestCommon.execAuto("-cp", appJar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", useWb, - "-agentlib:SimpleClassFileLoadHook=LoadMe,beforeHook,after_Hook", - "ClassFileLoadHook", - "" + ClassFileLoadHook.TestCaseId.SHARING_AUTO_CFLH_ON); - - CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); - TestCommon.checkExec(out, opts); - - // Now, run with AppCDS -Xshare:on and CFLH - out = TestCommon.exec(appJar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", useWb, - "-agentlib:SimpleClassFileLoadHook=LoadMe,beforeHook,after_Hook", - "ClassFileLoadHook", - "" + ClassFileLoadHook.TestCaseId.SHARING_ON_CFLH_ON); - TestCommon.checkExec(out); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/ClassFileLoadHookTest.java 2019-07-24 08:27:48.645468326 -0400 @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test jvmti class file loader hook interaction with AppCDS + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @requires vm.cds + * @build ClassFileLoadHook + * @run main/othervm/native ClassFileLoadHookTest + */ + + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + + +public class ClassFileLoadHookTest { + public static String sharedClasses[] = { + "ClassFileLoadHook", + "ClassFileLoadHook$TestCaseId", + "ClassFileLoadHook$1", + "LoadMe", + "java/sql/SQLException" + }; + + public static void main(String[] args) throws Exception { + String wbJar = + ClassFileInstaller.writeJar("WhiteBox.jar", "sun.hotspot.WhiteBox"); + String appJar = + ClassFileInstaller.writeJar("ClassFileLoadHook.jar", sharedClasses); + String useWb = "-Xbootclasspath/a:" + wbJar; + + // First, run the test class directly, w/o sharing, as a baseline reference + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + useWb, + "-agentlib:SimpleClassFileLoadHook=LoadMe,beforeHook,after_Hook", + "ClassFileLoadHook", + "" + ClassFileLoadHook.TestCaseId.SHARING_OFF_CFLH_ON); + TestCommon.executeAndLog(pb, "no-sharing").shouldHaveExitValue(0); + + // Run with AppCDS, but w/o CFLH - second baseline + TestCommon.testDump(appJar, sharedClasses, useWb); + OutputAnalyzer out = TestCommon.exec(appJar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", useWb, + "ClassFileLoadHook", + "" + ClassFileLoadHook.TestCaseId.SHARING_ON_CFLH_OFF); + + TestCommon.checkExec(out); + + + // Now, run with AppCDS with -Xshare:auto and CFLH + out = TestCommon.execAuto("-cp", appJar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", useWb, + "-agentlib:SimpleClassFileLoadHook=LoadMe,beforeHook,after_Hook", + "ClassFileLoadHook", + "" + ClassFileLoadHook.TestCaseId.SHARING_AUTO_CFLH_ON); + + CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); + TestCommon.checkExec(out, opts); + + // Now, run with AppCDS -Xshare:on and CFLH + out = TestCommon.exec(appJar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", useWb, + "-agentlib:SimpleClassFileLoadHook=LoadMe,beforeHook,after_Hook", + "ClassFileLoadHook", + "" + ClassFileLoadHook.TestCaseId.SHARING_ON_CFLH_ON); + TestCommon.checkExec(out); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationAgent.mf 2019-07-24 08:27:49.321468302 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -Premain-Class: InstrumentationRegisterClassFileTransformer -Agent-Class: InstrumentationRegisterClassFileTransformer -Can-Retransform-Classes: true -Can-Redefine-Classes: true --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/InstrumentationAgent.mf 2019-07-24 08:27:49.009468313 -0400 @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Premain-Class: InstrumentationRegisterClassFileTransformer +Agent-Class: InstrumentationRegisterClassFileTransformer +Can-Retransform-Classes: true +Can-Redefine-Classes: true --- old/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationApp.java 2019-07-24 08:27:49.641468291 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,235 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.instrument.ClassDefinition; -import java.lang.instrument.Instrumentation; -import java.lang.instrument.UnmodifiableClassException; -import java.net.URL; -import java.net.URLClassLoader; -import java.io.File; -import java.io.FileWriter; -import java.security.CodeSigner; -import java.security.CodeSource; -import java.security.ProtectionDomain; -import sun.hotspot.WhiteBox; - -public class InstrumentationApp { - static WhiteBox wb = WhiteBox.getWhiteBox(); - - public static final String COO_CLASS_NAME = "InstrumentationApp$Coo"; - - public static interface Intf { // Loaded from Boot class loader (-Xbootclasspath/a). - public String get(); - } - public static class Bar implements Intf { // Loaded from Boot class loader. - public String get() { - // The initial transform: - // change "buzz" -> "fuzz" - // The re-transform: - // change "buzz" -> "guzz" - return "buzz"; - } - } - public static class Foo implements Intf { // Loaded from AppClassLoader, or from a custom loader - public String get() { - // The initial transform: - // change "buzz" -> "fuzz" - // The re-transform: - // change "buzz" -> "guzz" - return "buzz"; - } - } - public static class Coo implements Intf { // Loaded from custom class loader. - public String get() { - // The initial transform: - // change "buzz" -> "fuzz" - // The re-transform: - // change "buzz" -> "guzz" - return "buzz"; - } - } - - // This class file should be archived if AppCDSv2 is enabled on this platform. See - // the comments around the call to TestCommon.dump in InstrumentationTest.java. - public static class ArchivedIfAppCDSv2Enabled {} - - public static boolean isAppCDSV2Enabled() { - return wb.isSharedClass(ArchivedIfAppCDSv2Enabled.class); - } - - public static class MyLoader extends URLClassLoader { - public MyLoader(URL[] urls, ClassLoader parent, File jar) { - super(urls, parent); - this.jar = jar; - } - File jar; - - @Override - protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - synchronized (getClassLoadingLock(name)) { - // First, check if the class has already been loaded - Class clz = findLoadedClass(name); - if (clz != null) { - return clz; - } - - if (name.equals(COO_CLASS_NAME)) { - try { - byte[] buff = Util.getClassFileFromJar(jar, name); - return defineClass(name, buff, 0, buff.length); - } catch (Throwable t) { - t.printStackTrace(); - throw new RuntimeException("Unexpected", t); - } - } - } - return super.loadClass(name, resolve); - } - } - - static int numTests = 0; - static int failed = 0; - static boolean isAttachingAgent = false; - static Instrumentation instrumentation; - - public static void main(String args[]) throws Throwable { - System.out.println("INFO: AppCDSv1 " + (wb.isSharedClass(InstrumentationApp.class) ? "enabled" :"disabled")); - System.out.println("INFO: AppCDSv2 " + (isAppCDSV2Enabled() ? "enabled" : "disabled")); - - String flagFile = args[0]; - File bootJar = new File(args[1]); - File appJar = new File(args[2]); - File custJar = new File(args[3]); - waitAttach(flagFile); - - instrumentation = InstrumentationRegisterClassFileTransformer.getInstrumentation(); - System.out.println("INFO: instrumentation = " + instrumentation); - - testBootstrapCDS("Bootstrap Loader", bootJar); - testAppCDSv1("Application Loader", appJar); - - if (isAppCDSV2Enabled()) { - testAppCDSv2("Custom Loader (unregistered)", custJar); - } - - if (failed > 0) { - throw new RuntimeException("FINAL RESULT: " + failed + " out of " + numTests + " test case(s) have failed"); - } else { - System.out.println("FINAL RESULT: All " + numTests + " test case(s) have passed!"); - } - } - - static void waitAttach(String flagFile) throws Throwable { - // See InstrumentationTest.java for the hand-shake protocol. - if (!flagFile.equals("noattach")) { - File f = new File(flagFile); - try (FileWriter fw = new FileWriter(f)) { - long pid = ProcessHandle.current().pid(); - System.out.println("my pid = " + pid); - fw.write(Long.toString(pid)); - fw.write("\n"); - for (int i=0; i<10; i++) { - // Parent process waits until we have written more than 100 bytes, so it won't - // read a partial pid - fw.write("=========="); - } - fw.close(); - } - - long start = System.currentTimeMillis(); - while (f.exists()) { - long elapsed = System.currentTimeMillis() - start; - System.out.println(".... (" + elapsed + ") waiting for deletion of " + f); - Thread.sleep(1000); - } - System.out.println("Attach succeeded (child)"); - isAttachingAgent = true; - } - } - - static void testBootstrapCDS(String group, File jar) throws Throwable { - doTest(group, new Bar(), jar); - } - - static void testAppCDSv1(String group, File jar) throws Throwable { - doTest(group, new Foo(), jar); - } - - static void testAppCDSv2(String group, File jar) throws Throwable { - URL[] urls = new URL[] {jar.toURI().toURL()}; - MyLoader loader = new MyLoader(urls, InstrumentationApp.class.getClassLoader(), jar); - Class klass = loader.loadClass(COO_CLASS_NAME); - doTest(group, (Intf)klass.newInstance(), jar); - } - - static void doTest(String group, Intf object, File jar) throws Throwable { - Class klass = object.getClass(); - System.out.println(); - System.out.println("++++++++++++++++++++++++++"); - System.out.println("Test group: " + group); - System.out.println("Testing with classloader = " + klass.getClassLoader()); - System.out.println("Testing with class = " + klass); - System.out.println("++++++++++++++++++++++++++"); - - // Initial transform - String f = object.get(); - assertTrue(f.equals("fuzz"), "object.get(): Initial transform should give 'fuzz'", f); - - // Retransform - f = "(failed)"; - try { - instrumentation.retransformClasses(klass); - f = object.get(); - } catch (UnmodifiableClassException|UnsupportedOperationException e) { - e.printStackTrace(); - } - assertTrue(f.equals("guzz"), "object.get(): retransformation should give 'guzz'", f); - - // Redefine - byte[] buff = Util.getClassFileFromJar(jar, klass.getName()); - Util.replace(buff, "buzz", "huzz"); - f = "(failed)"; - try { - instrumentation.redefineClasses(new ClassDefinition(klass, buff)); - f = object.get(); - } catch (UnmodifiableClassException|UnsupportedOperationException e) { - e.printStackTrace(); - } - assertTrue(f.equals("quzz"), "object.get(): redefinition should give 'quzz'", f); - - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++ (done)\n\n"); - } - - private static void assertTrue(boolean expr, String msg, String string) { - numTests ++; - System.out.printf("Test case %2d ", numTests); - - if (expr) { - System.out.println("PASSED: " + msg + " and we got '" + string + "'"); - } else { - failed ++; - System.out.println("FAILED: " + msg + " but we got '" + string + "'"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/InstrumentationApp.java 2019-07-24 08:27:49.365468301 -0400 @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.instrument.ClassDefinition; +import java.lang.instrument.Instrumentation; +import java.lang.instrument.UnmodifiableClassException; +import java.net.URL; +import java.net.URLClassLoader; +import java.io.File; +import java.io.FileWriter; +import java.security.CodeSigner; +import java.security.CodeSource; +import java.security.ProtectionDomain; +import sun.hotspot.WhiteBox; + +public class InstrumentationApp { + static WhiteBox wb = WhiteBox.getWhiteBox(); + + public static final String COO_CLASS_NAME = "InstrumentationApp$Coo"; + + public static interface Intf { // Loaded from Boot class loader (-Xbootclasspath/a). + public String get(); + } + public static class Bar implements Intf { // Loaded from Boot class loader. + public String get() { + // The initial transform: + // change "buzz" -> "fuzz" + // The re-transform: + // change "buzz" -> "guzz" + return "buzz"; + } + } + public static class Foo implements Intf { // Loaded from AppClassLoader, or from a custom loader + public String get() { + // The initial transform: + // change "buzz" -> "fuzz" + // The re-transform: + // change "buzz" -> "guzz" + return "buzz"; + } + } + public static class Coo implements Intf { // Loaded from custom class loader. + public String get() { + // The initial transform: + // change "buzz" -> "fuzz" + // The re-transform: + // change "buzz" -> "guzz" + return "buzz"; + } + } + + // This class file should be archived if AppCDSv2 is enabled on this platform. See + // the comments around the call to TestCommon.dump in InstrumentationTest.java. + public static class ArchivedIfAppCDSv2Enabled {} + + public static boolean isAppCDSV2Enabled() { + return wb.isSharedClass(ArchivedIfAppCDSv2Enabled.class); + } + + public static class MyLoader extends URLClassLoader { + public MyLoader(URL[] urls, ClassLoader parent, File jar) { + super(urls, parent); + this.jar = jar; + } + File jar; + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + synchronized (getClassLoadingLock(name)) { + // First, check if the class has already been loaded + Class clz = findLoadedClass(name); + if (clz != null) { + return clz; + } + + if (name.equals(COO_CLASS_NAME)) { + try { + byte[] buff = Util.getClassFileFromJar(jar, name); + return defineClass(name, buff, 0, buff.length); + } catch (Throwable t) { + t.printStackTrace(); + throw new RuntimeException("Unexpected", t); + } + } + } + return super.loadClass(name, resolve); + } + } + + static int numTests = 0; + static int failed = 0; + static boolean isAttachingAgent = false; + static Instrumentation instrumentation; + + public static void main(String args[]) throws Throwable { + System.out.println("INFO: AppCDSv1 " + (wb.isSharedClass(InstrumentationApp.class) ? "enabled" :"disabled")); + System.out.println("INFO: AppCDSv2 " + (isAppCDSV2Enabled() ? "enabled" : "disabled")); + + String flagFile = args[0]; + File bootJar = new File(args[1]); + File appJar = new File(args[2]); + File custJar = new File(args[3]); + waitAttach(flagFile); + + instrumentation = InstrumentationRegisterClassFileTransformer.getInstrumentation(); + System.out.println("INFO: instrumentation = " + instrumentation); + + testBootstrapCDS("Bootstrap Loader", bootJar); + testAppCDSv1("Application Loader", appJar); + + if (isAppCDSV2Enabled()) { + testAppCDSv2("Custom Loader (unregistered)", custJar); + } + + if (failed > 0) { + throw new RuntimeException("FINAL RESULT: " + failed + " out of " + numTests + " test case(s) have failed"); + } else { + System.out.println("FINAL RESULT: All " + numTests + " test case(s) have passed!"); + } + } + + static void waitAttach(String flagFile) throws Throwable { + // See InstrumentationTest.java for the hand-shake protocol. + if (!flagFile.equals("noattach")) { + File f = new File(flagFile); + try (FileWriter fw = new FileWriter(f)) { + long pid = ProcessHandle.current().pid(); + System.out.println("my pid = " + pid); + fw.write(Long.toString(pid)); + fw.write("\n"); + for (int i=0; i<10; i++) { + // Parent process waits until we have written more than 100 bytes, so it won't + // read a partial pid + fw.write("=========="); + } + fw.close(); + } + + long start = System.currentTimeMillis(); + while (f.exists()) { + long elapsed = System.currentTimeMillis() - start; + System.out.println(".... (" + elapsed + ") waiting for deletion of " + f); + Thread.sleep(1000); + } + System.out.println("Attach succeeded (child)"); + isAttachingAgent = true; + } + } + + static void testBootstrapCDS(String group, File jar) throws Throwable { + doTest(group, new Bar(), jar); + } + + static void testAppCDSv1(String group, File jar) throws Throwable { + doTest(group, new Foo(), jar); + } + + static void testAppCDSv2(String group, File jar) throws Throwable { + URL[] urls = new URL[] {jar.toURI().toURL()}; + MyLoader loader = new MyLoader(urls, InstrumentationApp.class.getClassLoader(), jar); + Class klass = loader.loadClass(COO_CLASS_NAME); + doTest(group, (Intf)klass.newInstance(), jar); + } + + static void doTest(String group, Intf object, File jar) throws Throwable { + Class klass = object.getClass(); + System.out.println(); + System.out.println("++++++++++++++++++++++++++"); + System.out.println("Test group: " + group); + System.out.println("Testing with classloader = " + klass.getClassLoader()); + System.out.println("Testing with class = " + klass); + System.out.println("++++++++++++++++++++++++++"); + + // Initial transform + String f = object.get(); + assertTrue(f.equals("fuzz"), "object.get(): Initial transform should give 'fuzz'", f); + + // Retransform + f = "(failed)"; + try { + instrumentation.retransformClasses(klass); + f = object.get(); + } catch (UnmodifiableClassException|UnsupportedOperationException e) { + e.printStackTrace(); + } + assertTrue(f.equals("guzz"), "object.get(): retransformation should give 'guzz'", f); + + // Redefine + byte[] buff = Util.getClassFileFromJar(jar, klass.getName()); + Util.replace(buff, "buzz", "huzz"); + f = "(failed)"; + try { + instrumentation.redefineClasses(new ClassDefinition(klass, buff)); + f = object.get(); + } catch (UnmodifiableClassException|UnsupportedOperationException e) { + e.printStackTrace(); + } + assertTrue(f.equals("quzz"), "object.get(): redefinition should give 'quzz'", f); + + System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++ (done)\n\n"); + } + + private static void assertTrue(boolean expr, String msg, String string) { + numTests ++; + System.out.printf("Test case %2d ", numTests); + + if (expr) { + System.out.println("PASSED: " + msg + " and we got '" + string + "'"); + } else { + failed ++; + System.out.println("FAILED: " + msg + " but we got '" + string + "'"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationClassFileTransformer.java 2019-07-24 08:27:50.017468278 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.IllegalClassFormatException; -import java.security.ProtectionDomain; - -// Note: Util is from /test/hotspot/jtreg/runtime/appcds/test-classes/TestCommon.java - -public class InstrumentationClassFileTransformer implements ClassFileTransformer { - public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, - ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { - - if (name.startsWith("InstrumentationApp$") && !name.equals("InstrumentationApp$NotTransformed")) { - System.out.println("Transforming: " + name + " class = " + classBeingRedefined); - try { - if (classBeingRedefined == null) { - // Initial transform - replace(buffer, "buzz", "fuzz"); - } else { - replace(buffer, "buzz", "guzz"); // Retransform - replace(buffer, "huzz", "quzz"); // Redefine - } - } catch (Throwable t) { - t.printStackTrace(); - } - return buffer; - } - return null; - } - - static void replace(byte[] buffer, String from, String to) { - int n = Util.replace(buffer, from, to); - System.out.println("..... replaced " + n + " occurrence(s) of '" + from + "' to '" + to + "'"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/InstrumentationClassFileTransformer.java 2019-07-24 08:27:49.693468289 -0400 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; + +// Note: Util is from /test/hotspot/jtreg/runtime/cds/test-classes/TestCommon.java + +public class InstrumentationClassFileTransformer implements ClassFileTransformer { + public byte[] transform(ClassLoader loader, String name, Class classBeingRedefined, + ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException { + + if (name.startsWith("InstrumentationApp$") && !name.equals("InstrumentationApp$NotTransformed")) { + System.out.println("Transforming: " + name + " class = " + classBeingRedefined); + try { + if (classBeingRedefined == null) { + // Initial transform + replace(buffer, "buzz", "fuzz"); + } else { + replace(buffer, "buzz", "guzz"); // Retransform + replace(buffer, "huzz", "quzz"); // Redefine + } + } catch (Throwable t) { + t.printStackTrace(); + } + return buffer; + } + return null; + } + + static void replace(byte[] buffer, String from, String to) { + int n = Util.replace(buffer, from, to); + System.out.println("..... replaced " + n + " occurrence(s) of '" + from + "' to '" + to + "'"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationRegisterClassFileTransformer.java 2019-07-24 08:27:50.425468264 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.Instrumentation; - -// This class is available on the classpath so it can be accessed by InstrumentationApp -public class InstrumentationRegisterClassFileTransformer { - private static Instrumentation savedInstrumentation; - - public static void premain(String agentArguments, Instrumentation instrumentation) { - System.out.println("InstrumentationRegisterClassFileTransformer.premain() is called"); - instrumentation.addTransformer(new InstrumentationClassFileTransformer(), /*canRetransform=*/true); - savedInstrumentation = instrumentation; - } - - public static Instrumentation getInstrumentation() { - return savedInstrumentation; - } - - public static void agentmain(String args, Instrumentation inst) throws Exception { - premain(args, inst); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/InstrumentationRegisterClassFileTransformer.java 2019-07-24 08:27:50.109468275 -0400 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.Instrumentation; + +// This class is available on the classpath so it can be accessed by InstrumentationApp +public class InstrumentationRegisterClassFileTransformer { + private static Instrumentation savedInstrumentation; + + public static void premain(String agentArguments, Instrumentation instrumentation) { + System.out.println("InstrumentationRegisterClassFileTransformer.premain() is called"); + instrumentation.addTransformer(new InstrumentationClassFileTransformer(), /*canRetransform=*/true); + savedInstrumentation = instrumentation; + } + + public static Instrumentation getInstrumentation() { + return savedInstrumentation; + } + + public static void agentmain(String args, Instrumentation inst) throws Exception { + premain(args, inst); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationTest.java 2019-07-24 08:27:50.805468251 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,283 +0,0 @@ -/* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Exercise the java.lang.instrument.Instrumentation APIs on classes archived - * using CDS/AppCDSv1/AppCDSv2. - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @build sun.hotspot.WhiteBox - * InstrumentationApp - * InstrumentationClassFileTransformer - * InstrumentationRegisterClassFileTransformer - * @run main/othervm InstrumentationTest - */ - -// Note: TestCommon is from /test/hotspot/jtreg/runtime/appcds/TestCommon.java -// Note: Util is from /test/hotspot/jtreg/runtime/appcds/test-classes/TestCommon.java - -import com.sun.tools.attach.VirtualMachine; -import java.io.File; -import java.io.FileInputStream; -import java.util.Scanner; -import jdk.test.lib.Asserts; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class InstrumentationTest { - public static String bootClasses[] = { - "InstrumentationApp$Intf", - "InstrumentationApp$Bar", - "sun.hotspot.WhiteBox", - }; - public static String appClasses[] = { - "InstrumentationApp", - "InstrumentationApp$Foo", - "InstrumentationApp$MyLoader", - }; - public static String custClasses[] = { - "InstrumentationApp$Coo", - }; - public static String sharedClasses[] = TestCommon.concat(bootClasses, appClasses); - - public static String agentClasses[] = { - "InstrumentationClassFileTransformer", - "InstrumentationRegisterClassFileTransformer", - "Util", - }; - - public static void main(String[] args) throws Throwable { - runTest(false); - runTest(true); - } - - public static void runTest(boolean attachAgent) throws Throwable { - String bootJar = - ClassFileInstaller.writeJar("InstrumentationBoot.jar", bootClasses); - String appJar = - ClassFileInstaller.writeJar("InstrumentationApp.jar", - TestCommon.concat(appClasses, - "InstrumentationApp$ArchivedIfAppCDSv2Enabled")); - String custJar = - ClassFileInstaller.writeJar("InstrumentationCust.jar", custClasses); - String agentJar = - ClassFileInstaller.writeJar("InstrumentationAgent.jar", - ClassFileInstaller.Manifest.fromSourceFile("InstrumentationAgent.mf"), - agentClasses); - - String bootCP = "-Xbootclasspath/a:" + bootJar; - - System.out.println(""); - System.out.println("============================================================"); - System.out.println("CDS: NO, attachAgent: " + (attachAgent ? "YES" : "NO")); - System.out.println("============================================================"); - System.out.println(""); - - String agentCmdArg, flagFile; - if (attachAgent) { - // we will attach the agent, so don't specify -javaagent in the command line. We'll use - // something harmless like -showversion to make it easier to construct the command line - agentCmdArg = "-showversion"; - } else { - agentCmdArg = "-javaagent:" + agentJar; - } - - // First, run the test class directly, w/o sharing, as a baseline reference - flagFile = getFlagFile(attachAgent); - AgentAttachThread t = doAttach(attachAgent, flagFile, agentJar); - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - bootCP, - "-cp", appJar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-Xshare:off", - agentCmdArg, - "InstrumentationApp", flagFile, bootJar, appJar, custJar); - TestCommon.executeAndLog(pb, "no-sharing").shouldHaveExitValue(0); - checkAttach(t); - - // Dump the AppCDS archive. On some platforms AppCDSv2 may not be enabled, so we - // first try the v2 classlist, and if that fails, revert to the v1 classlist. - // Note that the InstrumentationApp$ArchivedIfAppCDSv2Enabled class is archived - // only if V2 is enabled. This is tested by InstrumentationApp.isAppCDSV2Enabled(). - String[] v2Classes = { - "InstrumentationApp$ArchivedIfAppCDSv2Enabled", - "java/lang/Object id: 0", - "InstrumentationApp$Intf id: 1", - "InstrumentationApp$Coo id: 2 super: 0 interfaces: 1 source: " + custJar, - }; - String[] sharedClassesWithV2 = TestCommon.concat(v2Classes, sharedClasses); - OutputAnalyzer out = TestCommon.dump(appJar, sharedClassesWithV2, bootCP); - if (out.getExitValue() != 0) { - System.out.println("Redumping with AppCDSv2 disabled"); - TestCommon.testDump(appJar, sharedClasses, bootCP); - } - - // Run with AppCDS. - System.out.println(""); - System.out.println("============================================================"); - System.out.println("CDS: YES, attachAgent: " + (attachAgent ? "YES" : "NO")); - System.out.println("============================================================"); - System.out.println(""); - - flagFile = getFlagFile(attachAgent); - t = doAttach(attachAgent, flagFile, agentJar); - out = TestCommon.execAuto("-cp", appJar, - bootCP, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - agentCmdArg, - "InstrumentationApp", flagFile, bootJar, appJar, custJar); - - CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); - TestCommon.checkExec(out, opts); - checkAttach(t); - } - - static int flagFileSerial = 1; - static private String getFlagFile(boolean attachAgent) { - if (attachAgent) { - // Do not reuse the same file name as Windows may fail to - // delete the file. - return "attach.flag." + ProcessHandle.current().pid() + - "." + (flagFileSerial++) + "." + System.currentTimeMillis(); - } else { - return "noattach"; - } - } - - static AgentAttachThread doAttach(boolean attachAgent, String flagFile, String agentJar) throws Throwable { - if (!attachAgent) { - return null; - } - - // Hand-shake protocol with the child process - // [1] Parent process (this process) launches child process (InstrumentationApp) - // and then waits until child process writes its pid into the flagFile. - // [2] Child process process starts up, writes its pid into the flagFile, - // and waits for the flagFile to be deleted. - // [3] When parent process gets the pid, it attaches to the child process - // (if we attempt to attach to a process too early, the SIGQUIT - // may cause the child to die) and deletes the flagFile. - // [4] Child process resumes execution. - - File f = new File(flagFile); - f.delete(); - if (f.exists()) { - throw new RuntimeException("Flag file should not exist: " + f); - } - - // At this point, the child process is not yet launched. Note that - // TestCommon.exec() and OutputAnalyzer.OutputAnalyzer() both block - // until the child process has finished. - // - // So, we will launch a AgentAttachThread which will poll the flagFile - // until the child process is launched. - AgentAttachThread t = new AgentAttachThread(flagFile, agentJar); - t.start(); - return t; - } - - static void checkAttach(AgentAttachThread thread) throws Throwable { - if (thread != null) { - thread.check(); - } - } - - static class AgentAttachThread extends Thread { - String flagFile; - String agentJar; - volatile boolean succeeded; - - AgentAttachThread(String flagFile, String agentJar) { - this.flagFile = flagFile; - this.agentJar = agentJar; - this.succeeded = false; - } - - static String getPid(String flagFile) throws Throwable { - while (true) { - // Keep polling until the child process has been launched. If for some - // reason the child process fails to launch, this test will be terminated - // by JTREG's time-out mechanism. - Thread.sleep(100); - File f = new File(flagFile); - if (f.exists() && f.length() > 100) { - try (FileInputStream in = new FileInputStream(f)) { - Scanner scanner = new Scanner(in); - return Long.toString(scanner.nextLong()); - } catch (Throwable t) { - // This may happen on Windows if the child process has not - // fully closed the output stream to the flagFile - System.out.println("Ignored: " + t); - t.printStackTrace(System.out); - continue; - } - } - } - } - - public void run() { - try { - String pid = getPid(flagFile); - System.out.println("child pid = " + pid); - VirtualMachine vm = VirtualMachine.attach(pid); - System.out.println(agentJar); - vm.loadAgent(agentJar); - } catch (Throwable t) { - t.printStackTrace(); - throw new RuntimeException(t); - } - - // Delete the flagFile to indicate to the child process that we - // have attached to it, so it should proceed. - File f = new File(flagFile); - for (int i=0; i<5; i++) { - // The detele may fail on Windows if the child JVM is checking - // f.exists() at exactly the same time?? Let's do a little - // dance. - f.delete(); - try { - Thread.sleep(10); - } catch (Throwable t) {;} - } - if (f.exists()) { - throw new RuntimeException("Failed to delete " + f); - } - System.out.println("Attach succeeded (parent)"); - succeeded = true; - } - - void check() throws Throwable { - super.join(); - if (!succeeded) { - throw new RuntimeException("Attaching agent to child VM failed"); - } - } - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/InstrumentationTest.java 2019-07-24 08:27:50.477468262 -0400 @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Exercise the java.lang.instrument.Instrumentation APIs on classes archived + * using CDS/AppCDSv1/AppCDSv2. + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @build sun.hotspot.WhiteBox + * InstrumentationApp + * InstrumentationClassFileTransformer + * InstrumentationRegisterClassFileTransformer + * @run main/othervm InstrumentationTest + */ + +// Note: TestCommon is from /test/hotspot/jtreg/runtime/cds/TestCommon.java +// Note: Util is from /test/hotspot/jtreg/runtime/cds/test-classes/TestCommon.java + +import com.sun.tools.attach.VirtualMachine; +import java.io.File; +import java.io.FileInputStream; +import java.util.Scanner; +import jdk.test.lib.Asserts; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class InstrumentationTest { + public static String bootClasses[] = { + "InstrumentationApp$Intf", + "InstrumentationApp$Bar", + "sun.hotspot.WhiteBox", + }; + public static String appClasses[] = { + "InstrumentationApp", + "InstrumentationApp$Foo", + "InstrumentationApp$MyLoader", + }; + public static String custClasses[] = { + "InstrumentationApp$Coo", + }; + public static String sharedClasses[] = TestCommon.concat(bootClasses, appClasses); + + public static String agentClasses[] = { + "InstrumentationClassFileTransformer", + "InstrumentationRegisterClassFileTransformer", + "Util", + }; + + public static void main(String[] args) throws Throwable { + runTest(false); + runTest(true); + } + + public static void runTest(boolean attachAgent) throws Throwable { + String bootJar = + ClassFileInstaller.writeJar("InstrumentationBoot.jar", bootClasses); + String appJar = + ClassFileInstaller.writeJar("InstrumentationApp.jar", + TestCommon.concat(appClasses, + "InstrumentationApp$ArchivedIfAppCDSv2Enabled")); + String custJar = + ClassFileInstaller.writeJar("InstrumentationCust.jar", custClasses); + String agentJar = + ClassFileInstaller.writeJar("InstrumentationAgent.jar", + ClassFileInstaller.Manifest.fromSourceFile("InstrumentationAgent.mf"), + agentClasses); + + String bootCP = "-Xbootclasspath/a:" + bootJar; + + System.out.println(""); + System.out.println("============================================================"); + System.out.println("CDS: NO, attachAgent: " + (attachAgent ? "YES" : "NO")); + System.out.println("============================================================"); + System.out.println(""); + + String agentCmdArg, flagFile; + if (attachAgent) { + // we will attach the agent, so don't specify -javaagent in the command line. We'll use + // something harmless like -showversion to make it easier to construct the command line + agentCmdArg = "-showversion"; + } else { + agentCmdArg = "-javaagent:" + agentJar; + } + + // First, run the test class directly, w/o sharing, as a baseline reference + flagFile = getFlagFile(attachAgent); + AgentAttachThread t = doAttach(attachAgent, flagFile, agentJar); + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + bootCP, + "-cp", appJar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xshare:off", + agentCmdArg, + "InstrumentationApp", flagFile, bootJar, appJar, custJar); + TestCommon.executeAndLog(pb, "no-sharing").shouldHaveExitValue(0); + checkAttach(t); + + // Dump the AppCDS archive. On some platforms AppCDSv2 may not be enabled, so we + // first try the v2 classlist, and if that fails, revert to the v1 classlist. + // Note that the InstrumentationApp$ArchivedIfAppCDSv2Enabled class is archived + // only if V2 is enabled. This is tested by InstrumentationApp.isAppCDSV2Enabled(). + String[] v2Classes = { + "InstrumentationApp$ArchivedIfAppCDSv2Enabled", + "java/lang/Object id: 0", + "InstrumentationApp$Intf id: 1", + "InstrumentationApp$Coo id: 2 super: 0 interfaces: 1 source: " + custJar, + }; + String[] sharedClassesWithV2 = TestCommon.concat(v2Classes, sharedClasses); + OutputAnalyzer out = TestCommon.dump(appJar, sharedClassesWithV2, bootCP); + if (out.getExitValue() != 0) { + System.out.println("Redumping with AppCDSv2 disabled"); + TestCommon.testDump(appJar, sharedClasses, bootCP); + } + + // Run with AppCDS. + System.out.println(""); + System.out.println("============================================================"); + System.out.println("CDS: YES, attachAgent: " + (attachAgent ? "YES" : "NO")); + System.out.println("============================================================"); + System.out.println(""); + + flagFile = getFlagFile(attachAgent); + t = doAttach(attachAgent, flagFile, agentJar); + out = TestCommon.execAuto("-cp", appJar, + bootCP, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + agentCmdArg, + "InstrumentationApp", flagFile, bootJar, appJar, custJar); + + CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); + TestCommon.checkExec(out, opts); + checkAttach(t); + } + + static int flagFileSerial = 1; + static private String getFlagFile(boolean attachAgent) { + if (attachAgent) { + // Do not reuse the same file name as Windows may fail to + // delete the file. + return "attach.flag." + ProcessHandle.current().pid() + + "." + (flagFileSerial++) + "." + System.currentTimeMillis(); + } else { + return "noattach"; + } + } + + static AgentAttachThread doAttach(boolean attachAgent, String flagFile, String agentJar) throws Throwable { + if (!attachAgent) { + return null; + } + + // Hand-shake protocol with the child process + // [1] Parent process (this process) launches child process (InstrumentationApp) + // and then waits until child process writes its pid into the flagFile. + // [2] Child process process starts up, writes its pid into the flagFile, + // and waits for the flagFile to be deleted. + // [3] When parent process gets the pid, it attaches to the child process + // (if we attempt to attach to a process too early, the SIGQUIT + // may cause the child to die) and deletes the flagFile. + // [4] Child process resumes execution. + + File f = new File(flagFile); + f.delete(); + if (f.exists()) { + throw new RuntimeException("Flag file should not exist: " + f); + } + + // At this point, the child process is not yet launched. Note that + // TestCommon.exec() and OutputAnalyzer.OutputAnalyzer() both block + // until the child process has finished. + // + // So, we will launch a AgentAttachThread which will poll the flagFile + // until the child process is launched. + AgentAttachThread t = new AgentAttachThread(flagFile, agentJar); + t.start(); + return t; + } + + static void checkAttach(AgentAttachThread thread) throws Throwable { + if (thread != null) { + thread.check(); + } + } + + static class AgentAttachThread extends Thread { + String flagFile; + String agentJar; + volatile boolean succeeded; + + AgentAttachThread(String flagFile, String agentJar) { + this.flagFile = flagFile; + this.agentJar = agentJar; + this.succeeded = false; + } + + static String getPid(String flagFile) throws Throwable { + while (true) { + // Keep polling until the child process has been launched. If for some + // reason the child process fails to launch, this test will be terminated + // by JTREG's time-out mechanism. + Thread.sleep(100); + File f = new File(flagFile); + if (f.exists() && f.length() > 100) { + try (FileInputStream in = new FileInputStream(f)) { + Scanner scanner = new Scanner(in); + return Long.toString(scanner.nextLong()); + } catch (Throwable t) { + // This may happen on Windows if the child process has not + // fully closed the output stream to the flagFile + System.out.println("Ignored: " + t); + t.printStackTrace(System.out); + continue; + } + } + } + } + + public void run() { + try { + String pid = getPid(flagFile); + System.out.println("child pid = " + pid); + VirtualMachine vm = VirtualMachine.attach(pid); + System.out.println(agentJar); + vm.loadAgent(agentJar); + } catch (Throwable t) { + t.printStackTrace(); + throw new RuntimeException(t); + } + + // Delete the flagFile to indicate to the child process that we + // have attached to it, so it should proceed. + File f = new File(flagFile); + for (int i=0; i<5; i++) { + // The detele may fail on Windows if the child JVM is checking + // f.exists() at exactly the same time?? Let's do a little + // dance. + f.delete(); + try { + Thread.sleep(10); + } catch (Throwable t) {;} + } + if (f.exists()) { + throw new RuntimeException("Failed to delete " + f); + } + System.out.println("Attach succeeded (parent)"); + succeeded = true; + } + + void check() throws Throwable { + super.join(); + if (!succeeded) { + throw new RuntimeException("Attaching agent to child VM failed"); + } + } + } +} + --- old/test/hotspot/jtreg/runtime/appcds/jvmti/dumpingWithAgent/DumpingWithJavaAgent.java 2019-07-24 08:27:51.197468237 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary CDS dumping with java agent. - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @modules jdk.jartool/sun.tools.jar - * @build SimpleAgent Hello - * @run main/othervm DumpingWithJavaAgent - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class DumpingWithJavaAgent { - public static String appClasses[] = { - "Hello", - }; - public static String agentClasses[] = { - "SimpleAgent", - }; - - public static String warningMessages[] = { - "This archive was created with AllowArchivingWithJavaAgent", - "It should be used for testing purposes only and should not be used in a production environment", - }; - - public static String errorMessage = - "The setting of the AllowArchivingWithJavaAgent is different from the setting in the shared archive."; - - - public static String diagnosticOption = "-XX:+AllowArchivingWithJavaAgent"; - - public static void main(String[] args) throws Throwable { - String agentJar = - ClassFileInstaller.writeJar("SimpleAgent.jar", - ClassFileInstaller.Manifest.fromSourceFile("SimpleAgent.mf"), - agentClasses); - - String appJar = - ClassFileInstaller.writeJar("DumpingWithJavaAgent.jar", appClasses); - - // CDS dumping with a java agent with the AllowArchvingWithJavaAgent diagnostic option. - OutputAnalyzer output = TestCommon.testDump(appJar, TestCommon.list("Hello"), - "-XX:+UnlockDiagnosticVMOptions", diagnosticOption, - "-javaagent:" + agentJar); - TestCommon.checkDump(output); - output.shouldContain(warningMessages[0]); - output.shouldContain(warningMessages[1]); - output.shouldContain("inside SimpleAgent"); - - // Using the archive with the AllowArchvingWithJavaAgent diagnostic option. - output = TestCommon.exec( - appJar, - "-Xlog:class+load=trace", - "-XX:+UnlockDiagnosticVMOptions", diagnosticOption, - "Hello"); - if (!TestCommon.isUnableToMap(output)) { - output.shouldHaveExitValue(0); - output.shouldContain(warningMessages[0]); - output.shouldContain(warningMessages[1]); - output.shouldContain("[class,load] Hello source: shared objects file"); - } - - // Using the archive with -Xshare:on without the diagnostic option. - // VM should exit with an error message. - output = TestCommon.exec( - appJar, - "Hello"); - output.shouldHaveExitValue(1); - output.shouldContain(errorMessage); - - // Using the archive with -Xshare:auto without the diagnostic option. - // VM should continue execution with a warning message. The archive - // will not be used. - output = TestCommon.execAuto( - "-cp", appJar, - "-Xlog:class+load=trace,cds=info", - "Hello"); - if (!TestCommon.isUnableToMap(output)) { - output.shouldHaveExitValue(0); - output.shouldContain(errorMessage); - output.shouldMatch(".class.load.* Hello source:.*DumpingWithJavaAgent.jar"); - - // CDS dumping with a java agent without the AllowArchvingWithJavaAgent diagnostic option. - // VM will exit with an error message. - output = TestCommon.dump(appJar, TestCommon.list("Hello"), - "-javaagent:" + agentJar); - } - output.shouldContain("Must enable AllowArchivingWithJavaAgent in order to run Java agent during CDS dumping") - .shouldHaveExitValue(1); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/dumpingWithAgent/DumpingWithJavaAgent.java 2019-07-24 08:27:50.893468248 -0400 @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary CDS dumping with java agent. + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @modules jdk.jartool/sun.tools.jar + * @build SimpleAgent Hello + * @run main/othervm DumpingWithJavaAgent + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class DumpingWithJavaAgent { + public static String appClasses[] = { + "Hello", + }; + public static String agentClasses[] = { + "SimpleAgent", + }; + + public static String warningMessages[] = { + "This archive was created with AllowArchivingWithJavaAgent", + "It should be used for testing purposes only and should not be used in a production environment", + }; + + public static String errorMessage = + "The setting of the AllowArchivingWithJavaAgent is different from the setting in the shared archive."; + + + public static String diagnosticOption = "-XX:+AllowArchivingWithJavaAgent"; + + public static void main(String[] args) throws Throwable { + String agentJar = + ClassFileInstaller.writeJar("SimpleAgent.jar", + ClassFileInstaller.Manifest.fromSourceFile("SimpleAgent.mf"), + agentClasses); + + String appJar = + ClassFileInstaller.writeJar("DumpingWithJavaAgent.jar", appClasses); + + // CDS dumping with a java agent with the AllowArchvingWithJavaAgent diagnostic option. + OutputAnalyzer output = TestCommon.testDump(appJar, TestCommon.list("Hello"), + "-XX:+UnlockDiagnosticVMOptions", diagnosticOption, + "-javaagent:" + agentJar); + TestCommon.checkDump(output); + output.shouldContain(warningMessages[0]); + output.shouldContain(warningMessages[1]); + output.shouldContain("inside SimpleAgent"); + + // Using the archive with the AllowArchvingWithJavaAgent diagnostic option. + output = TestCommon.exec( + appJar, + "-Xlog:class+load=trace", + "-XX:+UnlockDiagnosticVMOptions", diagnosticOption, + "Hello"); + if (!TestCommon.isUnableToMap(output)) { + output.shouldHaveExitValue(0); + output.shouldContain(warningMessages[0]); + output.shouldContain(warningMessages[1]); + output.shouldContain("[class,load] Hello source: shared objects file"); + } + + // Using the archive with -Xshare:on without the diagnostic option. + // VM should exit with an error message. + output = TestCommon.exec( + appJar, + "Hello"); + output.shouldHaveExitValue(1); + output.shouldContain(errorMessage); + + // Using the archive with -Xshare:auto without the diagnostic option. + // VM should continue execution with a warning message. The archive + // will not be used. + output = TestCommon.execAuto( + "-cp", appJar, + "-Xlog:class+load=trace,cds=info", + "Hello"); + if (!TestCommon.isUnableToMap(output)) { + output.shouldHaveExitValue(0); + output.shouldContain(errorMessage); + output.shouldMatch(".class.load.* Hello source:.*DumpingWithJavaAgent.jar"); + + // CDS dumping with a java agent without the AllowArchvingWithJavaAgent diagnostic option. + // VM will exit with an error message. + output = TestCommon.dump(appJar, TestCommon.list("Hello"), + "-javaagent:" + agentJar); + } + output.shouldContain("Must enable AllowArchivingWithJavaAgent in order to run Java agent during CDS dumping") + .shouldHaveExitValue(1); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/dumpingWithAgent/DumpingWithJvmtiAgent.java 2019-07-24 08:27:51.505468226 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @summary CDS dumping with JVMTI agent. - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @compile ../../test-classes/Hello.java - * @run main/othervm/native DumpingWithJvmtiAgent - */ - -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; -import jdk.test.lib.process.OutputAnalyzer; - -public class DumpingWithJvmtiAgent { - private static final String AGENT_LIB_ONLOAD = "AddToSystemCLSearchOnLoad"; - - public static void main(String[] args) throws Exception { - String appJar = JarBuilder.getOrCreateHelloJar(); - - // CDS dump with a JVMTI agent with the AllowArchivingWithJavaAgent option. - // vm should exit with an error message. - OutputAnalyzer out = TestCommon.dump( - appJar, - TestCommon.list("Hello"), - "-XX:+UnlockDiagnosticVMOptions", "-XX:+AllowArchivingWithJavaAgent", - "-agentlib:" + AGENT_LIB_ONLOAD + "=" + appJar, - "-Djava.library.path=" + System.getProperty("java.library.path")); - out.shouldContain("CDS dumping does not support native JVMTI agent, name: " + AGENT_LIB_ONLOAD) - .shouldHaveExitValue(1); - - // CDS dump with a JVMTI agent without the AllowArchivingWithJavaAgent option. - // vm should exit with an error message. - out = TestCommon.dump( - appJar, - TestCommon.list("Hello"), - "-agentlib:" + AGENT_LIB_ONLOAD + "=" + appJar, - "-Djava.library.path=" + System.getProperty("java.library.path")); - out.shouldContain("CDS dumping does not support native JVMTI agent, name: " + AGENT_LIB_ONLOAD) - .shouldHaveExitValue(1); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/dumpingWithAgent/DumpingWithJvmtiAgent.java 2019-07-24 08:27:51.281468234 -0400 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary CDS dumping with JVMTI agent. + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @compile ../../test-classes/Hello.java + * @run main/othervm/native DumpingWithJvmtiAgent + */ + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.process.OutputAnalyzer; + +public class DumpingWithJvmtiAgent { + private static final String AGENT_LIB_ONLOAD = "AddToSystemCLSearchOnLoad"; + + public static void main(String[] args) throws Exception { + String appJar = JarBuilder.getOrCreateHelloJar(); + + // CDS dump with a JVMTI agent with the AllowArchivingWithJavaAgent option. + // vm should exit with an error message. + OutputAnalyzer out = TestCommon.dump( + appJar, + TestCommon.list("Hello"), + "-XX:+UnlockDiagnosticVMOptions", "-XX:+AllowArchivingWithJavaAgent", + "-agentlib:" + AGENT_LIB_ONLOAD + "=" + appJar, + "-Djava.library.path=" + System.getProperty("java.library.path")); + out.shouldContain("CDS dumping does not support native JVMTI agent, name: " + AGENT_LIB_ONLOAD) + .shouldHaveExitValue(1); + + // CDS dump with a JVMTI agent without the AllowArchivingWithJavaAgent option. + // vm should exit with an error message. + out = TestCommon.dump( + appJar, + TestCommon.list("Hello"), + "-agentlib:" + AGENT_LIB_ONLOAD + "=" + appJar, + "-Djava.library.path=" + System.getProperty("java.library.path")); + out.shouldContain("CDS dumping does not support native JVMTI agent, name: " + AGENT_LIB_ONLOAD) + .shouldHaveExitValue(1); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/dumpingWithAgent/SimpleAgent.java 2019-07-24 08:27:51.861468214 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -import java.lang.instrument.Instrumentation; - -public class SimpleAgent { - public static void premain(String agentArg, Instrumentation instrumentation) { - System.out.println("inside SimpleAgent"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/dumpingWithAgent/SimpleAgent.java 2019-07-24 08:27:51.593468223 -0400 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +import java.lang.instrument.Instrumentation; + +public class SimpleAgent { + public static void premain(String agentArg, Instrumentation instrumentation) { + System.out.println("inside SimpleAgent"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/dumpingWithAgent/SimpleAgent.mf 2019-07-24 08:27:52.249468200 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 -Premain-Class: SimpleAgent --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/dumpingWithAgent/SimpleAgent.mf 2019-07-24 08:27:51.909468212 -0400 @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Premain-Class: SimpleAgent --- old/test/hotspot/jtreg/runtime/appcds/jvmti/dumpingWithAgent/libAddToSystemCLSearchOnLoad.c 2019-07-24 08:27:52.617468188 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - static jvmtiEnv *jvmti = NULL; - - JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { - int err = (*jvm)->GetEnv(jvm, (void**) &jvmti, JVMTI_VERSION_9); - if (err != JNI_OK) { - return JNI_ERR; - } - err = (*jvmti)->AddToSystemClassLoaderSearch(jvmti, (const char*)options); - if (err != JVMTI_ERROR_NONE) { - return JNI_ERR; - } - return JNI_OK; - } - -#ifdef __cplusplus -} -#endif --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/dumpingWithAgent/libAddToSystemCLSearchOnLoad.c 2019-07-24 08:27:52.301468199 -0400 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + static jvmtiEnv *jvmti = NULL; + + JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { + int err = (*jvm)->GetEnv(jvm, (void**) &jvmti, JVMTI_VERSION_9); + if (err != JNI_OK) { + return JNI_ERR; + } + err = (*jvmti)->AddToSystemClassLoaderSearch(jvmti, (const char*)options); + if (err != JVMTI_ERROR_NONE) { + return JNI_ERR; + } + return JNI_OK; + } + +#ifdef __cplusplus +} +#endif --- old/test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelClassesTransform.java 2019-07-24 08:27:52.989468175 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -class ParallelClassTr0 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr1 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr2 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr3 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr4 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr5 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr6 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr7 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr8 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr9 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr10 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr11 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr12 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr13 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr14 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr15 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr16 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr17 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr18 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr19 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr20 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr21 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr22 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr23 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr24 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr25 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr26 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr27 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr28 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr29 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr30 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr31 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr32 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr33 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr34 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr35 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr36 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr37 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr38 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } -class ParallelClassTr39 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } - -class ParallelClassesTransform { - public static final int NUMBER_OF_CLASSES = 40; - public static final String BEFORE_PATTERN = "class-transform-check: this-should-be-transformed"; - public static final String AFTER_PATTERN = "class-transform-check: this-has-been--transformed"; -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/parallelLoad/ParallelClassesTransform.java 2019-07-24 08:27:52.669468186 -0400 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +class ParallelClassTr0 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr1 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr2 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr3 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr4 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr5 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr6 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr7 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr8 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr9 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr10 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr11 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr12 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr13 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr14 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr15 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr16 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr17 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr18 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr19 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr20 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr21 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr22 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr23 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr24 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr25 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr26 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr27 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr28 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr29 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr30 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr31 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr32 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr33 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr34 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr35 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr36 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr37 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr38 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } +class ParallelClassTr39 { public static String testString = ParallelClassesTransform.BEFORE_PATTERN; } + +class ParallelClassesTransform { + public static final int NUMBER_OF_CLASSES = 40; + public static final String BEFORE_PATTERN = "class-transform-check: this-should-be-transformed"; + public static final String AFTER_PATTERN = "class-transform-check: this-has-been--transformed"; +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelLoadAndTransformTest.java 2019-07-24 08:27:53.345468162 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Load app classes from CDS archive in parallel threads, - * use initial transformation (CFLH) - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * /test/hotspot/jtreg/runtime/appcds/test-classes /test/hotspot/jtreg/runtime/appcds/jvmti - * /test/hotspot/jtreg/testlibrary/jvmti - * @requires vm.cds - * @requires !vm.graal.enabled - * @modules java.base/jdk.internal.misc - * java.management - * jdk.jartool/sun.tools.jar - * java.instrument - * @build TransformUtil TransformerAgent ParallelLoad - * @run driver ParallelLoadAndTransformTest - */ -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class ParallelLoadAndTransformTest { - - public static void main(String[] args) throws Exception { - String prop = "-Dappcds.parallel.transform.mode=cflh"; - String appJar = ClassFileInstaller.writeJar("parallel_load.jar", - getClassList(true)); - String agentJar = prepareAgent(); - - TestCommon.test(appJar, getClassList(false), - "-javaagent:" + agentJar + "=ParallelClassTr.*", - prop, "ParallelLoad"); - } - - - private static String[] getClassList(boolean includeWatchdog) { - List classList = - IntStream.range(0, ParallelClassesTransform.NUMBER_OF_CLASSES) - .mapToObj(i -> "ParallelClassTr" + i) - .collect(Collectors.toList()); - - classList.add("ParallelLoad"); - classList.add("ParallelLoadThread"); - if (includeWatchdog) - classList.add("ParallelLoadWatchdog"); - - return classList.toArray(new String[0]); - } - - - // Agent is the same for all test cases - private static String prepareAgent() throws Exception { - String agentClasses[] = { - "TransformerAgent", - "TransformerAgent$SimpleTransformer", - "TransformUtil" - }; - - String manifest = "../../../../testlibrary/jvmti/TransformerAgent.mf"; - - return ClassFileInstaller.writeJar("TransformerAgent.jar", - ClassFileInstaller.Manifest.fromSourceFile(manifest), - agentClasses); - } - -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/parallelLoad/ParallelLoadAndTransformTest.java 2019-07-24 08:27:53.037468173 -0400 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Load app classes from CDS archive in parallel threads, + * use initial transformation (CFLH) + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * /test/hotspot/jtreg/runtime/cds/test-classes /test/hotspot/jtreg/runtime/cds/jvmti + * /test/hotspot/jtreg/testlibrary/jvmti + * @requires vm.cds + * @requires !vm.graal.enabled + * @modules java.base/jdk.internal.misc + * java.management + * jdk.jartool/sun.tools.jar + * java.instrument + * @build TransformUtil TransformerAgent ParallelLoad + * @run driver ParallelLoadAndTransformTest + */ +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class ParallelLoadAndTransformTest { + + public static void main(String[] args) throws Exception { + String prop = "-Dappcds.parallel.transform.mode=cflh"; + String appJar = ClassFileInstaller.writeJar("parallel_load.jar", + getClassList(true)); + String agentJar = prepareAgent(); + + TestCommon.test(appJar, getClassList(false), + "-javaagent:" + agentJar + "=ParallelClassTr.*", + prop, "ParallelLoad"); + } + + + private static String[] getClassList(boolean includeWatchdog) { + List classList = + IntStream.range(0, ParallelClassesTransform.NUMBER_OF_CLASSES) + .mapToObj(i -> "ParallelClassTr" + i) + .collect(Collectors.toList()); + + classList.add("ParallelLoad"); + classList.add("ParallelLoadThread"); + if (includeWatchdog) + classList.add("ParallelLoadWatchdog"); + + return classList.toArray(new String[0]); + } + + + // Agent is the same for all test cases + private static String prepareAgent() throws Exception { + String agentClasses[] = { + "TransformerAgent", + "TransformerAgent$SimpleTransformer", + "TransformUtil" + }; + + String manifest = "../../../../testlibrary/jvmti/TransformerAgent.mf"; + + return ClassFileInstaller.writeJar("TransformerAgent.jar", + ClassFileInstaller.Manifest.fromSourceFile(manifest), + agentClasses); + } + +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformInterfaceImplementorAppCDS.java 2019-07-24 08:27:53.725468149 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Exercise initial transformation (class file loader hook) - * with CDS/AppCDS with Interface/Implementor pair - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * /test/hotspot/jtreg/runtime/appcds/jvmti /test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability - * /test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses - * /test/hotspot/jtreg/runtime/SharedArchiveFile /test/hotspot/jtreg/testlibrary/jvmti - * /test/hotspot/jtreg/runtime/appcds/customLoader - * /test/hotspot/jtreg/runtime/appcds/customLoader/test-classes - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @requires !vm.graal.enabled - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * java.instrument - * @build TransformUtil TransformerAgent Interface Implementor - * @run main/othervm TransformRelatedClassesAppCDS Interface Implementor - */ --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/transformRelatedClasses/TransformInterfaceImplementorAppCDS.java 2019-07-24 08:27:53.437468159 -0400 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Exercise initial transformation (class file loader hook) + * with CDS/AppCDS with Interface/Implementor pair + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * /test/hotspot/jtreg/runtime/cds/jvmti /test/hotspot/jtreg/runtime/cds/serviceability + * /test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses + * /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/testlibrary/jvmti + * /test/hotspot/jtreg/runtime/cds/customLoader + * /test/hotspot/jtreg/runtime/cds/customLoader/test-classes + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @requires !vm.graal.enabled + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * java.instrument + * @build TransformUtil TransformerAgent Interface Implementor + * @run main/othervm TransformRelatedClassesAppCDS Interface Implementor + */ --- old/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformRelatedClassesAppCDS.java 2019-07-24 08:27:54.101468136 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,209 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -// Structure of the test: -// TransformRelatedClassesAppCDS -- common main test driver -// Invoked from test driver classes: -// TransformInterfaceAndImplementor, TransformSuperAndSubClasses.java -// prepares test artifacts, launches tests, checks results -// SuperClazz, SubClass -- classes under test -// Interface, Implementor -- classes under test -// TransformerAgent -- an agent that is used when JVM-under-test is executed -// to transform specific strings inside specified classes -// TransformerAgent.mf - accompanies transformer agent -// CustomLoaderApp -- a test "application" that is used to load -// classes-under-test (Parent, Child) via custom class loader, using -// AppCDS-v2 mechanism (unregistered custom loaders, aka FP) -// This "app" is launched in a child process by this driver with sharing on. - -import java.io.File; -import java.util.ArrayList; -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; - -// This class is intended to test 2 parent-child relationships: -// 1. Base Class (parent) and Derived Class (child) -// 2. Interface (parent) and Implementor (child) -// Parameters to main(): parent, child - -public class TransformRelatedClassesAppCDS extends TransformRelatedClasses { - private static void log(String msg, Object... args) { - String msg0 = String.format(msg, args); - System.out.println("TransformRelatedClassesAppCDS: " + msg0); - } - - // Initial Test Matrix: - // (ParentTransformed = true/false, ChildTransformed = true/false) x - // (BootCDS - see open tests, AppCDS-v1, AppCDS-v2-unregistered) - // Total cases: 2 x 4 = 8 - public static void main(String args[]) throws Exception { - TransformRelatedClassesAppCDS test = - new TransformRelatedClassesAppCDS(args[0], args[1]); - - test.prepareAgent(agentClasses); - - // Test Table - // testCaseId | transformParent | tranformChild | isParentExpectedShared | isChildExpectedShared - ArrayList testTable = new ArrayList<>(); - - // base case - no tranformation - all expected to be shared - testTable.add(new TestEntry(0, false, false, true, true)); - - // transform parent only - both parent and child should not be shared - testTable.add(new TestEntry(1, true, false, false, false)); - - // transform parent and child - both parent and child should not be shared - testTable.add(new TestEntry(2, true, true, false, false)); - - // transform child only - parent should still be shared, but not child - testTable.add(new TestEntry(3, false, true, true, false)); - - // run the tests - test.runWithAppLoader(testTable); - test.runWithCustomLoader(testTable); - } - - - public TransformRelatedClassesAppCDS(String parent, String child) { - super(parent, child); - - // a trick to get it compiled by jtreg - CustomLoaderApp.ping(); - } - - - private void prepareAgent(String[] agentClasses) throws Exception { - String manifest = "../../../../testlibrary/jvmti/TransformerAgent.mf"; - agentJar = ClassFileInstaller.writeJar("TransformerAgent.jar", - ClassFileInstaller.Manifest.fromSourceFile(manifest), - agentClasses); - } - - - private void runWithAppLoader(ArrayList testTable) throws Exception { - String appJar = writeJar("app", testClasses); - - // create an archive - OutputAnalyzer out = TestCommon.dump(appJar, testClasses); - TestCommon.checkDump(out); - - // execute with archive - for (TestEntry entry : testTable) { - log("runTestWithAppLoader(): testCaseId = %d", entry.testCaseId); - String params = TransformTestCommon.getAgentParams(entry, parent, child); - String agentParam = String.format("-javaagent:%s=%s", agentJar, params); - TestCommon.run("-Xlog:class+load=info", "-cp", appJar, - agentParam, child) - .assertNormalExit(output -> TransformTestCommon.checkResults(entry, output, parent, child)); - } - } - - - private String[] getCustomClassList(String loaderType, String customJar) { - String type = child + "-" + loaderType; - - switch (type) { - - case "SubClass-unregistered": - return new String[] { - "CustomLoaderApp", - "java/lang/Object id: 0", - parent + " id: 1 super: 0 source: " + customJar, - child + " id: 2 super: 1 source: " + customJar, - }; - - case "Implementor-unregistered": - return new String[] { - "CustomLoaderApp", - "java/lang/Object id: 0", - parent + " id: 1 super: 0 source: " + customJar, - child + " id: 2 super: 0 interfaces: 1 source: " + customJar, - }; - - default: - throw new IllegalArgumentException("getCustomClassList - wrong type: " + type); - } - } - - - private void runWithCustomLoader(ArrayList testTable) throws Exception { - if (!Platform.areCustomLoadersSupportedForCDS()) { - log("custom loader not supported for this platform" + - " - skipping test case for custom loader"); - return; - } - - if (TestCommon.isDynamicArchive()) { - log("custom loader class list not applicable to dynamic archive" + - " - skipping test case for custom loader"); - return; - } - - String appClasses[] = { - "CustomLoaderApp", - }; - - String customClasses[] = { parent, child }; - - // create jar files: appJar, customJar (for custom loaders to load classes from) - String appJar = writeJar("custldr-app", appClasses); - String customJar = writeJar("custldr-custom", customClasses); - - for (TestEntry entry : testTable) { - log("runTestWithCustomLoader(): testCaseId = %d", entry.testCaseId); - // unregistered (aka FP) case - String[] classList = getCustomClassList("unregistered",customJar); - execAndCheckWithCustomLoader(entry, "unregistered", classList, - appJar, agentJar, customJar); - } - } - - - private void - execAndCheckWithCustomLoader(TestEntry entry, String loaderType, - String[] classList, String appJar, - String agentJar, String customJar) - throws Exception { - - OutputAnalyzer out = TestCommon.dump(appJar, classList); - TestCommon.checkDump(out); - - String agentParam = "-javaagent:" + agentJar + "=" + - TransformTestCommon.getAgentParams(entry, parent, child); - - TestCommon.run("-Xlog:class+load=info", - "-cp", appJar, - agentParam, - "CustomLoaderApp", - customJar, loaderType, child) - .assertNormalExit(output -> TransformTestCommon.checkResults(entry, output, parent, child)); - } - - - private String writeJar(String type, String[] classes) - throws Exception { - String jarName = String.format("%s-%s.jar", child, type); - return ClassFileInstaller.writeJar(jarName, classes); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/transformRelatedClasses/TransformRelatedClassesAppCDS.java 2019-07-24 08:27:53.817468146 -0400 @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// Structure of the test: +// TransformRelatedClassesAppCDS -- common main test driver +// Invoked from test driver classes: +// TransformInterfaceAndImplementor, TransformSuperAndSubClasses.java +// prepares test artifacts, launches tests, checks results +// SuperClazz, SubClass -- classes under test +// Interface, Implementor -- classes under test +// TransformerAgent -- an agent that is used when JVM-under-test is executed +// to transform specific strings inside specified classes +// TransformerAgent.mf - accompanies transformer agent +// CustomLoaderApp -- a test "application" that is used to load +// classes-under-test (Parent, Child) via custom class loader, using +// AppCDS-v2 mechanism (unregistered custom loaders, aka FP) +// This "app" is launched in a child process by this driver with sharing on. + +import java.io.File; +import java.util.ArrayList; +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; + +// This class is intended to test 2 parent-child relationships: +// 1. Base Class (parent) and Derived Class (child) +// 2. Interface (parent) and Implementor (child) +// Parameters to main(): parent, child + +public class TransformRelatedClassesAppCDS extends TransformRelatedClasses { + private static void log(String msg, Object... args) { + String msg0 = String.format(msg, args); + System.out.println("TransformRelatedClassesAppCDS: " + msg0); + } + + // Initial Test Matrix: + // (ParentTransformed = true/false, ChildTransformed = true/false) x + // (BootCDS - see open tests, AppCDS-v1, AppCDS-v2-unregistered) + // Total cases: 2 x 4 = 8 + public static void main(String args[]) throws Exception { + TransformRelatedClassesAppCDS test = + new TransformRelatedClassesAppCDS(args[0], args[1]); + + test.prepareAgent(agentClasses); + + // Test Table + // testCaseId | transformParent | tranformChild | isParentExpectedShared | isChildExpectedShared + ArrayList testTable = new ArrayList<>(); + + // base case - no tranformation - all expected to be shared + testTable.add(new TestEntry(0, false, false, true, true)); + + // transform parent only - both parent and child should not be shared + testTable.add(new TestEntry(1, true, false, false, false)); + + // transform parent and child - both parent and child should not be shared + testTable.add(new TestEntry(2, true, true, false, false)); + + // transform child only - parent should still be shared, but not child + testTable.add(new TestEntry(3, false, true, true, false)); + + // run the tests + test.runWithAppLoader(testTable); + test.runWithCustomLoader(testTable); + } + + + public TransformRelatedClassesAppCDS(String parent, String child) { + super(parent, child); + + // a trick to get it compiled by jtreg + CustomLoaderApp.ping(); + } + + + private void prepareAgent(String[] agentClasses) throws Exception { + String manifest = "../../../../testlibrary/jvmti/TransformerAgent.mf"; + agentJar = ClassFileInstaller.writeJar("TransformerAgent.jar", + ClassFileInstaller.Manifest.fromSourceFile(manifest), + agentClasses); + } + + + private void runWithAppLoader(ArrayList testTable) throws Exception { + String appJar = writeJar("app", testClasses); + + // create an archive + OutputAnalyzer out = TestCommon.dump(appJar, testClasses); + TestCommon.checkDump(out); + + // execute with archive + for (TestEntry entry : testTable) { + log("runTestWithAppLoader(): testCaseId = %d", entry.testCaseId); + String params = TransformTestCommon.getAgentParams(entry, parent, child); + String agentParam = String.format("-javaagent:%s=%s", agentJar, params); + TestCommon.run("-Xlog:class+load=info", "-cp", appJar, + agentParam, child) + .assertNormalExit(output -> TransformTestCommon.checkResults(entry, output, parent, child)); + } + } + + + private String[] getCustomClassList(String loaderType, String customJar) { + String type = child + "-" + loaderType; + + switch (type) { + + case "SubClass-unregistered": + return new String[] { + "CustomLoaderApp", + "java/lang/Object id: 0", + parent + " id: 1 super: 0 source: " + customJar, + child + " id: 2 super: 1 source: " + customJar, + }; + + case "Implementor-unregistered": + return new String[] { + "CustomLoaderApp", + "java/lang/Object id: 0", + parent + " id: 1 super: 0 source: " + customJar, + child + " id: 2 super: 0 interfaces: 1 source: " + customJar, + }; + + default: + throw new IllegalArgumentException("getCustomClassList - wrong type: " + type); + } + } + + + private void runWithCustomLoader(ArrayList testTable) throws Exception { + if (!Platform.areCustomLoadersSupportedForCDS()) { + log("custom loader not supported for this platform" + + " - skipping test case for custom loader"); + return; + } + + if (TestCommon.isDynamicArchive()) { + log("custom loader class list not applicable to dynamic archive" + + " - skipping test case for custom loader"); + return; + } + + String appClasses[] = { + "CustomLoaderApp", + }; + + String customClasses[] = { parent, child }; + + // create jar files: appJar, customJar (for custom loaders to load classes from) + String appJar = writeJar("custldr-app", appClasses); + String customJar = writeJar("custldr-custom", customClasses); + + for (TestEntry entry : testTable) { + log("runTestWithCustomLoader(): testCaseId = %d", entry.testCaseId); + // unregistered (aka FP) case + String[] classList = getCustomClassList("unregistered",customJar); + execAndCheckWithCustomLoader(entry, "unregistered", classList, + appJar, agentJar, customJar); + } + } + + + private void + execAndCheckWithCustomLoader(TestEntry entry, String loaderType, + String[] classList, String appJar, + String agentJar, String customJar) + throws Exception { + + OutputAnalyzer out = TestCommon.dump(appJar, classList); + TestCommon.checkDump(out); + + String agentParam = "-javaagent:" + agentJar + "=" + + TransformTestCommon.getAgentParams(entry, parent, child); + + TestCommon.run("-Xlog:class+load=info", + "-cp", appJar, + agentParam, + "CustomLoaderApp", + customJar, loaderType, child) + .assertNormalExit(output -> TransformTestCommon.checkResults(entry, output, parent, child)); + } + + + private String writeJar(String type, String[] classes) + throws Exception { + String jarName = String.format("%s-%s.jar", child, type); + return ClassFileInstaller.writeJar(jarName, classes); + } +} --- old/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformSuperSubAppCDS.java 2019-07-24 08:27:54.445468124 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Exercise initial transformation (class file loader hook) - * with CDS/AppCDS with SubClass and SuperClass - * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes - * /test/hotspot/jtreg/runtime/appcds/jvmti /test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability - * /test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses - * /test/hotspot/jtreg/runtime/SharedArchiveFile /test/hotspot/jtreg/testlibrary/jvmti - * /test/hotspot/jtreg/runtime/appcds/customLoader - * /test/hotspot/jtreg/runtime/appcds/customLoader/test-classes - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @requires !vm.graal.enabled - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * java.instrument - * @build TransformUtil TransformerAgent SubClass SuperClazz - * @run main/othervm TransformRelatedClassesAppCDS SuperClazz SubClass - */ --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/jvmti/transformRelatedClasses/TransformSuperSubAppCDS.java 2019-07-24 08:27:54.149468134 -0400 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Exercise initial transformation (class file loader hook) + * with CDS/AppCDS with SubClass and SuperClass + * @library /test/lib /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/runtime/cds/test-classes + * /test/hotspot/jtreg/runtime/cds/jvmti /test/hotspot/jtreg/runtime/cds/serviceability + * /test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses + * /test/hotspot/jtreg/runtime/cds /test/hotspot/jtreg/testlibrary/jvmti + * /test/hotspot/jtreg/runtime/cds/customLoader + * /test/hotspot/jtreg/runtime/cds/customLoader/test-classes + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @requires !vm.graal.enabled + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * java.instrument + * @build TransformUtil TransformerAgent SubClass SuperClazz + * @run main/othervm TransformRelatedClassesAppCDS SuperClazz SubClass + */ --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/nonjdk/myPackage/MyClass.java 2019-07-24 08:27:54.849468110 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package nonjdk.myPackage; - -public class MyClass { - public String toString() { - return "hi"; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/nonjdk/myPackage/MyClass.java 2019-07-24 08:27:54.537468121 -0400 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package nonjdk.myPackage; + +public class MyClass { + public String toString() { + return "hi"; + } +} --- old/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasic.java 2019-07-24 08:27:55.213468097 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -// package access top-level class to avoid problem with RedefineClassHelper -// and nested types. -class RedefineBasic_B { - public static void okToCallBeforeRedefine() { - System.out.println("okToCallBeforeRedefine"); - } - public static void okToCallAfterRedefine() { - throw new RuntimeException("okToCallAfterRedefine is called before redefinition, test failed"); - } -} - -public class RedefineBasic { - - public static String newB = - " class RedefineBasic_B { " + - " public static void okToCallBeforeRedefine() { " + - " throw new RuntimeException(\"newB: okToCallBeforeRedefine is " + - " called after redefinition, test failed\"); }" + - " public static void okToCallAfterRedefine() { " + - " System.out.println(\"newB: okToCallAfterRedefine\"); } " + - " } "; - - - - static class SubclassOfB extends RedefineBasic_B { - public static void testAfterRedefine() { - RedefineBasic_B.okToCallAfterRedefine(); - } - } - - class Subclass2OfB extends RedefineBasic_B { - public void testAfterRedefine() { - super.okToCallAfterRedefine(); - } - } - - // verify that a given class is shared, report error if necessary - public static void - verifyClassIsShared(WhiteBox wb, Class c) throws Exception { - if (!wb.isSharedClass(c)) { - throw new RuntimeException( - "This class should be shared but isn't: " + c.getName()); - } else { - System.out.println("The class is shared as expected: " + - c.getName()); - } - } - - public static void main(String[] args) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - - verifyClassIsShared(wb, RedefineBasic.class); - verifyClassIsShared(wb, RedefineBasic_B.class); - verifyClassIsShared(wb, SubclassOfB.class); - verifyClassIsShared(wb, Subclass2OfB.class); - - // (1) Test case: verify that original B works as expected - // and that redefined B is shared and works as expected, - // with new behavior - RedefineBasic_B.okToCallBeforeRedefine(); - RedefineClassHelper.redefineClass(RedefineBasic_B.class, newB); - verifyClassIsShared(wb, RedefineBasic_B.class); - RedefineBasic_B.okToCallAfterRedefine(); - - // Static subclass of the super: - // 1. Make sure it is still shared - // 2. and it calls the correct super (the redefined one) - verifyClassIsShared(wb, SubclassOfB.class); - SubclassOfB.testAfterRedefine(); - - // Same as above, but for non-static class - verifyClassIsShared(wb, Subclass2OfB.class); - RedefineBasic thisTest = new RedefineBasic(); - thisTest.testSubclass2OfB(); - } - - public void testSubclass2OfB() { - Subclass2OfB sub = new Subclass2OfB(); - sub.testAfterRedefine(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/redefineClass/RedefineBasic.java 2019-07-24 08:27:54.901468108 -0400 @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +// package access top-level class to avoid problem with RedefineClassHelper +// and nested types. +class RedefineBasic_B { + public static void okToCallBeforeRedefine() { + System.out.println("okToCallBeforeRedefine"); + } + public static void okToCallAfterRedefine() { + throw new RuntimeException("okToCallAfterRedefine is called before redefinition, test failed"); + } +} + +public class RedefineBasic { + + public static String newB = + " class RedefineBasic_B { " + + " public static void okToCallBeforeRedefine() { " + + " throw new RuntimeException(\"newB: okToCallBeforeRedefine is " + + " called after redefinition, test failed\"); }" + + " public static void okToCallAfterRedefine() { " + + " System.out.println(\"newB: okToCallAfterRedefine\"); } " + + " } "; + + + + static class SubclassOfB extends RedefineBasic_B { + public static void testAfterRedefine() { + RedefineBasic_B.okToCallAfterRedefine(); + } + } + + class Subclass2OfB extends RedefineBasic_B { + public void testAfterRedefine() { + super.okToCallAfterRedefine(); + } + } + + // verify that a given class is shared, report error if necessary + public static void + verifyClassIsShared(WhiteBox wb, Class c) throws Exception { + if (!wb.isSharedClass(c)) { + throw new RuntimeException( + "This class should be shared but isn't: " + c.getName()); + } else { + System.out.println("The class is shared as expected: " + + c.getName()); + } + } + + public static void main(String[] args) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + + verifyClassIsShared(wb, RedefineBasic.class); + verifyClassIsShared(wb, RedefineBasic_B.class); + verifyClassIsShared(wb, SubclassOfB.class); + verifyClassIsShared(wb, Subclass2OfB.class); + + // (1) Test case: verify that original B works as expected + // and that redefined B is shared and works as expected, + // with new behavior + RedefineBasic_B.okToCallBeforeRedefine(); + RedefineClassHelper.redefineClass(RedefineBasic_B.class, newB); + verifyClassIsShared(wb, RedefineBasic_B.class); + RedefineBasic_B.okToCallAfterRedefine(); + + // Static subclass of the super: + // 1. Make sure it is still shared + // 2. and it calls the correct super (the redefined one) + verifyClassIsShared(wb, SubclassOfB.class); + SubclassOfB.testAfterRedefine(); + + // Same as above, but for non-static class + verifyClassIsShared(wb, Subclass2OfB.class); + RedefineBasic thisTest = new RedefineBasic(); + thisTest.testSubclass2OfB(); + } + + public void testSubclass2OfB() { + Subclass2OfB sub = new Subclass2OfB(); + sub.testAfterRedefine(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasicTest.java 2019-07-24 08:27:55.549468085 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Run /serviceability/jvmti/RedefineClasses/RedefineRunningMethods in AppCDS mode to - * make sure class redefinition works with CDS. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/serviceability/jvmti/RedefineClasses /test/hotspot/jtreg/runtime/appcds - * @modules java.compiler - * java.instrument - * jdk.jartool/sun.tools.jar - * java.base/jdk.internal.misc - * java.management - * @run driver RedefineClassHelper - * @build sun.hotspot.WhiteBox RedefineBasic - * @run driver RedefineBasicTest - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class RedefineBasicTest { - public static String sharedClasses[] = { - "RedefineBasic", - "RedefineBasic_B", - "RedefineBasic$SubclassOfB", - "RedefineBasic$Subclass2OfB", - "RedefineClassHelper", - "jdk/test/lib/compiler/InMemoryJavaCompiler", - "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper", - "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper$1", - "jdk/test/lib/compiler/InMemoryJavaCompiler$MemoryJavaFileObject" - }; - - public static void main(String[] args) throws Exception { - String wbJar = - ClassFileInstaller.writeJar("WhiteBox.jar", "sun.hotspot.WhiteBox"); - String appJar = - ClassFileInstaller.writeJar("RedefineBasic.jar", sharedClasses); - String useWb = "-Xbootclasspath/a:" + wbJar; - - OutputAnalyzer output; - TestCommon.testDump(appJar, sharedClasses, useWb); - - // redefineagent.jar is created by executing "@run driver RedefineClassHelper" - // which should be called before executing RedefineBasicTest - output = TestCommon.exec(appJar, useWb, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - "-javaagent:redefineagent.jar", - "RedefineBasic"); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/redefineClass/RedefineBasicTest.java 2019-07-24 08:27:55.265468095 -0400 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Run /serviceability/jvmti/RedefineClasses/RedefineRunningMethods in AppCDS mode to + * make sure class redefinition works with CDS. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/serviceability/jvmti/RedefineClasses /test/hotspot/jtreg/runtime/cds + * @modules java.compiler + * java.instrument + * jdk.jartool/sun.tools.jar + * java.base/jdk.internal.misc + * java.management + * @run driver RedefineClassHelper + * @build sun.hotspot.WhiteBox RedefineBasic + * @run driver RedefineBasicTest + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class RedefineBasicTest { + public static String sharedClasses[] = { + "RedefineBasic", + "RedefineBasic_B", + "RedefineBasic$SubclassOfB", + "RedefineBasic$Subclass2OfB", + "RedefineClassHelper", + "jdk/test/lib/compiler/InMemoryJavaCompiler", + "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper", + "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper$1", + "jdk/test/lib/compiler/InMemoryJavaCompiler$MemoryJavaFileObject" + }; + + public static void main(String[] args) throws Exception { + String wbJar = + ClassFileInstaller.writeJar("WhiteBox.jar", "sun.hotspot.WhiteBox"); + String appJar = + ClassFileInstaller.writeJar("RedefineBasic.jar", sharedClasses); + String useWb = "-Xbootclasspath/a:" + wbJar; + + OutputAnalyzer output; + TestCommon.testDump(appJar, sharedClasses, useWb); + + // redefineagent.jar is created by executing "@run driver RedefineClassHelper" + // which should be called before executing RedefineBasicTest + output = TestCommon.exec(appJar, useWb, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-javaagent:redefineagent.jar", + "RedefineBasic"); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_Shared.java 2019-07-24 08:27:55.901468073 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Run /serviceability/jvmti/RedefineClasses/RedefineRunningMethods in AppCDS mode to - * make sure class redefinition works with CDS. - * @requires vm.cds - * @library /test/lib /test/hotspot/jtreg/serviceability/jvmti/RedefineClasses /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.compiler - * java.instrument - * jdk.jartool/sun.tools.jar - * @run driver RedefineClassHelper - * @build sun.hotspot.WhiteBox RedefineRunningMethods_SharedHelper - * @run driver RedefineRunningMethods_Shared - */ - -import jdk.test.lib.process.OutputAnalyzer; - -public class RedefineRunningMethods_Shared { - public static String shared_classes[] = { - "RedefineRunningMethods_Shared", - "RedefineRunningMethods_SharedHelper", - "RedefineRunningMethods", - "RedefineRunningMethods$1", - "RedefineRunningMethods$2", - "RedefineRunningMethods$3", - "RedefineRunningMethods_B", - "RedefineClassHelper", - "jdk/test/lib/compiler/InMemoryJavaCompiler", - "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper", - "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper$1", - "jdk/test/lib/compiler/InMemoryJavaCompiler$MemoryJavaFileObject" - }; - - public static void main(String[] args) throws Exception { - String wbJar = ClassFileInstaller.writeJar("WhiteBox.jar", "sun.hotspot.WhiteBox"); - String appJar = ClassFileInstaller.writeJar("RedefineRunningMethods_Shared.jar", shared_classes); - String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; - - OutputAnalyzer output; - TestCommon.testDump(appJar, shared_classes, - // command-line arguments ... - use_whitebox_jar); - - // RedefineRunningMethods.java contained this: - // @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace RedefineRunningMethods - output = TestCommon.exec(appJar, - // command-line arguments ... - use_whitebox_jar, - "-XX:+UnlockDiagnosticVMOptions", - "-XX:+WhiteBoxAPI", - // These arguments are expected by RedefineRunningMethods - "-javaagent:redefineagent.jar", - "-Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace", - "RedefineRunningMethods_SharedHelper"); - TestCommon.checkExec(output); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/redefineClass/RedefineRunningMethods_Shared.java 2019-07-24 08:27:55.633468083 -0400 @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Run /serviceability/jvmti/RedefineClasses/RedefineRunningMethods in AppCDS mode to + * make sure class redefinition works with CDS. + * @requires vm.cds + * @library /test/lib /test/hotspot/jtreg/serviceability/jvmti/RedefineClasses /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.compiler + * java.instrument + * jdk.jartool/sun.tools.jar + * @run driver RedefineClassHelper + * @build sun.hotspot.WhiteBox RedefineRunningMethods_SharedHelper + * @run driver RedefineRunningMethods_Shared + */ + +import jdk.test.lib.process.OutputAnalyzer; + +public class RedefineRunningMethods_Shared { + public static String shared_classes[] = { + "RedefineRunningMethods_Shared", + "RedefineRunningMethods_SharedHelper", + "RedefineRunningMethods", + "RedefineRunningMethods$1", + "RedefineRunningMethods$2", + "RedefineRunningMethods$3", + "RedefineRunningMethods_B", + "RedefineClassHelper", + "jdk/test/lib/compiler/InMemoryJavaCompiler", + "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper", + "jdk/test/lib/compiler/InMemoryJavaCompiler$FileManagerWrapper$1", + "jdk/test/lib/compiler/InMemoryJavaCompiler$MemoryJavaFileObject" + }; + + public static void main(String[] args) throws Exception { + String wbJar = ClassFileInstaller.writeJar("WhiteBox.jar", "sun.hotspot.WhiteBox"); + String appJar = ClassFileInstaller.writeJar("RedefineRunningMethods_Shared.jar", shared_classes); + String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar; + + OutputAnalyzer output; + TestCommon.testDump(appJar, shared_classes, + // command-line arguments ... + use_whitebox_jar); + + // RedefineRunningMethods.java contained this: + // @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace RedefineRunningMethods + output = TestCommon.exec(appJar, + // command-line arguments ... + use_whitebox_jar, + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + // These arguments are expected by RedefineRunningMethods + "-javaagent:redefineagent.jar", + "-Xlog:redefine+class+iklass+add=trace,redefine+class+iklass+purge=trace", + "RedefineRunningMethods_SharedHelper"); + TestCommon.checkExec(output); + } +} --- old/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_SharedHelper.java 2019-07-24 08:27:56.257468061 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -/** - * This class is executed by RedefineRunningMethods_Shared.java in - * a sub-process. - */ -public class RedefineRunningMethods_SharedHelper { - public static void main(String[] args) throws Exception { - // (1) Validate that all classes used by RedefineRunningMethods are all shared. - WhiteBox wb = WhiteBox.getWhiteBox(); - for (String name : RedefineRunningMethods_Shared.shared_classes) { - name = name.replace('/', '.'); - Class c = Class.forName(name); - if (!wb.isSharedClass(c)) { - throw new RuntimeException("Test set-up problem. " + - "This class should be shared but isn't: " + name); - } else { - System.out.println("The class is shared as expected: " + name); - } - } - - // (2) Run the class redefinition test. - RedefineRunningMethods.main(args); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/redefineClass/RedefineRunningMethods_SharedHelper.java 2019-07-24 08:27:55.989468070 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +/** + * This class is executed by RedefineRunningMethods_Shared.java in + * a sub-process. + */ +public class RedefineRunningMethods_SharedHelper { + public static void main(String[] args) throws Exception { + // (1) Validate that all classes used by RedefineRunningMethods are all shared. + WhiteBox wb = WhiteBox.getWhiteBox(); + for (String name : RedefineRunningMethods_Shared.shared_classes) { + name = name.replace('/', '.'); + Class c = Class.forName(name); + if (!wb.isSharedClass(c)) { + throw new RuntimeException("Test set-up problem. " + + "This class should be shared but isn't: " + name); + } else { + System.out.println("The class is shared as expected: " + name); + } + } + + // (2) Run the class redefinition test. + RedefineRunningMethods.main(args); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/ReplaceCriticalClasses.java 2019-07-24 08:27:56.605468049 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Tests how CDS works when critical library classes are replaced with JVMTI ClassFileLoadHook - * @library /test/lib - * @requires vm.cds - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox - * @run main/othervm/native ReplaceCriticalClasses - */ - -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import sun.hotspot.WhiteBox; - -public class ReplaceCriticalClasses { - public static void main(String args[]) throws Throwable { - ReplaceCriticalClasses rcc = new ReplaceCriticalClasses(); - rcc.process(args); - } - - public void process(String args[]) throws Throwable { - if (args.length == 0) { - // Dump the shared archive in case it was not generated during the JDK build. - // Put the archive at separate file to avoid clashes with concurrent tests. - CDSOptions opts = new CDSOptions() - .setXShareMode("dump") - .setArchiveName(ReplaceCriticalClasses.class.getName() + ".jsa") - .setUseVersion(false) - .addSuffix("-showversion"); - CDSTestUtils.run(opts).assertNormalExit(""); - - launchChildProcesses(getTests()); - } else if (args.length == 3 && args[0].equals("child")) { - Class klass = Class.forName(args[2].replace("/", ".")); - if (args[1].equals("-shared")) { - testInChild(true, klass); - } else if (args[1].equals("-notshared")) { - testInChild(false, klass); - } else { - throw new RuntimeException("Unknown child exec option " + args[1]); - } - return; - } else { - throw new RuntimeException("Usage: @run main/othervm/native ReplaceCriticalClasses"); - } - } - - public String[] getTests() { - String tests[] = { - // CDS should be disabled -- these critical classes will be replaced - // because JvmtiExport::early_class_hook_env() is true. - "-early -notshared java/lang/Object", - "-early -notshared java/lang/String", - "-early -notshared java/lang/Cloneable", - "-early -notshared java/io/Serializable", - - // CDS should not be disabled -- these critical classes cannot be replaced because - // JvmtiExport::early_class_hook_env() is false. - "java/lang/Object", - "java/lang/String", - "java/lang/Cloneable", - "java/io/Serializable", - - /* Try to replace classes that are used by the archived subgraph graphs. - The following test cases are in ReplaceCriticalClassesForSubgraphs.java. - "-early -notshared -subgraph java/lang/module/ResolvedModule jdk.internal.module.ArchivedModuleGraph", - "-early -notshared -subgraph java/lang/Long java.lang.Long$LongCache", - "-subgraph java/lang/Long java.lang.Long$LongCache", - */ - - // Replace classes that are loaded after JVMTI_PHASE_PRIMORDIAL. It's OK to replace - // such - // classes even when CDS is enabled. Nothing bad should happen. - "-notshared java/util/Locale", - "-notshared sun/util/locale/BaseLocale", - "-notshared java/lang/Readable", - }; - return tests; - } - - static void launchChildProcesses(String tests[]) throws Throwable { - int n = 0; - for (String s : tests) { - System.out.println("Test case[" + (n++) + "] = \"" + s + "\""); - String args[] = s.split("\\s+"); // split by space character - launchChild(args); - } - } - - static void launchChild(String args[]) throws Throwable { - if (args.length < 1) { - throw new RuntimeException("Invalid test case. Should be <-early> <-subgraph> <-notshared> klassName subgraphKlass"); - } - String klassName = null; - String subgraphKlass = null; - String early = ""; - boolean subgraph = false; - String shared = "-shared"; - - for (int i=0; i { - if (expectDisable) { - out.shouldContain("UseSharedSpaces: CDS is disabled because early JVMTI ClassFileLoadHook is in use."); - System.out.println("CDS disabled as expected"); - } - if (checkSubgraph) { - if (expectShared) { - if (!out.getOutput().contains("UseSharedSpaces: Unable to map at required address in java heap")) { - out.shouldContain(subgraphInit); - } - } else { - out.shouldNotContain(subgraphInit); - } - } - }); - } - - static void testInChild(boolean shouldBeShared, Class klass) { - WhiteBox wb = WhiteBox.getWhiteBox(); - - if (shouldBeShared && !wb.isSharedClass(klass)) { - throw new RuntimeException(klass + " should be shared but but actually is not."); - } - if (!shouldBeShared && wb.isSharedClass(klass)) { - throw new RuntimeException(klass + " should not be shared but actually is."); - } - System.out.println("wb.isSharedClass(klass): " + wb.isSharedClass(klass) + " == " + shouldBeShared); - - String strings[] = { - // interned strings from j.l.Object - "@", - "nanosecond timeout value out of range", - "timeoutMillis value is negative", - - // interned strings from j.l.Integer - "0", - "0X", - "0x", - "int" - }; - - // Make sure the interned string table is same - for (String s : strings) { - String i = s.intern(); - if (s != i) { - throw new RuntimeException("Interned string mismatch: \"" + s + "\" @ " + System.identityHashCode(s) + - " vs \"" + i + "\" @ " + System.identityHashCode(i)); - } - } - // We have tried to use ClassFileLoadHook to replace critical library classes (which may - // may not have succeeded, depending on whether the agent has requested - // can_generate_all_class_hook_events/can_generate_early_class_hook_events capabilities). - // - // In any case, the JVM should have started properly (perhaps with CDS disabled) and - // the above operations should succeed. - System.out.println("If I can come to here without crashing, things should be OK"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/ReplaceCriticalClasses.java 2019-07-24 08:27:56.301468059 -0400 @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Tests how CDS works when critical library classes are replaced with JVMTI ClassFileLoadHook + * @library /test/lib + * @requires vm.cds + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox + * @run main/othervm/native ReplaceCriticalClasses + */ + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import sun.hotspot.WhiteBox; + +public class ReplaceCriticalClasses { + public static void main(String args[]) throws Throwable { + ReplaceCriticalClasses rcc = new ReplaceCriticalClasses(); + rcc.process(args); + } + + public void process(String args[]) throws Throwable { + if (args.length == 0) { + // Dump the shared archive in case it was not generated during the JDK build. + // Put the archive at separate file to avoid clashes with concurrent tests. + CDSOptions opts = new CDSOptions() + .setXShareMode("dump") + .setArchiveName(ReplaceCriticalClasses.class.getName() + ".jsa") + .setUseVersion(false) + .addSuffix("-showversion"); + CDSTestUtils.run(opts).assertNormalExit(""); + + launchChildProcesses(getTests()); + } else if (args.length == 3 && args[0].equals("child")) { + Class klass = Class.forName(args[2].replace("/", ".")); + if (args[1].equals("-shared")) { + testInChild(true, klass); + } else if (args[1].equals("-notshared")) { + testInChild(false, klass); + } else { + throw new RuntimeException("Unknown child exec option " + args[1]); + } + return; + } else { + throw new RuntimeException("Usage: @run main/othervm/native ReplaceCriticalClasses"); + } + } + + public String[] getTests() { + String tests[] = { + // CDS should be disabled -- these critical classes will be replaced + // because JvmtiExport::early_class_hook_env() is true. + "-early -notshared java/lang/Object", + "-early -notshared java/lang/String", + "-early -notshared java/lang/Cloneable", + "-early -notshared java/io/Serializable", + + // CDS should not be disabled -- these critical classes cannot be replaced because + // JvmtiExport::early_class_hook_env() is false. + "java/lang/Object", + "java/lang/String", + "java/lang/Cloneable", + "java/io/Serializable", + + /* Try to replace classes that are used by the archived subgraph graphs. + The following test cases are in ReplaceCriticalClassesForSubgraphs.java. + "-early -notshared -subgraph java/lang/module/ResolvedModule jdk.internal.module.ArchivedModuleGraph", + "-early -notshared -subgraph java/lang/Long java.lang.Long$LongCache", + "-subgraph java/lang/Long java.lang.Long$LongCache", + */ + + // Replace classes that are loaded after JVMTI_PHASE_PRIMORDIAL. It's OK to replace + // such + // classes even when CDS is enabled. Nothing bad should happen. + "-notshared java/util/Locale", + "-notshared sun/util/locale/BaseLocale", + "-notshared java/lang/Readable", + }; + return tests; + } + + static void launchChildProcesses(String tests[]) throws Throwable { + int n = 0; + for (String s : tests) { + System.out.println("Test case[" + (n++) + "] = \"" + s + "\""); + String args[] = s.split("\\s+"); // split by space character + launchChild(args); + } + } + + static void launchChild(String args[]) throws Throwable { + if (args.length < 1) { + throw new RuntimeException("Invalid test case. Should be <-early> <-subgraph> <-notshared> klassName subgraphKlass"); + } + String klassName = null; + String subgraphKlass = null; + String early = ""; + boolean subgraph = false; + String shared = "-shared"; + + for (int i=0; i { + if (expectDisable) { + out.shouldContain("UseSharedSpaces: CDS is disabled because early JVMTI ClassFileLoadHook is in use."); + System.out.println("CDS disabled as expected"); + } + if (checkSubgraph) { + if (expectShared) { + if (!out.getOutput().contains("UseSharedSpaces: Unable to map at required address in java heap")) { + out.shouldContain(subgraphInit); + } + } else { + out.shouldNotContain(subgraphInit); + } + } + }); + } + + static void testInChild(boolean shouldBeShared, Class klass) { + WhiteBox wb = WhiteBox.getWhiteBox(); + + if (shouldBeShared && !wb.isSharedClass(klass)) { + throw new RuntimeException(klass + " should be shared but but actually is not."); + } + if (!shouldBeShared && wb.isSharedClass(klass)) { + throw new RuntimeException(klass + " should not be shared but actually is."); + } + System.out.println("wb.isSharedClass(klass): " + wb.isSharedClass(klass) + " == " + shouldBeShared); + + String strings[] = { + // interned strings from j.l.Object + "@", + "nanosecond timeout value out of range", + "timeoutMillis value is negative", + + // interned strings from j.l.Integer + "0", + "0X", + "0x", + "int" + }; + + // Make sure the interned string table is same + for (String s : strings) { + String i = s.intern(); + if (s != i) { + throw new RuntimeException("Interned string mismatch: \"" + s + "\" @ " + System.identityHashCode(s) + + " vs \"" + i + "\" @ " + System.identityHashCode(i)); + } + } + // We have tried to use ClassFileLoadHook to replace critical library classes (which may + // may not have succeeded, depending on whether the agent has requested + // can_generate_all_class_hook_events/can_generate_early_class_hook_events capabilities). + // + // In any case, the JVM should have started properly (perhaps with CDS disabled) and + // the above operations should succeed. + System.out.println("If I can come to here without crashing, things should be OK"); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/ReplaceCriticalClassesForSubgraphs.java 2019-07-24 08:27:56.969468036 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Tests how CDS works when critical library classes are replaced with JVMTI ClassFileLoadHook - * @library /test/lib - * @requires vm.cds.archived.java.heap - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox - * @run main/othervm/native ReplaceCriticalClassesForSubgraphs - */ - -public class ReplaceCriticalClassesForSubgraphs extends ReplaceCriticalClasses { - public static void main(String args[]) throws Throwable { - ReplaceCriticalClassesForSubgraphs rcc = new ReplaceCriticalClassesForSubgraphs(); - rcc.process(args); - } - - public String[] getTests() { - String tests[] = { - // Try to replace classes that are used by the archived subgraph graphs. - "-early -notshared -subgraph java/lang/module/ResolvedModule jdk.internal.module.ArchivedModuleGraph", - "-early -notshared -subgraph java/lang/Long java.lang.Long$LongCache", - "-subgraph java/lang/Long java.lang.Long$LongCache", - }; - return tests; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/ReplaceCriticalClassesForSubgraphs.java 2019-07-24 08:27:56.653468047 -0400 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Tests how CDS works when critical library classes are replaced with JVMTI ClassFileLoadHook + * @library /test/lib + * @requires vm.cds.archived.java.heap + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox + * @run main/othervm/native ReplaceCriticalClassesForSubgraphs + */ + +public class ReplaceCriticalClassesForSubgraphs extends ReplaceCriticalClasses { + public static void main(String args[]) throws Throwable { + ReplaceCriticalClassesForSubgraphs rcc = new ReplaceCriticalClassesForSubgraphs(); + rcc.process(args); + } + + public String[] getTests() { + String tests[] = { + // Try to replace classes that are used by the archived subgraph graphs. + "-early -notshared -subgraph java/lang/module/ResolvedModule jdk.internal.module.ArchivedModuleGraph", + "-early -notshared -subgraph java/lang/Long java.lang.Long$LongCache", + "-subgraph java/lang/Long java.lang.Long$LongCache", + }; + return tests; + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/Implementor.java 2019-07-24 08:27:57.285468025 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -public class Implementor implements Interface { - public static void main(String[] args) { - System.out.println("Implementor: entering main()"); - test(); - } - - public static void test() { - // from interface - (new Implementor()).printString(); - // from implementor - System.out.println(TransformUtil.ChildCheckPattern + - TransformUtil.BeforePattern); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/Implementor.java 2019-07-24 08:27:57.017468034 -0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class Implementor implements Interface { + public static void main(String[] args) { + System.out.println("Implementor: entering main()"); + test(); + } + + public static void test() { + // from interface + (new Implementor()).printString(); + // from implementor + System.out.println(TransformUtil.ChildCheckPattern + + TransformUtil.BeforePattern); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/Interface.java 2019-07-24 08:27:57.585468015 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -public interface Interface { - public static final String stringToBeTransformed = - TransformUtil.ParentCheckPattern + TransformUtil.BeforePattern; - - default void printString() { - System.out.println(stringToBeTransformed); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/Interface.java 2019-07-24 08:27:57.321468024 -0400 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public interface Interface { + public static final String stringToBeTransformed = + TransformUtil.ParentCheckPattern + TransformUtil.BeforePattern; + + default void printString() { + System.out.println(stringToBeTransformed); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/SubClass.java 2019-07-24 08:27:57.897468004 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -public class SubClass extends SuperClazz { - public static void main(String[] args) { - System.out.println("SubClass: entering main()"); - test(); - } - - public static void test() { - // The line below will be used to check for successful class transformation - System.out.println(TransformUtil.ChildCheckPattern + - TransformUtil.BeforePattern); - (new SubClass()).callParent(); - } - - private void callParent() { - super.testParent(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/SubClass.java 2019-07-24 08:27:57.629468013 -0400 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class SubClass extends SuperClazz { + public static void main(String[] args) { + System.out.println("SubClass: entering main()"); + test(); + } + + public static void test() { + // The line below will be used to check for successful class transformation + System.out.println(TransformUtil.ChildCheckPattern + + TransformUtil.BeforePattern); + (new SubClass()).callParent(); + } + + private void callParent() { + super.testParent(); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/SuperClazz.java 2019-07-24 08:27:58.277467990 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -public class SuperClazz { - public static void testParent() { - System.out.println("SuperClazz: entering testParent()"); - - // The line below will be used to check for successful class transformation - System.out.println(TransformUtil.ParentCheckPattern + TransformUtil.BeforePattern); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/SuperClazz.java 2019-07-24 08:27:57.941468002 -0400 @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +public class SuperClazz { + public static void testParent() { + System.out.println("SuperClazz: entering testParent()"); + + // The line below will be used to check for successful class transformation + System.out.println(TransformUtil.ParentCheckPattern + TransformUtil.BeforePattern); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TestEntry.java 2019-07-24 08:27:58.617467979 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -// Test Entry - a single entry in a test table -// that defines a test case -// See TransformRelatedClasses.java for more details -public class TestEntry { - int testCaseId; - boolean transformParent; - boolean transformChild; - boolean isParentExpectedShared; - boolean isChildExpectedShared; - - public TestEntry(int testCaseId, - boolean transformParent, boolean transformChild, - boolean isParentExpectedShared, boolean isChildExpectedShared) { - this.testCaseId = testCaseId; - this.transformParent = transformParent; - this.transformChild = transformChild; - this.isParentExpectedShared = isParentExpectedShared; - this.isChildExpectedShared = isChildExpectedShared; - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/TestEntry.java 2019-07-24 08:27:58.329467989 -0400 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +// Test Entry - a single entry in a test table +// that defines a test case +// See TransformRelatedClasses.java for more details +public class TestEntry { + int testCaseId; + boolean transformParent; + boolean transformChild; + boolean isParentExpectedShared; + boolean isChildExpectedShared; + + public TestEntry(int testCaseId, + boolean transformParent, boolean transformChild, + boolean isParentExpectedShared, boolean isChildExpectedShared) { + this.testCaseId = testCaseId; + this.transformParent = transformParent; + this.transformChild = transformChild; + this.isParentExpectedShared = isParentExpectedShared; + this.isChildExpectedShared = isChildExpectedShared; + } +} + --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformInterfaceAndImplementor.java 2019-07-24 08:27:58.961467967 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @summary Exercise initial transformation (ClassFileLoadHook) - * with CDS with Interface/Implementor pair - * @library /test/lib /runtime/SharedArchiveFile /testlibrary/jvmti - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @requires !vm.graal.enabled - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * java.instrument - * @build TransformUtil TransformerAgent Interface Implementor - * @run main/othervm TransformRelatedClasses Interface Implementor - */ - -// Clarification on @requires declarations: -// CDS is not supported w/o the use of Compressed OOPs -// JVMTI's ClassFileLoadHook is not supported under minimal VM - -// This test class uses TransformRelatedClasses to do its work. -// The goal of this test is to exercise transformation of related interface -// and its implementor in combination with CDS. -// The transformation is done via ClassFileLoadHook mechanism. -// Both superclass and subclass reside in the shared archive. -// The test consists of 4 test cases where transformation is applied -// to an interface and an implementor in a combinatorial manner. -// Please see TransformRelatedClasses.java for details. --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/TransformInterfaceAndImplementor.java 2019-07-24 08:27:58.665467977 -0400 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @summary Exercise initial transformation (ClassFileLoadHook) + * with CDS with Interface/Implementor pair + * @library /test/lib /runtime/cds /testlibrary/jvmti + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @requires !vm.graal.enabled + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * java.instrument + * @build TransformUtil TransformerAgent Interface Implementor + * @run main/othervm TransformRelatedClasses Interface Implementor + */ + +// Clarification on @requires declarations: +// CDS is not supported w/o the use of Compressed OOPs +// JVMTI's ClassFileLoadHook is not supported under minimal VM + +// This test class uses TransformRelatedClasses to do its work. +// The goal of this test is to exercise transformation of related interface +// and its implementor in combination with CDS. +// The transformation is done via ClassFileLoadHook mechanism. +// Both superclass and subclass reside in the shared archive. +// The test consists of 4 test cases where transformation is applied +// to an interface and an implementor in a combinatorial manner. +// Please see TransformRelatedClasses.java for details. --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformRelatedClasses.java 2019-07-24 08:27:59.369467952 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,170 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -// This is the main test class for testing transformation of related classes -// in combination with CDS, to ensure these features work well together. -// The relationships that can be tested using this test class are: -// superclass/subclass, and interface/implementor relationships. -// -// The test uses combinatorial approach. -// For details on test table and test cases see main() method in this class. -// -// This test consists of multiple classes for better flexibility and reuse, -// and also relies on certain common utility code. -// Here are the details on the structure of the test -// -// Structure of the test: -// TransformRelatedClasses -- common main test driver -// The TransformRelatedClasses is invoked from test driver classes: -// TransformInterfaceAndImplementor, TransformSuperAndSubClasses -// It is responsible for preparing test artifacts (test jar, agent jar -// and the shared archive), running test cases and checking the results. -// The following test classes below are launched in a sub-process with use -// of shared archive: -// SuperClazz, SubClass -- super/sub class pair under test -// Interface, Implementor -- classes under test -// This test will transform these classes, based on the test case data, -// by changing a predefined unique string in each class. -// For more details, see the test classes' code and comments. -// -// Other related classes: -// TestEntry - a class representing a single test case, as test entry in the table -// TransformTestCommon - common methods for transformation test cases -// -// Other utility/helper classes and files used in this test: -// TransformerAgent - an agent that is used when JVM-under-test is executed -// to transform specific strings inside specified classes -// TransformerAgent.mf - accompanies transformer agent - -import java.io.File; -import java.util.ArrayList; -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - - -public class TransformRelatedClasses { - static final String archiveName = "./TransformRelatedClasses.jsa"; - static String agentClasses[] = { - "TransformerAgent", - "TransformerAgent$SimpleTransformer", - "TransformUtil" - }; - - String parent; - String child; - String[] testClasses = new String[2]; - String[] testNames = new String[2]; - String testJar; - String agentJar; - - - private static void log(String msg) { - System.out.println("TransformRelatedClasses: " + msg); - } - - - // This class is intended to test 2 parent-child relationships: - // 1. Base Class (parent) and Derived Class (child) - // 2. Interface (parent) and Implementor (child) - // Parameters to main(): parent, child - public static void main(String args[]) throws Exception { - TransformRelatedClasses test = new TransformRelatedClasses(args[0], args[1]); - test.prepare(); - - // Test Table - // TestEntry: (testCaseId, transformParent, tranformChild, - // isParentExpectedShared, isChildExpectedShared) - ArrayList testTable = new ArrayList<>(); - - // base case - no tranformation - all expected to be shared - testTable.add(new TestEntry(0, false, false, true, true)); - - // transform parent only - both parent and child should not be shared - testTable.add(new TestEntry(1, true, false, false, false)); - - // transform parent and child - both parent and child should not be shared - testTable.add(new TestEntry(2, true, true, false, false)); - - // transform child only - parent should still be shared, but not child - testTable.add(new TestEntry(3, false, true, true, false)); - - // run the tests - for (TestEntry entry : testTable) { - test.runTest(entry); - } - } - - - public TransformRelatedClasses(String parent, String child) { - log("Constructor: parent = " + parent + ", child = " + child); - this.parent = parent; - this.child = child; - testClasses[0] = parent; - testClasses[1] = child; - testNames[0] = parent.replace('.', '/'); - testNames[1] = child.replace('.', '/'); - } - - - // same test jar and archive can be used for all test cases - private void prepare() throws Exception { - // create agent jar - // Agent is the same for all test cases - String pathToManifest = "../../../../testlibrary/jvmti/TransformerAgent.mf"; - agentJar = ClassFileInstaller.writeJar("TransformerAgent.jar", - ClassFileInstaller.Manifest.fromSourceFile(pathToManifest), - agentClasses); - - // create a test jar - testJar = - ClassFileInstaller.writeJar(parent + "-" + child + ".jar", - testClasses); - - // create an archive - String classList = - CDSTestUtils.makeClassList("transform-" + parent, testNames).getPath(); - - CDSTestUtils.createArchiveAndCheck("-Xbootclasspath/a:" + testJar, - "-XX:ExtraSharedClassListFile=" + classList); - } - - - private void runTest(TestEntry entry) throws Exception { - log("runTest(): testCaseId = " + entry.testCaseId); - - // execute with archive - String agentParam = "-javaagent:" + agentJar + "=" + - TransformTestCommon.getAgentParams(entry, parent, child); - - CDSOptions opts = new CDSOptions() - .addPrefix("-Xbootclasspath/a:" + testJar, "-Xlog:class+load=info") - .setUseVersion(false) - .addSuffix( "-showversion",agentParam, child); - - OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); - TransformTestCommon.checkResults(entry, out, parent, child); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/TransformRelatedClasses.java 2019-07-24 08:27:59.057467963 -0400 @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +// This is the main test class for testing transformation of related classes +// in combination with CDS, to ensure these features work well together. +// The relationships that can be tested using this test class are: +// superclass/subclass, and interface/implementor relationships. +// +// The test uses combinatorial approach. +// For details on test table and test cases see main() method in this class. +// +// This test consists of multiple classes for better flexibility and reuse, +// and also relies on certain common utility code. +// Here are the details on the structure of the test +// +// Structure of the test: +// TransformRelatedClasses -- common main test driver +// The TransformRelatedClasses is invoked from test driver classes: +// TransformInterfaceAndImplementor, TransformSuperAndSubClasses +// It is responsible for preparing test artifacts (test jar, agent jar +// and the shared archive), running test cases and checking the results. +// The following test classes below are launched in a sub-process with use +// of shared archive: +// SuperClazz, SubClass -- super/sub class pair under test +// Interface, Implementor -- classes under test +// This test will transform these classes, based on the test case data, +// by changing a predefined unique string in each class. +// For more details, see the test classes' code and comments. +// +// Other related classes: +// TestEntry - a class representing a single test case, as test entry in the table +// TransformTestCommon - common methods for transformation test cases +// +// Other utility/helper classes and files used in this test: +// TransformerAgent - an agent that is used when JVM-under-test is executed +// to transform specific strings inside specified classes +// TransformerAgent.mf - accompanies transformer agent + +import java.io.File; +import java.util.ArrayList; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + + +public class TransformRelatedClasses { + static final String archiveName = "./TransformRelatedClasses.jsa"; + static String agentClasses[] = { + "TransformerAgent", + "TransformerAgent$SimpleTransformer", + "TransformUtil" + }; + + String parent; + String child; + String[] testClasses = new String[2]; + String[] testNames = new String[2]; + String testJar; + String agentJar; + + + private static void log(String msg) { + System.out.println("TransformRelatedClasses: " + msg); + } + + + // This class is intended to test 2 parent-child relationships: + // 1. Base Class (parent) and Derived Class (child) + // 2. Interface (parent) and Implementor (child) + // Parameters to main(): parent, child + public static void main(String args[]) throws Exception { + TransformRelatedClasses test = new TransformRelatedClasses(args[0], args[1]); + test.prepare(); + + // Test Table + // TestEntry: (testCaseId, transformParent, tranformChild, + // isParentExpectedShared, isChildExpectedShared) + ArrayList testTable = new ArrayList<>(); + + // base case - no tranformation - all expected to be shared + testTable.add(new TestEntry(0, false, false, true, true)); + + // transform parent only - both parent and child should not be shared + testTable.add(new TestEntry(1, true, false, false, false)); + + // transform parent and child - both parent and child should not be shared + testTable.add(new TestEntry(2, true, true, false, false)); + + // transform child only - parent should still be shared, but not child + testTable.add(new TestEntry(3, false, true, true, false)); + + // run the tests + for (TestEntry entry : testTable) { + test.runTest(entry); + } + } + + + public TransformRelatedClasses(String parent, String child) { + log("Constructor: parent = " + parent + ", child = " + child); + this.parent = parent; + this.child = child; + testClasses[0] = parent; + testClasses[1] = child; + testNames[0] = parent.replace('.', '/'); + testNames[1] = child.replace('.', '/'); + } + + + // same test jar and archive can be used for all test cases + private void prepare() throws Exception { + // create agent jar + // Agent is the same for all test cases + String pathToManifest = "../../../../testlibrary/jvmti/TransformerAgent.mf"; + agentJar = ClassFileInstaller.writeJar("TransformerAgent.jar", + ClassFileInstaller.Manifest.fromSourceFile(pathToManifest), + agentClasses); + + // create a test jar + testJar = + ClassFileInstaller.writeJar(parent + "-" + child + ".jar", + testClasses); + + // create an archive + String classList = + CDSTestUtils.makeClassList("transform-" + parent, testNames).getPath(); + + CDSTestUtils.createArchiveAndCheck("-Xbootclasspath/a:" + testJar, + "-XX:ExtraSharedClassListFile=" + classList); + } + + + private void runTest(TestEntry entry) throws Exception { + log("runTest(): testCaseId = " + entry.testCaseId); + + // execute with archive + String agentParam = "-javaagent:" + agentJar + "=" + + TransformTestCommon.getAgentParams(entry, parent, child); + + CDSOptions opts = new CDSOptions() + .addPrefix("-Xbootclasspath/a:" + testJar, "-Xlog:class+load=info") + .setUseVersion(false) + .addSuffix( "-showversion",agentParam, child); + + OutputAnalyzer out = CDSTestUtils.runWithArchive(opts); + TransformTestCommon.checkResults(entry, out, parent, child); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperAndSubClasses.java 2019-07-24 08:27:59.705467941 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -/** - * @test - * @summary Exercise initial transformation (ClassFileLoadHook) - * with CDS with SubClass and SuperClass - * @library /test/lib /runtime/SharedArchiveFile /testlibrary/jvmti - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @requires !vm.graal.enabled - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * java.instrument - * @build TransformUtil TransformerAgent SubClass SuperClazz - * @run main/othervm TransformRelatedClasses SuperClazz SubClass -*/ - -// Clarification on @requires declarations: -// CDS is not supported w/o the use of Compressed OOPs -// JVMTI's ClassFileLoadHook is not supported under minimal VM - -// This test class uses TransformRelatedClasses to do its work. -// The goal of this test is to exercise transformation of related superclass -// and subclass in combination with CDS. -// The transformation is done via ClassFileLoadHook mechanism. -// Both superclass and subclass reside in the shared archive. -// The test consists of 4 test cases where transformation is applied -// to a parent and child in combinatorial manner. -// Please see TransformRelatedClasses.java for details. --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/TransformSuperAndSubClasses.java 2019-07-24 08:27:59.417467951 -0400 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/** + * @test + * @summary Exercise initial transformation (ClassFileLoadHook) + * with CDS with SubClass and SuperClass + * @library /test/lib /runtime/cds /testlibrary/jvmti + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @requires !vm.graal.enabled + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * java.instrument + * @build TransformUtil TransformerAgent SubClass SuperClazz + * @run main/othervm TransformRelatedClasses SuperClazz SubClass +*/ + +// Clarification on @requires declarations: +// CDS is not supported w/o the use of Compressed OOPs +// JVMTI's ClassFileLoadHook is not supported under minimal VM + +// This test class uses TransformRelatedClasses to do its work. +// The goal of this test is to exercise transformation of related superclass +// and subclass in combination with CDS. +// The transformation is done via ClassFileLoadHook mechanism. +// Both superclass and subclass reside in the shared archive. +// The test consists of 4 test cases where transformation is applied +// to a parent and child in combinatorial manner. +// Please see TransformRelatedClasses.java for details. --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperSubTwoPckgs.java 2019-07-24 08:28:00.077467928 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - - -/** - * @test - * @summary Exercise initial transformation (ClassFileLoadHook) - * with CDS with SubClass and SuperClass, each lives in own separate package - * @library /test/lib /runtime/SharedArchiveFile /testlibrary/jvmti - * @requires vm.cds - * @requires vm.flavor != "minimal" - * @requires !vm.graal.enabled - * @modules java.base/jdk.internal.misc - * jdk.jartool/sun.tools.jar - * java.management - * java.instrument - * @build TransformUtil TransformerAgent SubClass SuperClazz - * @compile myPkg2/SubClass.java myPkg1/SuperClazz.java - * @run main/othervm TransformRelatedClasses myPkg1.SuperClazz myPkg2.SubClass -*/ - -// Clarification on @requires declarations: -// CDS is not supported w/o the use of Compressed OOPs -// JVMTI's ClassFileLoadHook is not supported under minimal VM - -// This test class uses TransformRelatedClasses to do its work. -// The goal of this test is to exercise transformation of related superclass -// and subclass in combination with CDS; each class lives in its own package. -// The transformation is done via ClassFileLoadHook mechanism. -// Both superclass and subclass reside in the shared archive. -// The test consists of 4 test cases where transformation is applied -// to a parent and child in combinatorial manner. -// Please see TransformRelatedClasses.java for details. --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/TransformSuperSubTwoPckgs.java 2019-07-24 08:27:59.793467938 -0400 @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/** + * @test + * @summary Exercise initial transformation (ClassFileLoadHook) + * with CDS with SubClass and SuperClass, each lives in own separate package + * @library /test/lib /runtime/cds /testlibrary/jvmti + * @requires vm.cds + * @requires vm.flavor != "minimal" + * @requires !vm.graal.enabled + * @modules java.base/jdk.internal.misc + * jdk.jartool/sun.tools.jar + * java.management + * java.instrument + * @build TransformUtil TransformerAgent SubClass SuperClazz + * @compile myPkg2/SubClass.java myPkg1/SuperClazz.java + * @run main/othervm TransformRelatedClasses myPkg1.SuperClazz myPkg2.SubClass +*/ + +// Clarification on @requires declarations: +// CDS is not supported w/o the use of Compressed OOPs +// JVMTI's ClassFileLoadHook is not supported under minimal VM + +// This test class uses TransformRelatedClasses to do its work. +// The goal of this test is to exercise transformation of related superclass +// and subclass in combination with CDS; each class lives in its own package. +// The transformation is done via ClassFileLoadHook mechanism. +// Both superclass and subclass reside in the shared archive. +// The test consists of 4 test cases where transformation is applied +// to a parent and child in combinatorial manner. +// Please see TransformRelatedClasses.java for details. --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformTestCommon.java 2019-07-24 08:28:00.489467913 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -// This class contains methods common to all transformation test cases -public class TransformTestCommon { - - // get parameters to an agent depending on the test case - // these parameters will instruct the agent which classes should be - // transformed - public static String getAgentParams(TestEntry entry, - String parent, String child) { - - if (entry.transformParent && entry.transformChild) - return parent + "," + child; - if (entry.transformParent) - return parent; - if (entry.transformChild) - return child; - - return ""; - } - - - private static void checkTransformationResults(TestEntry entry, - OutputAnalyzer out) - throws Exception { - - if (entry.transformParent) - out.shouldContain(TransformUtil.ParentCheckPattern + - TransformUtil.AfterPattern); - - if (entry.transformChild) - out.shouldContain(TransformUtil.ChildCheckPattern + - TransformUtil.AfterPattern); - } - - - private static void checkSharingByClass(TestEntry entry, OutputAnalyzer out, - String parent, String child) - throws Exception { - - String parentSharedMatch = " " + parent + " source: shared objects file"; - String childSharedMatch = " " + child + " source: shared objects file"; - - if (entry.isParentExpectedShared) - out.shouldContain(parentSharedMatch); - else - out.shouldNotContain(parentSharedMatch); - - if (entry.isChildExpectedShared) - out.shouldContain(childSharedMatch); - else - out.shouldNotContain(childSharedMatch); - } - - - // Both parent and child classes should be passed to ClassFileTransformer.transform() - // exactly once. - private static void checkTransformationCounts(TestEntry entry, OutputAnalyzer out, - String parent, String child) - throws Exception { - - String patternBase = "TransformerAgent: SimpleTransformer called for: "; - - out.shouldContain(patternBase + child + "@1"); - out.shouldContain(patternBase + parent + "@1"); - - out.shouldNotContain(patternBase + child + "@2"); - out.shouldNotContain(patternBase + parent + "@2"); - } - - - public static void checkResults(TestEntry entry, OutputAnalyzer out, - String parent, String child) - throws Exception { - - // If we were not able to map an archive, - // then do not perform other checks, since - // there was no sharing at all - CDSTestUtils.checkMappingFailure(out); - - String childVmName = child.replace('.', '/'); - String parentVmName = parent.replace('.', '/'); - - CDSTestUtils.checkExec(out); - checkTransformationCounts(entry, out, parentVmName, childVmName); - checkTransformationResults(entry, out); - checkSharingByClass(entry, out, parent, child); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/TransformTestCommon.java 2019-07-24 08:28:00.169467925 -0400 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +// This class contains methods common to all transformation test cases +public class TransformTestCommon { + + // get parameters to an agent depending on the test case + // these parameters will instruct the agent which classes should be + // transformed + public static String getAgentParams(TestEntry entry, + String parent, String child) { + + if (entry.transformParent && entry.transformChild) + return parent + "," + child; + if (entry.transformParent) + return parent; + if (entry.transformChild) + return child; + + return ""; + } + + + private static void checkTransformationResults(TestEntry entry, + OutputAnalyzer out) + throws Exception { + + if (entry.transformParent) + out.shouldContain(TransformUtil.ParentCheckPattern + + TransformUtil.AfterPattern); + + if (entry.transformChild) + out.shouldContain(TransformUtil.ChildCheckPattern + + TransformUtil.AfterPattern); + } + + + private static void checkSharingByClass(TestEntry entry, OutputAnalyzer out, + String parent, String child) + throws Exception { + + String parentSharedMatch = " " + parent + " source: shared objects file"; + String childSharedMatch = " " + child + " source: shared objects file"; + + if (entry.isParentExpectedShared) + out.shouldContain(parentSharedMatch); + else + out.shouldNotContain(parentSharedMatch); + + if (entry.isChildExpectedShared) + out.shouldContain(childSharedMatch); + else + out.shouldNotContain(childSharedMatch); + } + + + // Both parent and child classes should be passed to ClassFileTransformer.transform() + // exactly once. + private static void checkTransformationCounts(TestEntry entry, OutputAnalyzer out, + String parent, String child) + throws Exception { + + String patternBase = "TransformerAgent: SimpleTransformer called for: "; + + out.shouldContain(patternBase + child + "@1"); + out.shouldContain(patternBase + parent + "@1"); + + out.shouldNotContain(patternBase + child + "@2"); + out.shouldNotContain(patternBase + parent + "@2"); + } + + + public static void checkResults(TestEntry entry, OutputAnalyzer out, + String parent, String child) + throws Exception { + + // If we were not able to map an archive, + // then do not perform other checks, since + // there was no sharing at all + CDSTestUtils.checkMappingFailure(out); + + String childVmName = child.replace('.', '/'); + String parentVmName = parent.replace('.', '/'); + + CDSTestUtils.checkExec(out); + checkTransformationCounts(entry, out, parentVmName, childVmName); + checkTransformationResults(entry, out); + checkSharingByClass(entry, out, parent, child); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/myPkg1/SuperClazz.java 2019-07-24 08:28:00.813467902 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package myPkg1; - -public class SuperClazz { - public static void testParent() { - System.out.println("SuperClazz: entering testParent()"); - - // The line below will be used to check for successful class transformation - System.out.println("parent-transform-check: this-should-be-transformed"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/myPkg1/SuperClazz.java 2019-07-24 08:28:00.533467912 -0400 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package myPkg1; + +public class SuperClazz { + public static void testParent() { + System.out.println("SuperClazz: entering testParent()"); + + // The line below will be used to check for successful class transformation + System.out.println("parent-transform-check: this-should-be-transformed"); + } +} --- old/test/hotspot/jtreg/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/myPkg2/SubClass.java 2019-07-24 08:28:01.145467891 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package myPkg2; - -import myPkg1.SuperClazz; - -public class SubClass extends SuperClazz { - public static void main(String[] args) { - System.out.println("SubClass: entering main()"); - test(); - } - - public static void test() { - // The line below will be used to check for successful class transformation - System.out.println("child-transform-check: this-should-be-transformed"); - (new SubClass()).callParent(); - - // Get the system packages, which should contain myPkg1 and myPkag2 - Package[] pkgs = Package.getPackages(); - for (int i = 0; i < pkgs.length; i++) { - if (pkgs[i].getName().equals("myPkg1")) { - for (int j = 0; j < pkgs.length; j++) { - if (pkgs[j].getName().equals("myPkg2")) { - return; // found myPkg1 & myPkg1 - } - } - } - } - throw new RuntimeException("Missing system package"); - } - - private void callParent() { - super.testParent(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/serviceability/transformRelatedClasses/myPkg2/SubClass.java 2019-07-24 08:28:00.865467900 -0400 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package myPkg2; + +import myPkg1.SuperClazz; + +public class SubClass extends SuperClazz { + public static void main(String[] args) { + System.out.println("SubClass: entering main()"); + test(); + } + + public static void test() { + // The line below will be used to check for successful class transformation + System.out.println("child-transform-check: this-should-be-transformed"); + (new SubClass()).callParent(); + + // Get the system packages, which should contain myPkg1 and myPkag2 + Package[] pkgs = Package.getPackages(); + for (int i = 0; i < pkgs.length; i++) { + if (pkgs[i].getName().equals("myPkg1")) { + for (int j = 0; j < pkgs.length; j++) { + if (pkgs[j].getName().equals("myPkg2")) { + return; // found myPkg1 & myPkg1 + } + } + } + } + throw new RuntimeException("Missing system package"); + } + + private void callParent() { + super.testParent(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/ExerciseGC.java 2019-07-24 08:28:01.521467877 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Exercise GC with shared strings - * @requires vm.cds.archived.java.heap - * @library /test/hotspot/jtreg/runtime/appcds /test/lib - * @modules jdk.jartool/sun.tools.jar - * @build HelloStringGC sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver ExerciseGC - */ -public class ExerciseGC { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, ExerciseGC::test); - } - public static void test(String[] args) throws Exception { - SharedStringsUtils.buildJarAndWhiteBox("HelloStringGC"); - - SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("HelloStringGC"), - "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); - - SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringGC", - "-XX:+UnlockDiagnosticVMOptions", "-XX:+VerifyBeforeGC"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/ExerciseGC.java 2019-07-24 08:28:01.193467889 -0400 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Exercise GC with shared strings + * @requires vm.cds.archived.java.heap + * @library /test/hotspot/jtreg/runtime/cds /test/lib + * @modules jdk.jartool/sun.tools.jar + * @build HelloStringGC sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver ExerciseGC + */ +public class ExerciseGC { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, ExerciseGC::test); + } + public static void test(String[] args) throws Exception { + SharedStringsUtils.buildJarAndWhiteBox("HelloStringGC"); + + SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("HelloStringGC"), + "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); + + SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringGC", + "-XX:+UnlockDiagnosticVMOptions", "-XX:+VerifyBeforeGC"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/ExtraSharedInput.txt 2019-07-24 08:28:01.933467863 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,7 +0,0 @@ -VERSION: 1.0 -@SECTION: Symbol -0 -1: -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -11 -1: linkMethod -18 -1: type can't be null -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/ExtraSharedInput.txt 2019-07-24 08:28:01.613467874 -0400 @@ -0,0 +1,7 @@ +VERSION: 1.0 +@SECTION: Symbol +0 -1: +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +11 -1: linkMethod +18 -1: type can't be null +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/FlagCombo.java 2019-07-24 08:28:02.317467850 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @summary Test relevant combinations of command line flags with shared strings - * @requires vm.cds.archived.java.heap & vm.hasJFR - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @build HelloString - * @run driver FlagCombo - */ - -/** - * @test - * @summary Test relevant combinations of command line flags with shared strings - * @comment A special test excluding the case that requires JFR - * @requires vm.cds.archived.java.heap & !vm.hasJFR - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules java.base/jdk.internal.misc - * @modules java.management - * jdk.jartool/sun.tools.jar - * @build HelloString - * @run driver FlagCombo noJfr - */ - -import jdk.test.lib.BuildHelper; -import jdk.test.lib.Platform; - -public class FlagCombo { - public static void main(String[] args) throws Exception { - SharedStringsUtils.buildJar("HelloString"); - - SharedStringsUtils.dump(TestCommon.list("HelloString"), - "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); - - SharedStringsUtils.runWithArchive("HelloString", "-XX:+UseG1GC"); - - if (args.length == 0) { - SharedStringsUtils.runWithArchiveAuto("HelloString", - "-XX:StartFlightRecording=dumponexit=true"); - } - - SharedStringsUtils.runWithArchive("HelloString", "-XX:+UnlockDiagnosticVMOptions", - "-XX:NativeMemoryTracking=detail", "-XX:+PrintNMTStatistics"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/FlagCombo.java 2019-07-24 08:28:01.981467861 -0400 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @summary Test relevant combinations of command line flags with shared strings + * @requires vm.cds.archived.java.heap & vm.hasJFR + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @build HelloString + * @run driver FlagCombo + */ + +/** + * @test + * @summary Test relevant combinations of command line flags with shared strings + * @comment A special test excluding the case that requires JFR + * @requires vm.cds.archived.java.heap & !vm.hasJFR + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules java.base/jdk.internal.misc + * @modules java.management + * jdk.jartool/sun.tools.jar + * @build HelloString + * @run driver FlagCombo noJfr + */ + +import jdk.test.lib.BuildHelper; +import jdk.test.lib.Platform; + +public class FlagCombo { + public static void main(String[] args) throws Exception { + SharedStringsUtils.buildJar("HelloString"); + + SharedStringsUtils.dump(TestCommon.list("HelloString"), + "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); + + SharedStringsUtils.runWithArchive("HelloString", "-XX:+UseG1GC"); + + if (args.length == 0) { + SharedStringsUtils.runWithArchiveAuto("HelloString", + "-XX:StartFlightRecording=dumponexit=true"); + } + + SharedStringsUtils.runWithArchive("HelloString", "-XX:+UnlockDiagnosticVMOptions", + "-XX:NativeMemoryTracking=detail", "-XX:+PrintNMTStatistics"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloString.java 2019-07-24 08:28:02.689467837 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class HelloString { - public static void main(String args[]) { - // Let's reference the string that is in the archive - // Make sure the string below is in the shared string data file (string list) - String testString = "shared_test_string_unique_14325"; - System.out.println("Hello String: " + testString); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/HelloString.java 2019-07-24 08:28:02.409467847 -0400 @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class HelloString { + public static void main(String args[]) { + // Let's reference the string that is in the archive + // Make sure the string below is in the shared string data file (string list) + String testString = "shared_test_string_unique_14325"; + System.out.println("Hello String: " + testString); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloStringGC.java 2019-07-24 08:28:03.041467825 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class HelloStringGC { - public static String[] array01 = new String[1000]; - public static String[] array02 = new String[1000]; - - public static void main(String args[]) throws RuntimeException { - String testString1 = "shared_test_string_unique_14325"; - String testString2 = "test123"; - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (!wb.isShared(testString1) && !wb.areSharedStringsIgnored()) { - throw new RuntimeException("testString1 is not shared"); - } - - for (int i=0; i<5; i++) { - allocSomeStrings(testString1, testString2); - array01 = null; - array02 = null; - System.gc(); - sleep(300); - array01 = new String[1000]; - array02 = new String[1000]; - } - - wb.fullGC(); - - System.out.println("HelloStringGC: PASS"); - } - - private static void allocSomeStrings(String s1, String s2) { - for (int i = 0; i < 1000; i ++) { - array01[i] = new String(s1); - array02[i] = new String(s2); - } - } - - private static void sleep(int ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - } - } - -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/HelloStringGC.java 2019-07-24 08:28:02.737467835 -0400 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class HelloStringGC { + public static String[] array01 = new String[1000]; + public static String[] array02 = new String[1000]; + + public static void main(String args[]) throws RuntimeException { + String testString1 = "shared_test_string_unique_14325"; + String testString2 = "test123"; + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (!wb.isShared(testString1) && !wb.areSharedStringsIgnored()) { + throw new RuntimeException("testString1 is not shared"); + } + + for (int i=0; i<5; i++) { + allocSomeStrings(testString1, testString2); + array01 = null; + array02 = null; + System.gc(); + sleep(300); + array01 = new String[1000]; + array02 = new String[1000]; + } + + wb.fullGC(); + + System.out.println("HelloStringGC: PASS"); + } + + private static void allocSomeStrings(String s1, String s2) { + for (int i = 0; i < 1000; i ++) { + array01[i] = new String(s1); + array02[i] = new String(s2); + } + } + + private static void sleep(int ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException e) { + } + } + +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloStringPlus.java 2019-07-24 08:28:03.413467812 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -// A test class to be launched in AppCDS mode, has basic+ -// coverage of string operations - -import sun.hotspot.WhiteBox; - -public class HelloStringPlus { - public static void main(String args[]) { - // Let's reference the string that is in archive - String testString1 = "shared_test_string_unique_14325"; - System.out.println("Hello String: " + testString1); - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (!wb.isShared(testString1) && !wb.areSharedStringsIgnored()) { - throw new RuntimeException("testString1 is not shared"); - } - - // Check other basic string operations - // Interning and equality - String[] testArray = new String[] {"shared_", "test_", "string_", "intern_", "12345"}; - String toBeInterned = ""; - - StringBuilder sb = new StringBuilder(); - for (String s : testArray) { - sb.append(s); - } - toBeInterned = sb.toString(); - - System.out.println("About to intern a string: " + toBeInterned); - toBeInterned.intern(); - - // check equality - if (testString1.equals(toBeInterned)) - throw new RuntimeException("Equality test 1 failed"); - - if (!testString1.equals("shared_test_string" + '_' + "unique_14325")) - throw new RuntimeException("Equality test 2 failed"); - - // Chech the hash code functionality; no special assertions, just make sure - // no crashe or exception occurs - System.out.println("testString1.hashCode() = " + testString1.hashCode()); - - // Check intern() method for "" string - String empty = ""; - String empty_interned = empty.intern(); - if (!wb.isShared(empty)) { - throw new RuntimeException("Empty string should be shared"); - } - if (empty_interned != empty) { - throw new RuntimeException("Different string is returned from intern() for empty string"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/HelloStringPlus.java 2019-07-24 08:28:03.089467823 -0400 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// A test class to be launched in AppCDS mode, has basic+ +// coverage of string operations + +import sun.hotspot.WhiteBox; + +public class HelloStringPlus { + public static void main(String args[]) { + // Let's reference the string that is in archive + String testString1 = "shared_test_string_unique_14325"; + System.out.println("Hello String: " + testString1); + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (!wb.isShared(testString1) && !wb.areSharedStringsIgnored()) { + throw new RuntimeException("testString1 is not shared"); + } + + // Check other basic string operations + // Interning and equality + String[] testArray = new String[] {"shared_", "test_", "string_", "intern_", "12345"}; + String toBeInterned = ""; + + StringBuilder sb = new StringBuilder(); + for (String s : testArray) { + sb.append(s); + } + toBeInterned = sb.toString(); + + System.out.println("About to intern a string: " + toBeInterned); + toBeInterned.intern(); + + // check equality + if (testString1.equals(toBeInterned)) + throw new RuntimeException("Equality test 1 failed"); + + if (!testString1.equals("shared_test_string" + '_' + "unique_14325")) + throw new RuntimeException("Equality test 2 failed"); + + // Chech the hash code functionality; no special assertions, just make sure + // no crashe or exception occurs + System.out.println("testString1.hashCode() = " + testString1.hashCode()); + + // Check intern() method for "" string + String empty = ""; + String empty_interned = empty.intern(); + if (!wb.isShared(empty)) { + throw new RuntimeException("Empty string should be shared"); + } + if (empty_interned != empty) { + throw new RuntimeException("Different string is returned from intern() for empty string"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java 2019-07-24 08:28:03.745467800 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -// NOTE: the test takes a long time for each VM option combination, so we split -// it into 3 @test parts, so that they can be executed in parallel. If you make a -// change, please ensure all @test blocks are in sync. - - -/* - * @test - * @summary Test options that are incompatible with use of shared strings - * Also test mismatch in oops encoding between dump time and run time - * @requires vm.cds.archived.java.heap - * @comment This test explicitly chooses the type of GC to be used by sub-processes. It may conflict with the GC type set - * via the -vmoptions command line option of JTREG. vm.gc==null will help the test case to discard the explicitly passed - * vm options. - * @requires (vm.gc=="null") - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission - * @build HelloString - * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions 0 - */ - - -/* - * @test - * @requires vm.cds.archived.java.heap - * @requires (vm.gc=="null") - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission - * @build HelloString - * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions 1 - */ - -/* - * @test - * @requires vm.cds.archived.java.heap - * @requires (vm.gc=="null") - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission - * @build HelloString - * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions 2 - */ - - -import jdk.test.lib.Asserts; -import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; - -import sun.hotspot.code.Compiler; -import sun.hotspot.gc.GC; - -public class IncompatibleOptions { - static final String COOPS_DUMP_WARNING = - "Cannot dump shared archive when UseCompressedOops or UseCompressedClassPointers is off"; - static final String COOPS_EXEC_WARNING = - "UseCompressedOops and UseCompressedClassPointers must be on for UseSharedSpaces"; - static final String GC_WARNING = - "Archived java heap is not supported"; - static final String OBJ_ALIGNMENT_MISMATCH = - "The shared archive file's ObjectAlignmentInBytes of .* does not equal the current ObjectAlignmentInBytes of"; - static final String COMPACT_STRING_MISMATCH = - "The shared archive file's CompactStrings setting .* does not equal the current CompactStrings setting"; - - static String appJar; - static String[] vmOptionsPrefix = {}; - - public static void main(String[] args) throws Exception { - String[] noargs = {}; - SharedStringsUtils.run(Integer.parseInt(args[0]), 3, noargs, IncompatibleOptions::test); - // Add a new @test block if you get an assert ----^ about this number. See - // SharedStringsUtils.java for details. - } - - public static void test(String[] args_ignored) throws Exception { - vmOptionsPrefix = SharedStringsUtils.getChildVMOptionsPrefix(); - appJar = JarBuilder.build("IncompatibleOptions", "HelloString"); - - // Uncompressed OOPs - testDump(1, "-XX:+UseG1GC", "-XX:-UseCompressedOops", COOPS_DUMP_WARNING, true); - if (GC.Z.isSupported()) { // ZGC is included in build. - testDump(1, "-XX:+UnlockExperimentalVMOptions", "-XX:+UseZGC", COOPS_DUMP_WARNING, true); - } - - // incompatible GCs - testDump(2, "-XX:+UseParallelGC", "", GC_WARNING, false); - testDump(3, "-XX:+UseSerialGC", "", GC_WARNING, false); - if (!Compiler.isGraalEnabled()) { // Graal does not support CMS - testDump(4, "-XX:+UseConcMarkSweepGC", "", GC_WARNING, false); - } - - // ======= archive with compressed oops, run w/o - testDump(5, "-XX:+UseG1GC", "-XX:+UseCompressedOops", null, false); - testExec(5, "-XX:+UseG1GC", "-XX:-UseCompressedOops", - COOPS_EXEC_WARNING, true); - - // NOTE: No warning is displayed, by design - // Still run, to ensure no crash or exception - testExec(6, "-XX:+UseParallelGC", "", "", false); - testExec(7, "-XX:+UseSerialGC", "", "", false); - if (!Compiler.isGraalEnabled()) { // Graal does not support CMS - testExec(8, "-XX:+UseConcMarkSweepGC", "", "", false); - } - - // Test various oops encodings, by varying ObjectAlignmentInBytes and heap sizes - testDump(9, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=8", null, false); - testExec(9, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=16", - OBJ_ALIGNMENT_MISMATCH, true); - - // See JDK-8081416 - Oops encoding mismatch with shared strings - // produces unclear or incorrect warning - // Correct the test case once the above is fixed - // @ignore JDK-8081416 - for tracking purposes - // for now, run test as is until the proper behavior is determined - testDump(10, "-XX:+UseG1GC", "-Xmx1g", null, false); - testExec(10, "-XX:+UseG1GC", "-Xmx32g", null, true); - - // CompactStrings must match between dump time and run time - testDump(11, "-XX:+UseG1GC", "-XX:-CompactStrings", null, false); - testExec(11, "-XX:+UseG1GC", "-XX:+CompactStrings", - COMPACT_STRING_MISMATCH, true); - testDump(12, "-XX:+UseG1GC", "-XX:+CompactStrings", null, false); - testExec(12, "-XX:+UseG1GC", "-XX:-CompactStrings", - COMPACT_STRING_MISMATCH, true); - } - - static void testDump(int testCaseNr, String collectorOption, String extraOption, - String expectedWarning, boolean expectedToFail) throws Exception { - - System.out.println("Testcase: " + testCaseNr); - OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello"), - TestCommon.concat(vmOptionsPrefix, - "-XX:+UseCompressedOops", - collectorOption, - "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("SharedStringsBasic.txt"), - "-Xlog:cds,cds+hashtables", - extraOption)); - - if (expectedWarning != null) { - output.shouldContain(expectedWarning); - } - - if (expectedToFail) { - Asserts.assertNE(output.getExitValue(), 0, - "JVM is expected to fail, but did not"); - } - } - - static void testExec(int testCaseNr, String collectorOption, String extraOption, - String expectedWarning, boolean expectedToFail) throws Exception { - - OutputAnalyzer output; - System.out.println("Testcase: " + testCaseNr); - - // needed, otherwise system considers empty extra option as a - // main class param, and fails with "Could not find or load main class" - if (!extraOption.isEmpty()) { - output = TestCommon.exec(appJar, - TestCommon.concat(vmOptionsPrefix, - "-XX:+UseCompressedOops", - collectorOption, "-Xlog:cds", extraOption, "HelloString")); - } else { - output = TestCommon.exec(appJar, - TestCommon.concat(vmOptionsPrefix, - "-XX:+UseCompressedOops", - collectorOption, "-Xlog:cds", "HelloString")); - } - - if (expectedWarning != null) { - output.shouldMatch(expectedWarning); - } - - if (expectedToFail) { - Asserts.assertNE(output.getExitValue(), 0); - } else { - SharedStringsUtils.checkExec(output); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/IncompatibleOptions.java 2019-07-24 08:28:03.465467810 -0400 @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// NOTE: the test takes a long time for each VM option combination, so we split +// it into 3 @test parts, so that they can be executed in parallel. If you make a +// change, please ensure all @test blocks are in sync. + + +/* + * @test + * @summary Test options that are incompatible with use of shared strings + * Also test mismatch in oops encoding between dump time and run time + * @requires vm.cds.archived.java.heap + * @comment This test explicitly chooses the type of GC to be used by sub-processes. It may conflict with the GC type set + * via the -vmoptions command line option of JTREG. vm.gc==null will help the test case to discard the explicitly passed + * vm options. + * @requires (vm.gc=="null") + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission + * @build HelloString + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions 0 + */ + + +/* + * @test + * @requires vm.cds.archived.java.heap + * @requires (vm.gc=="null") + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission + * @build HelloString + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions 1 + */ + +/* + * @test + * @requires vm.cds.archived.java.heap + * @requires (vm.gc=="null") + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission + * @build HelloString + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. IncompatibleOptions 2 + */ + + +import jdk.test.lib.Asserts; +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; + +import sun.hotspot.code.Compiler; +import sun.hotspot.gc.GC; + +public class IncompatibleOptions { + static final String COOPS_DUMP_WARNING = + "Cannot dump shared archive when UseCompressedOops or UseCompressedClassPointers is off"; + static final String COOPS_EXEC_WARNING = + "UseCompressedOops and UseCompressedClassPointers must be on for UseSharedSpaces"; + static final String GC_WARNING = + "Archived java heap is not supported"; + static final String OBJ_ALIGNMENT_MISMATCH = + "The shared archive file's ObjectAlignmentInBytes of .* does not equal the current ObjectAlignmentInBytes of"; + static final String COMPACT_STRING_MISMATCH = + "The shared archive file's CompactStrings setting .* does not equal the current CompactStrings setting"; + + static String appJar; + static String[] vmOptionsPrefix = {}; + + public static void main(String[] args) throws Exception { + String[] noargs = {}; + SharedStringsUtils.run(Integer.parseInt(args[0]), 3, noargs, IncompatibleOptions::test); + // Add a new @test block if you get an assert ----^ about this number. See + // SharedStringsUtils.java for details. + } + + public static void test(String[] args_ignored) throws Exception { + vmOptionsPrefix = SharedStringsUtils.getChildVMOptionsPrefix(); + appJar = JarBuilder.build("IncompatibleOptions", "HelloString"); + + // Uncompressed OOPs + testDump(1, "-XX:+UseG1GC", "-XX:-UseCompressedOops", COOPS_DUMP_WARNING, true); + if (GC.Z.isSupported()) { // ZGC is included in build. + testDump(1, "-XX:+UnlockExperimentalVMOptions", "-XX:+UseZGC", COOPS_DUMP_WARNING, true); + } + + // incompatible GCs + testDump(2, "-XX:+UseParallelGC", "", GC_WARNING, false); + testDump(3, "-XX:+UseSerialGC", "", GC_WARNING, false); + if (!Compiler.isGraalEnabled()) { // Graal does not support CMS + testDump(4, "-XX:+UseConcMarkSweepGC", "", GC_WARNING, false); + } + + // ======= archive with compressed oops, run w/o + testDump(5, "-XX:+UseG1GC", "-XX:+UseCompressedOops", null, false); + testExec(5, "-XX:+UseG1GC", "-XX:-UseCompressedOops", + COOPS_EXEC_WARNING, true); + + // NOTE: No warning is displayed, by design + // Still run, to ensure no crash or exception + testExec(6, "-XX:+UseParallelGC", "", "", false); + testExec(7, "-XX:+UseSerialGC", "", "", false); + if (!Compiler.isGraalEnabled()) { // Graal does not support CMS + testExec(8, "-XX:+UseConcMarkSweepGC", "", "", false); + } + + // Test various oops encodings, by varying ObjectAlignmentInBytes and heap sizes + testDump(9, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=8", null, false); + testExec(9, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=16", + OBJ_ALIGNMENT_MISMATCH, true); + + // See JDK-8081416 - Oops encoding mismatch with shared strings + // produces unclear or incorrect warning + // Correct the test case once the above is fixed + // @ignore JDK-8081416 - for tracking purposes + // for now, run test as is until the proper behavior is determined + testDump(10, "-XX:+UseG1GC", "-Xmx1g", null, false); + testExec(10, "-XX:+UseG1GC", "-Xmx32g", null, true); + + // CompactStrings must match between dump time and run time + testDump(11, "-XX:+UseG1GC", "-XX:-CompactStrings", null, false); + testExec(11, "-XX:+UseG1GC", "-XX:+CompactStrings", + COMPACT_STRING_MISMATCH, true); + testDump(12, "-XX:+UseG1GC", "-XX:+CompactStrings", null, false); + testExec(12, "-XX:+UseG1GC", "-XX:-CompactStrings", + COMPACT_STRING_MISMATCH, true); + } + + static void testDump(int testCaseNr, String collectorOption, String extraOption, + String expectedWarning, boolean expectedToFail) throws Exception { + + System.out.println("Testcase: " + testCaseNr); + OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello"), + TestCommon.concat(vmOptionsPrefix, + "-XX:+UseCompressedOops", + collectorOption, + "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("SharedStringsBasic.txt"), + "-Xlog:cds,cds+hashtables", + extraOption)); + + if (expectedWarning != null) { + output.shouldContain(expectedWarning); + } + + if (expectedToFail) { + Asserts.assertNE(output.getExitValue(), 0, + "JVM is expected to fail, but did not"); + } + } + + static void testExec(int testCaseNr, String collectorOption, String extraOption, + String expectedWarning, boolean expectedToFail) throws Exception { + + OutputAnalyzer output; + System.out.println("Testcase: " + testCaseNr); + + // needed, otherwise system considers empty extra option as a + // main class param, and fails with "Could not find or load main class" + if (!extraOption.isEmpty()) { + output = TestCommon.exec(appJar, + TestCommon.concat(vmOptionsPrefix, + "-XX:+UseCompressedOops", + collectorOption, "-Xlog:cds", extraOption, "HelloString")); + } else { + output = TestCommon.exec(appJar, + TestCommon.concat(vmOptionsPrefix, + "-XX:+UseCompressedOops", + collectorOption, "-Xlog:cds", "HelloString")); + } + + if (expectedWarning != null) { + output.shouldMatch(expectedWarning); + } + + if (expectedToFail) { + Asserts.assertNE(output.getExitValue(), 0); + } else { + SharedStringsUtils.checkExec(output); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/InternSharedString.java 2019-07-24 08:28:04.121467787 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test shared strings together with string intern operation - * @requires vm.cds.archived.java.heap - * @library /test/hotspot/jtreg/runtime/appcds /test/lib - * @modules jdk.jartool/sun.tools.jar - * @compile InternStringTest.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver InternSharedString - */ - -public class InternSharedString { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, InternSharedString::test); - } - - public static void test(String[] args) throws Exception { - SharedStringsUtils.buildJarAndWhiteBox("InternStringTest"); - - SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("InternStringTest"), - "ExtraSharedInput.txt", "-Xlog:cds,cds+hashtables"); - - String[] extraMatches = new String[] { - InternStringTest.passed_output1, - InternStringTest.passed_output2, - InternStringTest.passed_output3 }; - - SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatches, "InternStringTest"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/InternSharedString.java 2019-07-24 08:28:03.829467797 -0400 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test shared strings together with string intern operation + * @requires vm.cds.archived.java.heap + * @library /test/hotspot/jtreg/runtime/cds /test/lib + * @modules jdk.jartool/sun.tools.jar + * @compile InternStringTest.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver InternSharedString + */ + +public class InternSharedString { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, InternSharedString::test); + } + + public static void test(String[] args) throws Exception { + SharedStringsUtils.buildJarAndWhiteBox("InternStringTest"); + + SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("InternStringTest"), + "ExtraSharedInput.txt", "-Xlog:cds,cds+hashtables"); + + String[] extraMatches = new String[] { + InternStringTest.passed_output1, + InternStringTest.passed_output2, + InternStringTest.passed_output3 }; + + SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatches, "InternStringTest"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/InternStringTest.java 2019-07-24 08:28:04.541467772 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class InternStringTest { - public static String passed_output1 = "Found shared string."; - public static String passed_output2 = "Shared strings are equal."; - public static String passed_output3 = "Found shared string containing latin1 supplement chars."; - public static String passed_output4 = "Found shared string containing non-western chars."; - public static final String latin1Sup = "XXXX \u00a3 YYYY"; // \u00a3 = The pound sign - public static final String nonWestern = "XXXX \u5678 YYYY"; // \u5678 = Unicode Han Character 'ton (metric or English)' - - public static void main(String[] args) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - - // All string literals are shared. - String shared1 = "LiveOak"; - String interned1 = shared1.intern(); - if (wb.areSharedStringsIgnored() || wb.isShared(interned1)) { - System.out.println(passed_output1); - } else { - throw new RuntimeException("Failed: String is not shared."); - } - - // Test 2: shared_string1.intern() == shared_string2.intern() - String shared2 = "LiveOak"; - String interned2 = shared2.intern(); - if (interned1 == interned2) { - System.out.println(passed_output2); - } else { - throw new RuntimeException("Not equal!"); - } - - // Test 3: interned strings with a char in latin1 supplement block [\u0080-\u00ff] - { - String a = "X" + latin1Sup.substring(1); - String b = a.intern(); - - if (wb.areSharedStringsIgnored() || wb.isShared(b)) { - System.out.println(passed_output3); - } else { - throw new RuntimeException("Failed: expected shared string with latin1-supplement chars."); - } - } - - // Test 5: interned strings with non-western characters - { - String a = "X" + nonWestern.substring(1); - String b = a.intern(); - if (wb.areSharedStringsIgnored() || wb.isShared(b)) { - System.out.println(passed_output4); - } else { - throw new RuntimeException("Failed: expected shared string with non-western chars."); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/InternStringTest.java 2019-07-24 08:28:04.209467784 -0400 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class InternStringTest { + public static String passed_output1 = "Found shared string."; + public static String passed_output2 = "Shared strings are equal."; + public static String passed_output3 = "Found shared string containing latin1 supplement chars."; + public static String passed_output4 = "Found shared string containing non-western chars."; + public static final String latin1Sup = "XXXX \u00a3 YYYY"; // \u00a3 = The pound sign + public static final String nonWestern = "XXXX \u5678 YYYY"; // \u5678 = Unicode Han Character 'ton (metric or English)' + + public static void main(String[] args) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + + // All string literals are shared. + String shared1 = "LiveOak"; + String interned1 = shared1.intern(); + if (wb.areSharedStringsIgnored() || wb.isShared(interned1)) { + System.out.println(passed_output1); + } else { + throw new RuntimeException("Failed: String is not shared."); + } + + // Test 2: shared_string1.intern() == shared_string2.intern() + String shared2 = "LiveOak"; + String interned2 = shared2.intern(); + if (interned1 == interned2) { + System.out.println(passed_output2); + } else { + throw new RuntimeException("Not equal!"); + } + + // Test 3: interned strings with a char in latin1 supplement block [\u0080-\u00ff] + { + String a = "X" + latin1Sup.substring(1); + String b = a.intern(); + + if (wb.areSharedStringsIgnored() || wb.isShared(b)) { + System.out.println(passed_output3); + } else { + throw new RuntimeException("Failed: expected shared string with latin1-supplement chars."); + } + } + + // Test 5: interned strings with non-western characters + { + String a = "X" + nonWestern.substring(1); + String b = a.intern(); + if (wb.areSharedStringsIgnored() || wb.isShared(b)) { + System.out.println(passed_output4); + } else { + throw new RuntimeException("Failed: expected shared string with non-western chars."); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/InvalidFileFormat.java 2019-07-24 08:28:04.861467761 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Check most common errors in file format - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @build HelloString - * @run driver InvalidFileFormat - */ - -import java.io.File; -import jdk.test.lib.cds.CDSTestUtils; -import jdk.test.lib.process.OutputAnalyzer; - -// Checking most common error use cases -// This file is not an exhastive test of various shared data file corruption -// Note on usability intent: the shared data file is created and handled by -// the previledge person in the server environment. -public class InvalidFileFormat { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, InvalidFileFormat::test); - } - - public static void test(String[] args) throws Exception { - SharedStringsUtils.buildJar("HelloString"); - - test("NonExistentFile.txt", "Unable to get hashtable dump file size"); - test("InvalidHeader.txt", "wrong version of hashtable dump file"); - test("InvalidVersion.txt", "wrong version of hashtable dump file"); - test("CorruptDataLine.txt", "Unknown data type. Corrupted at line 2"); - test("InvalidSymbol.txt", "Unexpected character. Corrupted at line 2"); - test("InvalidSymbolFormat.txt", "Unrecognized format. Corrupted at line 9"); - test("OverflowPrefix.txt", "Num overflow. Corrupted at line 4"); - test("UnrecognizedPrefix.txt", "Unrecognized format. Corrupted at line 5"); - test("TruncatedString.txt", "Truncated. Corrupted at line 3"); - test("LengthOverflow.txt", "string length too large: 2147483647"); - } - - private static void - test(String dataFileName, String expectedWarning) throws Exception { - System.out.println("Filename for testcase: " + dataFileName); - - OutputAnalyzer out = SharedStringsUtils.dumpWithoutChecks(TestCommon.list("HelloString"), - "invalidFormat" + File.separator + dataFileName); - - CDSTestUtils.checkMappingFailure(out); - out.shouldContain(expectedWarning).shouldHaveExitValue(1); - } - -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/InvalidFileFormat.java 2019-07-24 08:28:04.589467771 -0400 @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Check most common errors in file format + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @build HelloString + * @run driver InvalidFileFormat + */ + +import java.io.File; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +// Checking most common error use cases +// This file is not an exhastive test of various shared data file corruption +// Note on usability intent: the shared data file is created and handled by +// the previledge person in the server environment. +public class InvalidFileFormat { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, InvalidFileFormat::test); + } + + public static void test(String[] args) throws Exception { + SharedStringsUtils.buildJar("HelloString"); + + test("NonExistentFile.txt", "Unable to get hashtable dump file size"); + test("InvalidHeader.txt", "wrong version of hashtable dump file"); + test("InvalidVersion.txt", "wrong version of hashtable dump file"); + test("CorruptDataLine.txt", "Unknown data type. Corrupted at line 2"); + test("InvalidSymbol.txt", "Unexpected character. Corrupted at line 2"); + test("InvalidSymbolFormat.txt", "Unrecognized format. Corrupted at line 9"); + test("OverflowPrefix.txt", "Num overflow. Corrupted at line 4"); + test("UnrecognizedPrefix.txt", "Unrecognized format. Corrupted at line 5"); + test("TruncatedString.txt", "Truncated. Corrupted at line 3"); + test("LengthOverflow.txt", "string length too large: 2147483647"); + } + + private static void + test(String dataFileName, String expectedWarning) throws Exception { + System.out.println("Filename for testcase: " + dataFileName); + + OutputAnalyzer out = SharedStringsUtils.dumpWithoutChecks(TestCommon.list("HelloString"), + "invalidFormat" + File.separator + dataFileName); + + CDSTestUtils.checkMappingFailure(out); + out.shouldContain(expectedWarning).shouldHaveExitValue(1); + } + +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/LargePages.java 2019-07-24 08:28:05.265467747 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Basic shared string test with large pages - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @build HelloString - * @run driver LargePages - */ -public class LargePages { - static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables"; - - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, LargePages::test); - } - - public static void test(String[] args) throws Exception { - SharedStringsUtils.buildJar("HelloString"); - - SharedStringsUtils.dump(TestCommon.list("HelloString"), - "SharedStringsBasic.txt", "-XX:+UseLargePages", CDS_LOGGING); - SharedStringsUtils.runWithArchive("HelloString", "-XX:+UseLargePages"); - - SharedStringsUtils.dump(TestCommon.list("HelloString"), - "SharedStringsBasic.txt", CDS_LOGGING, - "-XX:+UseLargePages", "-XX:+UseLargePagesInMetaspace"); - SharedStringsUtils.runWithArchive("HelloString", - "-XX:+UseLargePages", "-XX:+UseLargePagesInMetaspace"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/LargePages.java 2019-07-24 08:28:04.949467758 -0400 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Basic shared string test with large pages + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @build HelloString + * @run driver LargePages + */ +public class LargePages { + static final String CDS_LOGGING = "-Xlog:cds,cds+hashtables"; + + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, LargePages::test); + } + + public static void test(String[] args) throws Exception { + SharedStringsUtils.buildJar("HelloString"); + + SharedStringsUtils.dump(TestCommon.list("HelloString"), + "SharedStringsBasic.txt", "-XX:+UseLargePages", CDS_LOGGING); + SharedStringsUtils.runWithArchive("HelloString", "-XX:+UseLargePages"); + + SharedStringsUtils.dump(TestCommon.list("HelloString"), + "SharedStringsBasic.txt", CDS_LOGGING, + "-XX:+UseLargePages", "-XX:+UseLargePagesInMetaspace"); + SharedStringsUtils.runWithArchive("HelloString", + "-XX:+UseLargePages", "-XX:+UseLargePagesInMetaspace"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockSharedStrings.java 2019-07-24 08:28:05.657467733 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Test locking on shared strings - * @requires vm.cds.archived.java.heap - * @library /test/hotspot/jtreg/runtime/appcds /test/lib - * @modules jdk.jartool/sun.tools.jar - * @compile LockStringTest.java LockStringValueTest.java - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver LockSharedStrings - */ - -public class LockSharedStrings { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, LockSharedStrings::test); - } - - public static void test(String[] args) throws Exception { - SharedStringsUtils.buildJarAndWhiteBox("LockStringTest", "LockStringValueTest"); - - SharedStringsUtils.dumpWithWhiteBox( - TestCommon.list("LockStringTest", "LockStringValueTest"), - "ExtraSharedInput.txt", "-Xlog:cds,cds+hashtables"); - - String[] extraMatch = new String[] {"LockStringTest: PASS"}; - SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatch, "LockStringTest"); - - extraMatch = new String[] {"LockStringValueTest: PASS"}; - SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatch, "LockStringValueTest", - "--add-opens=java.base/java.lang=ALL-UNNAMED"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/LockSharedStrings.java 2019-07-24 08:28:05.349467744 -0400 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Test locking on shared strings + * @requires vm.cds.archived.java.heap + * @library /test/hotspot/jtreg/runtime/cds /test/lib + * @modules jdk.jartool/sun.tools.jar + * @compile LockStringTest.java LockStringValueTest.java + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver LockSharedStrings + */ + +public class LockSharedStrings { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, LockSharedStrings::test); + } + + public static void test(String[] args) throws Exception { + SharedStringsUtils.buildJarAndWhiteBox("LockStringTest", "LockStringValueTest"); + + SharedStringsUtils.dumpWithWhiteBox( + TestCommon.list("LockStringTest", "LockStringValueTest"), + "ExtraSharedInput.txt", "-Xlog:cds,cds+hashtables"); + + String[] extraMatch = new String[] {"LockStringTest: PASS"}; + SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatch, "LockStringTest"); + + extraMatch = new String[] {"LockStringValueTest: PASS"}; + SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatch, "LockStringValueTest", + "--add-opens=java.base/java.lang=ALL-UNNAMED"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockStringTest.java 2019-07-24 08:28:06.029467720 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class LockStringTest extends Thread { - static String lock; - static boolean done; - static WhiteBox wb = WhiteBox.getWhiteBox(); - - public static void main(String[] args) throws Exception { - - if (wb.areSharedStringsIgnored()) { - System.out.println("The shared strings are ignored"); - System.out.println("LockStringTest: PASS"); - return; - } - - if (!wb.isShared(LockStringTest.class)) { - throw new RuntimeException("Failed: LockStringTest class is not shared."); - } - - // Note: This class is archived. All string literals (including the ones used in this class) - // in all archived classes are interned into the CDS shared string table. - - doTest("StringLock", false); - doTest("", true); - - // The following string has a 0 hashCode. Calling String.hashCode() could cause - // the String.hash field to be written into, if so make sure we don't functionally - // break. - doTest("\u0121\u0151\u00a2\u0001\u0001\udbb2", true); - } - - private static void doTest(String s, boolean hasZeroHashCode) throws Exception { - lock = s; - done = false; - - if (!wb.isShared(lock)) { - throw new RuntimeException("Failed: String \"" + lock + "\" is not shared."); - } - - if (hasZeroHashCode && lock.hashCode() != 0) { - throw new RuntimeException("Shared string \"" + lock + "\" should have 0 hashCode, but is instead " + lock.hashCode()); - } - - String copy = new String(lock); - if (lock.hashCode() != copy.hashCode()) { - throw new RuntimeException("Shared string \"" + lock + "\" does not have the same hashCode as its non-shared copy"); - } - - new LockStringTest().start(); - - synchronized(lock) { - while (!done) { - lock.wait(); - } - } - System.gc(); - System.out.println("LockStringTest: PASS"); - } - - public void run() { - String shared = "LiveOak"; - synchronized (lock) { - for (int i = 0; i < 100; i++) { - new String(shared); - System.gc(); - try { - sleep(5); - } catch (InterruptedException e) {} - } - done = true; - lock.notify(); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/LockStringTest.java 2019-07-24 08:28:05.749467730 -0400 @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class LockStringTest extends Thread { + static String lock; + static boolean done; + static WhiteBox wb = WhiteBox.getWhiteBox(); + + public static void main(String[] args) throws Exception { + + if (wb.areSharedStringsIgnored()) { + System.out.println("The shared strings are ignored"); + System.out.println("LockStringTest: PASS"); + return; + } + + if (!wb.isShared(LockStringTest.class)) { + throw new RuntimeException("Failed: LockStringTest class is not shared."); + } + + // Note: This class is archived. All string literals (including the ones used in this class) + // in all archived classes are interned into the CDS shared string table. + + doTest("StringLock", false); + doTest("", true); + + // The following string has a 0 hashCode. Calling String.hashCode() could cause + // the String.hash field to be written into, if so make sure we don't functionally + // break. + doTest("\u0121\u0151\u00a2\u0001\u0001\udbb2", true); + } + + private static void doTest(String s, boolean hasZeroHashCode) throws Exception { + lock = s; + done = false; + + if (!wb.isShared(lock)) { + throw new RuntimeException("Failed: String \"" + lock + "\" is not shared."); + } + + if (hasZeroHashCode && lock.hashCode() != 0) { + throw new RuntimeException("Shared string \"" + lock + "\" should have 0 hashCode, but is instead " + lock.hashCode()); + } + + String copy = new String(lock); + if (lock.hashCode() != copy.hashCode()) { + throw new RuntimeException("Shared string \"" + lock + "\" does not have the same hashCode as its non-shared copy"); + } + + new LockStringTest().start(); + + synchronized(lock) { + while (!done) { + lock.wait(); + } + } + System.gc(); + System.out.println("LockStringTest: PASS"); + } + + public void run() { + String shared = "LiveOak"; + synchronized (lock) { + for (int i = 0; i < 100; i++) { + new String(shared); + System.gc(); + try { + sleep(5); + } catch (InterruptedException e) {} + } + done = true; + lock.notify(); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockStringValueTest.java 2019-07-24 08:28:06.413467707 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.reflect.*; -import sun.hotspot.WhiteBox; - -/* - * Lock the 'value' field of a known shared string, java.lang.Object - */ -public class LockStringValueTest { - public static void main(String args[]) { - String s = "LiveOak"; - WhiteBox wb = WhiteBox.getWhiteBox(); - - if (wb.areSharedStringsIgnored()) { - System.out.println("The shared strings are ignored"); - System.out.println("LockStringValueTest: PASS"); - return; - } - - if (!wb.isShared(s)) { - throw new RuntimeException("LockStringValueTest Failed: String is not shared."); - } - - Class c = s.getClass(); - try { - Field f = c.getDeclaredField("value"); - f.setAccessible(true); - Object v = f.get(s); - lock(v); - } catch (NoSuchFieldException nfe) { - } catch (IllegalAccessException iae) {} - } - - public static void lock(Object o) { - synchronized (o) { - System.out.println("LockStringValueTest: PASS"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/LockStringValueTest.java 2019-07-24 08:28:06.081467719 -0400 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.reflect.*; +import sun.hotspot.WhiteBox; + +/* + * Lock the 'value' field of a known shared string, java.lang.Object + */ +public class LockStringValueTest { + public static void main(String args[]) { + String s = "LiveOak"; + WhiteBox wb = WhiteBox.getWhiteBox(); + + if (wb.areSharedStringsIgnored()) { + System.out.println("The shared strings are ignored"); + System.out.println("LockStringValueTest: PASS"); + return; + } + + if (!wb.isShared(s)) { + throw new RuntimeException("LockStringValueTest Failed: String is not shared."); + } + + Class c = s.getClass(); + try { + Field f = c.getDeclaredField("value"); + f.setAccessible(true); + Object v = f.get(s); + lock(v); + } catch (NoSuchFieldException nfe) { + } catch (IllegalAccessException iae) {} + } + + public static void lock(Object o) { + synchronized (o) { + System.out.println("LockStringValueTest: PASS"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.java 2019-07-24 08:28:06.749467695 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Basic test for shared strings - * @requires vm.cds.archived.java.heap - * @library /test/hotspot/jtreg/runtime/appcds /test/lib - * @modules jdk.jartool/sun.tools.jar - * @build HelloString - * @run driver SharedStringsBasic - */ -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -// This test does not use SharedStringsUtils.dumpXXX() -// and SharedStringsUtils.runWithXXX() intentionally: -// - in order to demonstrate the basic use of the functionality -// - to provide sanity check and catch potential problems in the utils -public class SharedStringsBasic { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, SharedStringsBasic::test); - } - - public static void test(String[] args) throws Exception { - String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); - - String appJar = JarBuilder.build("SharedStringsBasic", "HelloString"); - - String sharedArchiveConfigFile = - TestCommon.getSourceFile("SharedStringsBasic.txt").toString(); - - ProcessBuilder dumpPb = ProcessTools.createJavaProcessBuilder(true, - TestCommon.concat(vmOptionsPrefix, - "-cp", appJar, - "-XX:SharedArchiveConfigFile=" + sharedArchiveConfigFile, - "-XX:SharedArchiveFile=./SharedStringsBasic.jsa", - "-Xshare:dump", - "-Xlog:cds,cds+hashtables")); - - TestCommon.executeAndLog(dumpPb, "dump") - .shouldContain("Shared string table stats") - .shouldHaveExitValue(0); - - ProcessBuilder runPb = ProcessTools.createJavaProcessBuilder(true, - TestCommon.concat(vmOptionsPrefix, - "-cp", appJar, - "-XX:SharedArchiveFile=./SharedStringsBasic.jsa", - "-Xshare:auto", - "-showversion", - "HelloString")); - - TestCommon.executeAndLog(runPb, "run").shouldHaveExitValue(0); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsBasic.java 2019-07-24 08:28:06.461467705 -0400 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Basic test for shared strings + * @requires vm.cds.archived.java.heap + * @library /test/hotspot/jtreg/runtime/cds /test/lib + * @modules jdk.jartool/sun.tools.jar + * @build HelloString + * @run driver SharedStringsBasic + */ +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +// This test does not use SharedStringsUtils.dumpXXX() +// and SharedStringsUtils.runWithXXX() intentionally: +// - in order to demonstrate the basic use of the functionality +// - to provide sanity check and catch potential problems in the utils +public class SharedStringsBasic { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, SharedStringsBasic::test); + } + + public static void test(String[] args) throws Exception { + String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); + + String appJar = JarBuilder.build("SharedStringsBasic", "HelloString"); + + String sharedArchiveConfigFile = + TestCommon.getSourceFile("SharedStringsBasic.txt").toString(); + + ProcessBuilder dumpPb = ProcessTools.createJavaProcessBuilder(true, + TestCommon.concat(vmOptionsPrefix, + "-cp", appJar, + "-XX:SharedArchiveConfigFile=" + sharedArchiveConfigFile, + "-XX:SharedArchiveFile=./SharedStringsBasic.jsa", + "-Xshare:dump", + "-Xlog:cds,cds+hashtables")); + + TestCommon.executeAndLog(dumpPb, "dump") + .shouldContain("Shared string table stats") + .shouldHaveExitValue(0); + + ProcessBuilder runPb = ProcessTools.createJavaProcessBuilder(true, + TestCommon.concat(vmOptionsPrefix, + "-cp", appJar, + "-XX:SharedArchiveFile=./SharedStringsBasic.jsa", + "-Xshare:auto", + "-showversion", + "HelloString")); + + TestCommon.executeAndLog(runPb, "run").shouldHaveExitValue(0); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.txt 2019-07-24 08:28:07.149467681 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -VERSION: 1.0 -@SECTION: String -0: -5: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -1: * -1: - -1: . -1: / -1: : -1: C -1: I -1: J -1: U -1: Z -1: _ -8: segments -1: | -5: cp850 -5: cp852 -5: cp855 -5: cp857 -5: cp858 -5: cp862 -5: cp866 -11: ISO_8859_13 -11: ISO_8859_15 -5: cp874 -47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER -7: CHECKED -3: zip -10: waitStatus -33: java.lang.invoke.MethodHandleImpl -7: .jimage -5: cp912 -5: cp914 -5: cp915 -5: cp920 -5: cp923 -5: cp936 -5: euccn -5: eucjp -11: permissions -5: euckr -6: SIGNAL -5: cp737 -17: java.library.path -5: cp775 -13: classValueMap -4: utf8 -9: PROPAGATE -9: baseCount -7: cskoi8r -8: cyrillic -@SECTION: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsBasic.txt 2019-07-24 08:28:06.837467692 -0400 @@ -0,0 +1,60 @@ +VERSION: 1.0 +@SECTION: String +0: +5: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +1: * +1: - +1: . +1: / +1: : +1: C +1: I +1: J +1: U +1: Z +1: _ +8: segments +1: | +5: cp850 +5: cp852 +5: cp855 +5: cp857 +5: cp858 +5: cp862 +5: cp866 +11: ISO_8859_13 +11: ISO_8859_15 +5: cp874 +47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER +7: CHECKED +3: zip +10: waitStatus +33: java.lang.invoke.MethodHandleImpl +7: .jimage +5: cp912 +5: cp914 +5: cp915 +5: cp920 +5: cp923 +5: cp936 +5: euccn +5: eucjp +11: permissions +5: euckr +6: SIGNAL +5: cp737 +17: java.library.path +5: cp775 +13: classValueMap +4: utf8 +9: PROPAGATE +9: baseCount +7: cskoi8r +8: cyrillic +@SECTION: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasicPlus.java 2019-07-24 08:28:07.473467670 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Basic plus test for shared strings - * @requires vm.cds.archived.java.heap - * @library /test/hotspot/jtreg/runtime/appcds /test/lib - * @modules jdk.jartool/sun.tools.jar - * @build HelloStringPlus sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver SharedStringsBasicPlus - */ - -public class SharedStringsBasicPlus { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, SharedStringsBasicPlus::test); - } - - public static void test(String[] args) throws Exception { - SharedStringsUtils.buildJarAndWhiteBox("HelloStringPlus"); - - SharedStringsUtils.dumpWithWhiteBox( TestCommon.list("HelloStringPlus"), - "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); - - SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringPlus"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsBasicPlus.java 2019-07-24 08:28:07.197467680 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Basic plus test for shared strings + * @requires vm.cds.archived.java.heap + * @library /test/hotspot/jtreg/runtime/cds /test/lib + * @modules jdk.jartool/sun.tools.jar + * @build HelloStringPlus sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver SharedStringsBasicPlus + */ + +public class SharedStringsBasicPlus { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, SharedStringsBasicPlus::test); + } + + public static void test(String[] args) throws Exception { + SharedStringsUtils.buildJarAndWhiteBox("HelloStringPlus"); + + SharedStringsUtils.dumpWithWhiteBox( TestCommon.list("HelloStringPlus"), + "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); + + SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringPlus"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsHumongous.java 2019-07-24 08:28:07.833467658 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Use a shared string allocated in a humongous G1 region. - * @comment -- the following implies that G1 is used (by command-line or by default) - * @requires vm.cds.archived.java.heap - * - * @library /test/hotspot/jtreg/runtime/appcds /test/lib - * @modules jdk.jartool/sun.tools.jar - * @build HelloString - * @build sun.hotspot.WhiteBox - * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission - * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. SharedStringsHumongous - */ -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import sun.hotspot.WhiteBox; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.Asserts; - -public class SharedStringsHumongous { - static String sharedArchiveConfigFile = System.getProperty("user.dir") + File.separator + "SharedStringsHumongous_gen.txt"; - - public static void main(String[] args) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - - try (FileOutputStream fos = new FileOutputStream(sharedArchiveConfigFile)) { - PrintWriter out = new PrintWriter(new OutputStreamWriter(fos)); - out.println("VERSION: 1.0"); - out.println("@SECTION: String"); - out.println("31: shared_test_string_unique_14325"); - int region_size = wb.g1RegionSize(); - char body[] = new char[region_size + region_size / 2]; - for (int i = 0; i < body.length; i++) { - body[i] = 'x'; - } - Asserts.assertTrue(wb.g1IsHumongous(body)); - String prefix = "generated_string (followed by " + body.length + " 'x') "; - - System.out.println("G1 region size: " + region_size); - System.out.println("Using a humongous string: " + prefix); - - String s = prefix + new String(body); - out.println(s.length() + ": " + s); - out.close(); - } - - SharedStringsUtils.run(args, SharedStringsHumongous::test); - } - - public static void test(String[] args) throws Exception { - String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); - String appJar = JarBuilder.build("SharedStringsHumongous", "HelloString"); - - OutputAnalyzer dumpOutput = TestCommon.dump(appJar, TestCommon.list("HelloString"), - TestCommon.concat(vmOptionsPrefix, - "-XX:SharedArchiveConfigFile=" + sharedArchiveConfigFile, - "-Xlog:gc+region+cds", - "-Xlog:gc+region=trace")); - TestCommon.checkDump(dumpOutput, "extra interned string ignored; size too large"); - // Extra strings that are humongous are not kelp alive, so they should be GC'ed - // before dumping the string table. That means the heap should contain no - // humongous regions. - dumpOutput.shouldNotMatch("gc,region,cds. HeapRegion 0x[0-9a-f]* HUM"); - - OutputAnalyzer execOutput = TestCommon.exec(appJar, - TestCommon.concat(vmOptionsPrefix, "HelloString")); - TestCommon.checkExec(execOutput); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsHumongous.java 2019-07-24 08:28:07.561467667 -0400 @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Use a shared string allocated in a humongous G1 region. + * @comment -- the following implies that G1 is used (by command-line or by default) + * @requires vm.cds.archived.java.heap + * + * @library /test/hotspot/jtreg/runtime/cds /test/lib + * @modules jdk.jartool/sun.tools.jar + * @build HelloString + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. SharedStringsHumongous + */ +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import sun.hotspot.WhiteBox; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.Asserts; + +public class SharedStringsHumongous { + static String sharedArchiveConfigFile = System.getProperty("user.dir") + File.separator + "SharedStringsHumongous_gen.txt"; + + public static void main(String[] args) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + + try (FileOutputStream fos = new FileOutputStream(sharedArchiveConfigFile)) { + PrintWriter out = new PrintWriter(new OutputStreamWriter(fos)); + out.println("VERSION: 1.0"); + out.println("@SECTION: String"); + out.println("31: shared_test_string_unique_14325"); + int region_size = wb.g1RegionSize(); + char body[] = new char[region_size + region_size / 2]; + for (int i = 0; i < body.length; i++) { + body[i] = 'x'; + } + Asserts.assertTrue(wb.g1IsHumongous(body)); + String prefix = "generated_string (followed by " + body.length + " 'x') "; + + System.out.println("G1 region size: " + region_size); + System.out.println("Using a humongous string: " + prefix); + + String s = prefix + new String(body); + out.println(s.length() + ": " + s); + out.close(); + } + + SharedStringsUtils.run(args, SharedStringsHumongous::test); + } + + public static void test(String[] args) throws Exception { + String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); + String appJar = JarBuilder.build("SharedStringsHumongous", "HelloString"); + + OutputAnalyzer dumpOutput = TestCommon.dump(appJar, TestCommon.list("HelloString"), + TestCommon.concat(vmOptionsPrefix, + "-XX:SharedArchiveConfigFile=" + sharedArchiveConfigFile, + "-Xlog:gc+region+cds", + "-Xlog:gc+region=trace")); + TestCommon.checkDump(dumpOutput, "extra interned string ignored; size too large"); + // Extra strings that are humongous are not kelp alive, so they should be GC'ed + // before dumping the string table. That means the heap should contain no + // humongous regions. + dumpOutput.shouldNotMatch("gc,region,cds. HeapRegion 0x[0-9a-f]* HUM"); + + OutputAnalyzer execOutput = TestCommon.exec(appJar, + TestCommon.concat(vmOptionsPrefix, "HelloString")); + TestCommon.checkExec(execOutput); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsStress.java 2019-07-24 08:28:08.217467644 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Write a lots of shared strings. - * @requires vm.cds.archived.java.heap - * @library /test/hotspot/jtreg/runtime/appcds /test/lib - * @modules jdk.jartool/sun.tools.jar - * @build HelloString - * @run driver/timeout=500 SharedStringsStress - */ -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class SharedStringsStress { - static String sharedArchiveConfigFile = System.getProperty("user.dir") + File.separator + "SharedStringsStress_gen.txt"; - - public static void main(String[] args) throws Exception { - try (FileOutputStream fos = new FileOutputStream(sharedArchiveConfigFile)) { - PrintWriter out = new PrintWriter(new OutputStreamWriter(fos)); - out.println("VERSION: 1.0"); - out.println("@SECTION: String"); - out.println("31: shared_test_string_unique_14325"); - for (int i=0; i<200000; i++) { - String s = "generated_string " + i; - out.println(s.length() + ": " + s); - } - out.close(); - } - - SharedStringsUtils.run(args, SharedStringsStress::test); - } - - public static void test(String[] args) throws Exception { - String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); - String appJar = JarBuilder.build("SharedStringsStress", "HelloString"); - - String test_cases[][] = { - // default heap size - {}, - - // Test for handling of heap fragmentation. With sharedArchiveConfigFile, we will dump about - // 18MB of shared objects on 64 bit VM (smaller on 32-bit). - // - // During dump time, an extra copy of these objects are allocated, - // so we need about 36MB, plus a few MB for other system data. So 64MB total heap - // should be enough. - // - // The VM should executed a full GC to maximize contiguous free space and - // avoid fragmentation. - {"-Xmx64m"}, - }; - - for (String[] extra_opts: test_cases) { - vmOptionsPrefix = TestCommon.concat(vmOptionsPrefix, extra_opts); - - OutputAnalyzer dumpOutput = TestCommon.dump(appJar, TestCommon.list("HelloString"), - TestCommon.concat(vmOptionsPrefix, - "-XX:SharedArchiveConfigFile=" + sharedArchiveConfigFile, - "-Xlog:gc+region+cds", - "-Xlog:gc+region=trace")); - TestCommon.checkDump(dumpOutput); - OutputAnalyzer execOutput = TestCommon.exec(appJar, - TestCommon.concat(vmOptionsPrefix, "HelloString")); - TestCommon.checkExec(execOutput); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsStress.java 2019-07-24 08:28:07.913467655 -0400 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Write a lots of shared strings. + * @requires vm.cds.archived.java.heap + * @library /test/hotspot/jtreg/runtime/cds /test/lib + * @modules jdk.jartool/sun.tools.jar + * @build HelloString + * @run driver/timeout=500 SharedStringsStress + */ +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class SharedStringsStress { + static String sharedArchiveConfigFile = System.getProperty("user.dir") + File.separator + "SharedStringsStress_gen.txt"; + + public static void main(String[] args) throws Exception { + try (FileOutputStream fos = new FileOutputStream(sharedArchiveConfigFile)) { + PrintWriter out = new PrintWriter(new OutputStreamWriter(fos)); + out.println("VERSION: 1.0"); + out.println("@SECTION: String"); + out.println("31: shared_test_string_unique_14325"); + for (int i=0; i<200000; i++) { + String s = "generated_string " + i; + out.println(s.length() + ": " + s); + } + out.close(); + } + + SharedStringsUtils.run(args, SharedStringsStress::test); + } + + public static void test(String[] args) throws Exception { + String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); + String appJar = JarBuilder.build("SharedStringsStress", "HelloString"); + + String test_cases[][] = { + // default heap size + {}, + + // Test for handling of heap fragmentation. With sharedArchiveConfigFile, we will dump about + // 18MB of shared objects on 64 bit VM (smaller on 32-bit). + // + // During dump time, an extra copy of these objects are allocated, + // so we need about 36MB, plus a few MB for other system data. So 64MB total heap + // should be enough. + // + // The VM should executed a full GC to maximize contiguous free space and + // avoid fragmentation. + {"-Xmx64m"}, + }; + + for (String[] extra_opts: test_cases) { + vmOptionsPrefix = TestCommon.concat(vmOptionsPrefix, extra_opts); + + OutputAnalyzer dumpOutput = TestCommon.dump(appJar, TestCommon.list("HelloString"), + TestCommon.concat(vmOptionsPrefix, + "-XX:SharedArchiveConfigFile=" + sharedArchiveConfigFile, + "-Xlog:gc+region+cds", + "-Xlog:gc+region=trace")); + TestCommon.checkDump(dumpOutput); + OutputAnalyzer execOutput = TestCommon.exec(appJar, + TestCommon.concat(vmOptionsPrefix, "HelloString")); + TestCommon.checkExec(execOutput); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsUtils.java 2019-07-24 08:28:08.609467631 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,190 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import jdk.test.lib.cds.CDSOptions; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.Asserts; - -// A helper/utility class for testing shared strings -public class SharedStringsUtils { - public static final String TEST_JAR_NAME = "test"; - public static final String TEST_JAR_NAME_FULL = "test.jar"; - public static final String WHITEBOX_JAR_NAME = "whitebox"; - - public static interface Test { - public void dotest(String args[]) throws Exception ; - } - - private static String[][] vmOptionCombos = { - {}, - {"-XX:+UseStringDeduplication"}, - {"-XX:-CompactStrings"} - }; - - private static String childVMOptionsPrefix[] = {}; - - // SharedStringsUtils.run() is for running the main test body multiple times, each with a different - // set of extra VM options that are passed to the child processes. - // - // See ./ExerciseGC.java for an example. - public static void run(String args[], Test t) throws Exception { - int numSetOfChildVMOptions = vmOptionCombos.length; - for (int i=0; i< numSetOfChildVMOptions; i++) { - run(i, numSetOfChildVMOptions, args, t); - } - } - - public static void run(int i, int numSetOfChildVMOptions, String args[], Test t) throws Exception { - // When you add a new set of options to vmOptionCombos, we make sure all - // callers of this method (i.e., IncompatibleOptions.java) knows about it and will - // add new @test blocks accordingly. - Asserts.assertEQ(numSetOfChildVMOptions, vmOptionCombos.length); - String opts[] = vmOptionCombos[i]; - - System.out.print("Running with extra VM option prefix for child processes [" + opts.length + "] ="); - for (String o : opts) { - System.out.print(" " + o); - } - System.out.println(); - childVMOptionsPrefix = opts; - t.dotest(args); - } - - public static String[] getChildVMOptionsPrefix() { - return childVMOptionsPrefix; - } - - public static String getWbParam() { - return "-Xbootclasspath/a:" + TestCommon.getTestJar(WHITEBOX_JAR_NAME + ".jar"); - } - - // build the test jar - public static void buildJar(String... classes) throws Exception { - JarBuilder.build(TEST_JAR_NAME, classes); - } - - // build the test jar and a whitebox jar - public static void buildJarAndWhiteBox(String... classes) throws Exception { - JarBuilder.build(true, WHITEBOX_JAR_NAME, "sun/hotspot/WhiteBox"); - buildJar(classes); - } - - // execute the "dump" operation, but do not check the output - public static OutputAnalyzer dumpWithoutChecks(String appClasses[], - String sharedDataFile, String... extraOptions) throws Exception { - - String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); - String[] args = - TestCommon.concat(extraOptions, "-XX:+UseCompressedOops", "-XX:+UseG1GC", - "-XX:SharedArchiveConfigFile=" + - TestCommon.getSourceFile(sharedDataFile)); - args = TestCommon.concat(childVMOptionsPrefix, args); - - return TestCommon.dump(appJar, appClasses, args); - } - - // execute the dump operation and check the output - public static OutputAnalyzer dump(String appClasses[], - String sharedDataFile, String... extraOptions) throws Exception { - OutputAnalyzer output = dumpWithoutChecks(appClasses, sharedDataFile, extraOptions); - checkDump(output); - return output; - } - - public static OutputAnalyzer dumpWithWhiteBox(String appClasses[], - String sharedDataFile, String... extraOptions) throws Exception { - return dump(appClasses, sharedDataFile, - TestCommon.concat(extraOptions, getWbParam()) ); - } - - // execute/run test with shared archive - public static OutputAnalyzer runWithArchiveAuto(String className, - String... extraOptions) throws Exception { - - String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); - String[] args = TestCommon.concat(extraOptions, - "-cp", appJar, "-XX:+UseCompressedOops", "-XX:+UseG1GC", className); - args = TestCommon.concat(childVMOptionsPrefix, args); - - OutputAnalyzer output = TestCommon.execAuto(args); - checkExecAuto(output); - return output; - } - - public static OutputAnalyzer runWithArchive(String className, - String... extraOptions) throws Exception { - - return runWithArchive(new String[0], className, extraOptions); - } - - public static OutputAnalyzer runWithArchive(String[] extraMatches, - String className, String... extraOptions) throws Exception { - - String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); - String[] args = TestCommon.concat(extraOptions, - "-XX:+UseCompressedOops", "-XX:+UseG1GC", className); - args = TestCommon.concat(childVMOptionsPrefix, args); - - OutputAnalyzer output = TestCommon.exec(appJar, args); - checkExec(output, extraMatches); - return output; - } - - - // execute/run test with shared archive and white box - public static OutputAnalyzer runWithArchiveAndWhiteBox(String className, - String... extraOptions) throws Exception { - - return runWithArchive(className, - TestCommon.concat(extraOptions, getWbParam(), - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI") ); - } - - public static OutputAnalyzer runWithArchiveAndWhiteBox(String[] extraMatches, - String className, String... extraOptions) throws Exception { - - return runWithArchive(extraMatches, className, - TestCommon.concat(extraOptions, getWbParam(), - "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI") ); - } - - - public static void checkDump(OutputAnalyzer output) throws Exception { - output.shouldContain("Shared string table stats"); - TestCommon.checkDump(output); - } - - public static void checkExec(OutputAnalyzer output) throws Exception { - TestCommon.checkExec(output, new String[0]); - } - - public static void checkExecAuto(OutputAnalyzer output) throws Exception { - CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); - TestCommon.checkExec(output, opts); - } - - public static void checkExec(OutputAnalyzer output, String[] extraMatches) throws Exception { - TestCommon.checkExec(output, extraMatches); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsUtils.java 2019-07-24 08:28:08.301467641 -0400 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.Asserts; + +// A helper/utility class for testing shared strings +public class SharedStringsUtils { + public static final String TEST_JAR_NAME = "test"; + public static final String TEST_JAR_NAME_FULL = "test.jar"; + public static final String WHITEBOX_JAR_NAME = "whitebox"; + + public static interface Test { + public void dotest(String args[]) throws Exception ; + } + + private static String[][] vmOptionCombos = { + {}, + {"-XX:+UseStringDeduplication"}, + {"-XX:-CompactStrings"} + }; + + private static String childVMOptionsPrefix[] = {}; + + // SharedStringsUtils.run() is for running the main test body multiple times, each with a different + // set of extra VM options that are passed to the child processes. + // + // See ./ExerciseGC.java for an example. + public static void run(String args[], Test t) throws Exception { + int numSetOfChildVMOptions = vmOptionCombos.length; + for (int i=0; i< numSetOfChildVMOptions; i++) { + run(i, numSetOfChildVMOptions, args, t); + } + } + + public static void run(int i, int numSetOfChildVMOptions, String args[], Test t) throws Exception { + // When you add a new set of options to vmOptionCombos, we make sure all + // callers of this method (i.e., IncompatibleOptions.java) knows about it and will + // add new @test blocks accordingly. + Asserts.assertEQ(numSetOfChildVMOptions, vmOptionCombos.length); + String opts[] = vmOptionCombos[i]; + + System.out.print("Running with extra VM option prefix for child processes [" + opts.length + "] ="); + for (String o : opts) { + System.out.print(" " + o); + } + System.out.println(); + childVMOptionsPrefix = opts; + t.dotest(args); + } + + public static String[] getChildVMOptionsPrefix() { + return childVMOptionsPrefix; + } + + public static String getWbParam() { + return "-Xbootclasspath/a:" + TestCommon.getTestJar(WHITEBOX_JAR_NAME + ".jar"); + } + + // build the test jar + public static void buildJar(String... classes) throws Exception { + JarBuilder.build(TEST_JAR_NAME, classes); + } + + // build the test jar and a whitebox jar + public static void buildJarAndWhiteBox(String... classes) throws Exception { + JarBuilder.build(true, WHITEBOX_JAR_NAME, "sun/hotspot/WhiteBox"); + buildJar(classes); + } + + // execute the "dump" operation, but do not check the output + public static OutputAnalyzer dumpWithoutChecks(String appClasses[], + String sharedDataFile, String... extraOptions) throws Exception { + + String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); + String[] args = + TestCommon.concat(extraOptions, "-XX:+UseCompressedOops", "-XX:+UseG1GC", + "-XX:SharedArchiveConfigFile=" + + TestCommon.getSourceFile(sharedDataFile)); + args = TestCommon.concat(childVMOptionsPrefix, args); + + return TestCommon.dump(appJar, appClasses, args); + } + + // execute the dump operation and check the output + public static OutputAnalyzer dump(String appClasses[], + String sharedDataFile, String... extraOptions) throws Exception { + OutputAnalyzer output = dumpWithoutChecks(appClasses, sharedDataFile, extraOptions); + checkDump(output); + return output; + } + + public static OutputAnalyzer dumpWithWhiteBox(String appClasses[], + String sharedDataFile, String... extraOptions) throws Exception { + return dump(appClasses, sharedDataFile, + TestCommon.concat(extraOptions, getWbParam()) ); + } + + // execute/run test with shared archive + public static OutputAnalyzer runWithArchiveAuto(String className, + String... extraOptions) throws Exception { + + String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); + String[] args = TestCommon.concat(extraOptions, + "-cp", appJar, "-XX:+UseCompressedOops", "-XX:+UseG1GC", className); + args = TestCommon.concat(childVMOptionsPrefix, args); + + OutputAnalyzer output = TestCommon.execAuto(args); + checkExecAuto(output); + return output; + } + + public static OutputAnalyzer runWithArchive(String className, + String... extraOptions) throws Exception { + + return runWithArchive(new String[0], className, extraOptions); + } + + public static OutputAnalyzer runWithArchive(String[] extraMatches, + String className, String... extraOptions) throws Exception { + + String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); + String[] args = TestCommon.concat(extraOptions, + "-XX:+UseCompressedOops", "-XX:+UseG1GC", className); + args = TestCommon.concat(childVMOptionsPrefix, args); + + OutputAnalyzer output = TestCommon.exec(appJar, args); + checkExec(output, extraMatches); + return output; + } + + + // execute/run test with shared archive and white box + public static OutputAnalyzer runWithArchiveAndWhiteBox(String className, + String... extraOptions) throws Exception { + + return runWithArchive(className, + TestCommon.concat(extraOptions, getWbParam(), + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI") ); + } + + public static OutputAnalyzer runWithArchiveAndWhiteBox(String[] extraMatches, + String className, String... extraOptions) throws Exception { + + return runWithArchive(extraMatches, className, + TestCommon.concat(extraOptions, getWbParam(), + "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI") ); + } + + + public static void checkDump(OutputAnalyzer output) throws Exception { + output.shouldContain("Shared string table stats"); + TestCommon.checkDump(output); + } + + public static void checkExec(OutputAnalyzer output) throws Exception { + TestCommon.checkExec(output, new String[0]); + } + + public static void checkExecAuto(OutputAnalyzer output) throws Exception { + CDSOptions opts = (new CDSOptions()).setXShareMode("auto"); + TestCommon.checkExec(output, opts); + } + + public static void checkExec(OutputAnalyzer output, String[] extraMatches) throws Exception { + TestCommon.checkExec(output, extraMatches); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWb.java 2019-07-24 08:28:08.905467620 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class SharedStringsWb { - public static void main(String[] args) throws Exception { - WhiteBox wb = WhiteBox.getWhiteBox(); - String s = "shared_test_string_unique_14325"; - s = s.intern(); - if (wb.areSharedStringsIgnored() || wb.isShared(s)) { - System.out.println("Found shared string."); - } else { - throw new RuntimeException("String is not shared."); - } - } -} - - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsWb.java 2019-07-24 08:28:08.661467629 -0400 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class SharedStringsWb { + public static void main(String[] args) throws Exception { + WhiteBox wb = WhiteBox.getWhiteBox(); + String s = "shared_test_string_unique_14325"; + s = s.intern(); + if (wb.areSharedStringsIgnored() || wb.isShared(s)) { + System.out.println("Found shared string."); + } else { + throw new RuntimeException("String is not shared."); + } + } +} + + --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWbTest.java 2019-07-24 08:28:09.221467609 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary White box test for shared strings - * @requires vm.cds.archived.java.heap - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @modules jdk.jartool/sun.tools.jar - * @build sun.hotspot.WhiteBox SharedStringsWb - * @run driver ClassFileInstaller sun.hotspot.WhiteBox - * @run driver SharedStringsWbTest - */ - -import java.io.*; -import sun.hotspot.WhiteBox; - -public class SharedStringsWbTest { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, SharedStringsWbTest::test); - } - - public static void test(String[] args) throws Exception { - SharedStringsUtils.buildJarAndWhiteBox("SharedStringsWb"); - - SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("SharedStringsWb"), - "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); - - SharedStringsUtils.runWithArchiveAndWhiteBox("SharedStringsWb"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SharedStringsWbTest.java 2019-07-24 08:28:08.953467619 -0400 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary White box test for shared strings + * @requires vm.cds.archived.java.heap + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @modules jdk.jartool/sun.tools.jar + * @build sun.hotspot.WhiteBox SharedStringsWb + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * @run driver SharedStringsWbTest + */ + +import java.io.*; +import sun.hotspot.WhiteBox; + +public class SharedStringsWbTest { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, SharedStringsWbTest::test); + } + + public static void test(String[] args) throws Exception { + SharedStringsUtils.buildJarAndWhiteBox("SharedStringsWb"); + + SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("SharedStringsWb"), + "SharedStringsBasic.txt", "-Xlog:cds,cds+hashtables"); + + SharedStringsUtils.runWithArchiveAndWhiteBox("SharedStringsWb"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/SysDictCrash.java 2019-07-24 08:28:09.621467595 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* - * @test - * @summary Regression test for JDK-8098821 - * @bug 8098821 - * @requires vm.cds.archived.java.heap - * @modules jdk.jartool/sun.tools.jar - * @library /test/lib /test/hotspot/jtreg/runtime/appcds - * @run driver SysDictCrash - */ - -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.process.ProcessTools; - -public class SysDictCrash { - public static void main(String[] args) throws Exception { - SharedStringsUtils.run(args, SysDictCrash::test); - } - - public static void test(String[] args) throws Exception { - String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); - - // SharedBaseAddress=0 puts the archive at a very high address on solaris, - // which provokes the crash. - ProcessBuilder dumpPb = ProcessTools.createJavaProcessBuilder(true, - TestCommon.concat(vmOptionsPrefix, - "-XX:+UseG1GC", "-XX:MaxRAMPercentage=12.5", - "-cp", ".", - "-XX:SharedBaseAddress=0", "-XX:SharedArchiveFile=./SysDictCrash.jsa", - "-Xshare:dump", - "-showversion", "-Xlog:cds,cds+hashtables")); - - boolean continueTest = true; - OutputAnalyzer output = TestCommon.executeAndLog(dumpPb, "dump"); - try { - TestCommon.checkDump(output); - } catch (java.lang.RuntimeException re) { - if (!output.getStdout().contains("UseCompressedOops and UseCompressedClassPointers have been disabled due to")) { - throw re; - } else { - System.out.println("Shared archive was not created due to UseCompressedOops and UseCompressedClassPointers have been disabled."); - continueTest = false; - } - } - - if (!continueTest) { - return; - } - - ProcessBuilder runPb = ProcessTools.createJavaProcessBuilder(true, - TestCommon.concat(vmOptionsPrefix, - "-XX:+UseG1GC", "-XX:MaxRAMPercentage=12.5", - "-XX:SharedArchiveFile=./SysDictCrash.jsa", - "-Xshare:on", - "-version")); - - TestCommon.checkExec(TestCommon.executeAndLog(runPb, "exec")); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/SysDictCrash.java 2019-07-24 08:28:09.305467606 -0400 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * @test + * @summary Regression test for JDK-8098821 + * @bug 8098821 + * @requires vm.cds.archived.java.heap + * @modules jdk.jartool/sun.tools.jar + * @library /test/lib /test/hotspot/jtreg/runtime/cds + * @run driver SysDictCrash + */ + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class SysDictCrash { + public static void main(String[] args) throws Exception { + SharedStringsUtils.run(args, SysDictCrash::test); + } + + public static void test(String[] args) throws Exception { + String vmOptionsPrefix[] = SharedStringsUtils.getChildVMOptionsPrefix(); + + // SharedBaseAddress=0 puts the archive at a very high address on solaris, + // which provokes the crash. + ProcessBuilder dumpPb = ProcessTools.createJavaProcessBuilder(true, + TestCommon.concat(vmOptionsPrefix, + "-XX:+UseG1GC", "-XX:MaxRAMPercentage=12.5", + "-cp", ".", + "-XX:SharedBaseAddress=0", "-XX:SharedArchiveFile=./SysDictCrash.jsa", + "-Xshare:dump", + "-showversion", "-Xlog:cds,cds+hashtables")); + + boolean continueTest = true; + OutputAnalyzer output = TestCommon.executeAndLog(dumpPb, "dump"); + try { + TestCommon.checkDump(output); + } catch (java.lang.RuntimeException re) { + if (!output.getStdout().contains("UseCompressedOops and UseCompressedClassPointers have been disabled due to")) { + throw re; + } else { + System.out.println("Shared archive was not created due to UseCompressedOops and UseCompressedClassPointers have been disabled."); + continueTest = false; + } + } + + if (!continueTest) { + return; + } + + ProcessBuilder runPb = ProcessTools.createJavaProcessBuilder(true, + TestCommon.concat(vmOptionsPrefix, + "-XX:+UseG1GC", "-XX:MaxRAMPercentage=12.5", + "-XX:SharedArchiveFile=./SysDictCrash.jsa", + "-Xshare:on", + "-version")); + + TestCommon.checkExec(TestCommon.executeAndLog(runPb, "exec")); + } +} --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/CorruptDataLine.txt 2019-07-24 08:28:10.021467581 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -VERSION: 1.0 -SECTION: String -0: -5: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -1: * -1: - -1: . -1: / -1: : -1: C -1: I -1: J -1: U -1: Z -1: _ -8: segments -1: | -5: cp850 -5: cp852 -5: cp855 -5: cp857 -5: cp858 -5: cp862 -5: cp866 -11: ISO_8859_13 -11: ISO_8859_15 -5: cp874 -47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER -7: CHECKED -3: zip -10: waitStatus -33: java.lang.invoke.MethodHandleImpl -7: .jimage -5: cp912 -5: cp914 -5: cp915 -5: cp920 -5: cp923 -5: cp936 -5: euccn -5: eucjp -11: permissions -5: euckr -6: SIGNAL -5: cp737 -17: java.library.path -5: cp775 -13: classValueMap -4: utf8 -9: PROPAGATE -9: baseCount -7: cskoi8r -8: cyrillic -#DATATYPE: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/CorruptDataLine.txt 2019-07-24 08:28:09.709467592 -0400 @@ -0,0 +1,60 @@ +VERSION: 1.0 +SECTION: String +0: +5: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +1: * +1: - +1: . +1: / +1: : +1: C +1: I +1: J +1: U +1: Z +1: _ +8: segments +1: | +5: cp850 +5: cp852 +5: cp855 +5: cp857 +5: cp858 +5: cp862 +5: cp866 +11: ISO_8859_13 +11: ISO_8859_15 +5: cp874 +47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER +7: CHECKED +3: zip +10: waitStatus +33: java.lang.invoke.MethodHandleImpl +7: .jimage +5: cp912 +5: cp914 +5: cp915 +5: cp920 +5: cp923 +5: cp936 +5: euccn +5: eucjp +11: permissions +5: euckr +6: SIGNAL +5: cp737 +17: java.library.path +5: cp775 +13: classValueMap +4: utf8 +9: PROPAGATE +9: baseCount +7: cskoi8r +8: cyrillic +#DATATYPE: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidDataType.txt 2019-07-24 08:28:10.337467570 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -VERSION: 1.0 -@SECTION: String -0: -5: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -1: * -1: - -1: . -1: / -1: : -1: C -1: I -1: J -1: U -1: Z -1: _ -8: segments -1: | -5: cp850 -5: cp852 -5: cp855 -5: cp857 -5: cp858 -5: cp862 -5: cp866 -11: ISO_8859_13 -11: ISO_8859_15 -5: cp874 -47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER -7: CHECKED -3: zip -10: waitStatus -33: java.lang.invoke.MethodHandleImpl -7: .jimage -5: cp912 -5: cp914 -5: cp915 -5: cp920 -5: cp923 -5: cp936 -5: euccn -5: eucjp -11: permissions -5: euckr -6: SIGNAL -5: cp737 -17: java.library.path -5: cp775 -13: classValueMap -4: utf8 -9: PROPAGATE -9: baseCount -7: cskoi8r -8: cyrillic -#DATATYPE: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/InvalidDataType.txt 2019-07-24 08:28:10.069467580 -0400 @@ -0,0 +1,60 @@ +VERSION: 1.0 +@SECTION: String +0: +5: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +1: * +1: - +1: . +1: / +1: : +1: C +1: I +1: J +1: U +1: Z +1: _ +8: segments +1: | +5: cp850 +5: cp852 +5: cp855 +5: cp857 +5: cp858 +5: cp862 +5: cp866 +11: ISO_8859_13 +11: ISO_8859_15 +5: cp874 +47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER +7: CHECKED +3: zip +10: waitStatus +33: java.lang.invoke.MethodHandleImpl +7: .jimage +5: cp912 +5: cp914 +5: cp915 +5: cp920 +5: cp923 +5: cp936 +5: euccn +5: eucjp +11: permissions +5: euckr +6: SIGNAL +5: cp737 +17: java.library.path +5: cp775 +13: classValueMap +4: utf8 +9: PROPAGATE +9: baseCount +7: cskoi8r +8: cyrillic +#DATATYPE: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidHeader.txt 2019-07-24 08:28:10.713467557 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -Garbage Header x0935#%0sl -@SECTION: String -0: -5: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -1: * -1: - -1: . -1: / -1: : -1: C -1: I -1: J -1: U -1: Z -1: _ -8: segments -1: | -5: cp850 -5: cp852 -5: cp855 -5: cp857 -5: cp858 -5: cp862 -5: cp866 -11: ISO_8859_13 -11: ISO_8859_15 -5: cp874 -47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER -7: CHECKED -3: zip -10: waitStatus -33: java.lang.invoke.MethodHandleImpl -7: .jimage -5: cp912 -5: cp914 -5: cp915 -5: cp920 -5: cp923 -5: cp936 -5: euccn -5: eucjp -11: permissions -5: euckr -6: SIGNAL -5: cp737 -17: java.library.path -5: cp775 -13: classValueMap -4: utf8 -9: PROPAGATE -9: baseCount -7: cskoi8r -8: cyrillic -#DATATYPE: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/InvalidHeader.txt 2019-07-24 08:28:10.389467569 -0400 @@ -0,0 +1,60 @@ +Garbage Header x0935#%0sl +@SECTION: String +0: +5: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +1: * +1: - +1: . +1: / +1: : +1: C +1: I +1: J +1: U +1: Z +1: _ +8: segments +1: | +5: cp850 +5: cp852 +5: cp855 +5: cp857 +5: cp858 +5: cp862 +5: cp866 +11: ISO_8859_13 +11: ISO_8859_15 +5: cp874 +47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER +7: CHECKED +3: zip +10: waitStatus +33: java.lang.invoke.MethodHandleImpl +7: .jimage +5: cp912 +5: cp914 +5: cp915 +5: cp920 +5: cp923 +5: cp936 +5: euccn +5: eucjp +11: permissions +5: euckr +6: SIGNAL +5: cp737 +17: java.library.path +5: cp775 +13: classValueMap +4: utf8 +9: PROPAGATE +9: baseCount +7: cskoi8r +8: cyrillic +#DATATYPE: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidString.txt 2019-07-24 08:28:11.093467544 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,6 +0,0 @@ -VERSION: 1.0 -@SECTION: String -31: shred_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/InvalidString.txt 2019-07-24 08:28:10.757467556 -0400 @@ -0,0 +1,6 @@ +VERSION: 1.0 +@SECTION: String +31: shred_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 + --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidStringFormat.txt 2019-07-24 08:28:11.425467532 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -VERSION: 1.0 -@SECTION: String -0: -5:: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -1: * -1: - -1: . -1: / -1: : -1: C -1: I -1: J -1: U -1: Z -1: _ -8: segments -1: | -5: cp850 -5: cp852 -5: cp855 -5: cp857 -5: cp858 -5: cp862 -5: cp866 -11: ISO_8859_13 -11: ISO_8859_15 -5: cp874 -47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER -7: CHECKED -3: zip -10: waitStatus -33: java.lang.invoke.MethodHandleImpl -7: .jimage -5: cp912 -5: cp914 -5: cp915 -5: cp920 -5: cp923 -5: cp936 -5: euccn -5: eucjp -11: permissions -5: euckr -6: SIGNAL -5: cp737 -17: java.library.path -5: cp775 -13: classValueMap -4: utf8 -9: PROPAGATE -9: baseCount -7: cskoi8r -8: cyrillic -#DATATYPE: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/InvalidStringFormat.txt 2019-07-24 08:28:11.141467542 -0400 @@ -0,0 +1,60 @@ +VERSION: 1.0 +@SECTION: String +0: +5:: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +1: * +1: - +1: . +1: / +1: : +1: C +1: I +1: J +1: U +1: Z +1: _ +8: segments +1: | +5: cp850 +5: cp852 +5: cp855 +5: cp857 +5: cp858 +5: cp862 +5: cp866 +11: ISO_8859_13 +11: ISO_8859_15 +5: cp874 +47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER +7: CHECKED +3: zip +10: waitStatus +33: java.lang.invoke.MethodHandleImpl +7: .jimage +5: cp912 +5: cp914 +5: cp915 +5: cp920 +5: cp923 +5: cp936 +5: euccn +5: eucjp +11: permissions +5: euckr +6: SIGNAL +5: cp737 +17: java.library.path +5: cp775 +13: classValueMap +4: utf8 +9: PROPAGATE +9: baseCount +7: cskoi8r +8: cyrillic +#DATATYPE: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidSymbol.txt 2019-07-24 08:28:11.781467520 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,12 +0,0 @@ -VERSION: 1.0 -@SECTION: String -0: -5: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -8: cyrillic -@SECTION: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMet%%%hod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/InvalidSymbol.txt 2019-07-24 08:28:11.477467531 -0400 @@ -0,0 +1,12 @@ +VERSION: 1.0 +@SECTION: String +0: +5: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +8: cyrillic +@SECTION: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMet%%%hod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidSymbolFormat.txt 2019-07-24 08:28:12.141467508 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,11 +0,0 @@ -VERSION: 1.0 -@SECTION: String -0: -5: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -@SECTION: Symbol -41: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/InvalidSymbolFormat.txt 2019-07-24 08:28:11.829467518 -0400 @@ -0,0 +1,11 @@ +VERSION: 1.0 +@SECTION: String +0: +5: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +@SECTION: Symbol +41: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidVersion.txt 2019-07-24 08:28:12.525467494 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -VERSION: 0.0 -@SECTION: String -0: -5: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -1: * -1: - -1: . -1: / -1: : -1: C -1: I -1: J -1: U -1: Z -1: _ -8: segments -1: | -5: cp850 -5: cp852 -5: cp855 -5: cp857 -5: cp858 -5: cp862 -5: cp866 -11: ISO_8859_13 -11: ISO_8859_15 -5: cp874 -47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER -7: CHECKED -3: zip -10: waitStatus -33: java.lang.invoke.MethodHandleImpl -7: .jimage -5: cp912 -5: cp914 -5: cp915 -5: cp920 -5: cp923 -5: cp936 -5: euccn -5: eucjp -11: permissions -5: euckr -6: SIGNAL -5: cp737 -17: java.library.path -5: cp775 -13: classValueMap -4: utf8 -9: PROPAGATE -9: baseCount -7: cskoi8r -8: cyrillic -#DATATYPE: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/InvalidVersion.txt 2019-07-24 08:28:12.193467506 -0400 @@ -0,0 +1,60 @@ +VERSION: 0.0 +@SECTION: String +0: +5: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +1: * +1: - +1: . +1: / +1: : +1: C +1: I +1: J +1: U +1: Z +1: _ +8: segments +1: | +5: cp850 +5: cp852 +5: cp855 +5: cp857 +5: cp858 +5: cp862 +5: cp866 +11: ISO_8859_13 +11: ISO_8859_15 +5: cp874 +47: java.lang.invoke.MethodHandle.TRACE_INTERPRETER +7: CHECKED +3: zip +10: waitStatus +33: java.lang.invoke.MethodHandleImpl +7: .jimage +5: cp912 +5: cp914 +5: cp915 +5: cp920 +5: cp923 +5: cp936 +5: euccn +5: eucjp +11: permissions +5: euckr +6: SIGNAL +5: cp737 +17: java.library.path +5: cp775 +13: classValueMap +4: utf8 +9: PROPAGATE +9: baseCount +7: cskoi8r +8: cyrillic +#DATATYPE: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/LengthOverflow.txt 2019-07-24 08:28:12.905467481 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,10 +0,0 @@ -VERSION: 1.0 -@SECTION: String -2147483647: s -5: cp819 -31: shared_test_string_intern_12345 -7: test123 -@SECTION: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/LengthOverflow.txt 2019-07-24 08:28:12.577467492 -0400 @@ -0,0 +1,10 @@ +VERSION: 1.0 +@SECTION: String +2147483647: s +5: cp819 +31: shared_test_string_intern_12345 +7: test123 +@SECTION: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/OverflowPrefix.txt 2019-07-24 08:28:13.289467468 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,11 +0,0 @@ -VERSION: 1.0 -@SECTION: String -0: -2147483648: cp819 -31: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -@SECTION: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/OverflowPrefix.txt 2019-07-24 08:28:12.953467479 -0400 @@ -0,0 +1,11 @@ +VERSION: 1.0 +@SECTION: String +0: +2147483648: cp819 +31: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +@SECTION: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/TruncatedString.txt 2019-07-24 08:28:13.669467454 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,10 +0,0 @@ -VERSION: 1.0 -@SECTION: String -40000: s -5: cp819 -31: shared_test_string_intern_12345 -7: test123 -@SECTION: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/TruncatedString.txt 2019-07-24 08:28:13.341467466 -0400 @@ -0,0 +1,10 @@ +VERSION: 1.0 +@SECTION: String +40000: s +5: cp819 +31: shared_test_string_intern_12345 +7: test123 +@SECTION: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/UnrecognizedPrefix.txt 2019-07-24 08:28:14.029467442 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,11 +0,0 @@ -VERSION: 1.0 -@SECTION: String -0: -5: cp819 -3E: shared_test_string_unique_14325 -31: shared_test_string_intern_12345 -7: test123 -@SECTION: Symbol -41 -1: (Ljava/util/Set;Ljava/lang/Object;)V -10 -1: linkMethod -20 -1: isAlphaNumericString --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/sharedStrings/invalidFormat/UnrecognizedPrefix.txt 2019-07-24 08:28:13.717467453 -0400 @@ -0,0 +1,11 @@ +VERSION: 1.0 +@SECTION: String +0: +5: cp819 +3E: shared_test_string_unique_14325 +31: shared_test_string_intern_12345 +7: test123 +@SECTION: Symbol +41 -1: (Ljava/util/Set;Ljava/lang/Object;)V +10 -1: linkMethod +20 -1: isAlphaNumericString --- old/test/hotspot/jtreg/runtime/appcds/test-classes/ArrayListTest.java 2019-07-24 08:28:14.377467430 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.util.*; - -// This is a test case executed by DumpClassList.java to load classes -// from various places to ensure that they are not written to the class list. -public class ArrayListTest { - public static void main(String args[]) throws Exception { - // The following lambda usage should generate various classes like - // java.lang.invoke.LambdaForm$MH/1146743572. All of them should be excluded from - // the class list. - List a = new ArrayList<>(); - a.add("hello world."); - a.forEach(str -> System.out.println(str)); - - System.out.println(Class.forName("java.lang.NewClass")); // should be excluded from the class list. - System.out.println(Class.forName("boot.append.Foo")); // should be excluded from the class list. - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/ArrayListTest.java 2019-07-24 08:28:14.081467440 -0400 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.util.*; + +// This is a test case executed by DumpClassList.java to load classes +// from various places to ensure that they are not written to the class list. +public class ArrayListTest { + public static void main(String args[]) throws Exception { + // The following lambda usage should generate various classes like + // java.lang.invoke.LambdaForm$MH/1146743572. All of them should be excluded from + // the class list. + List a = new ArrayList<>(); + a.add("hello world."); + a.forEach(str -> System.out.println(str)); + + System.out.println(Class.forName("java.lang.NewClass")); // should be excluded from the class list. + System.out.println(Class.forName("boot.append.Foo")); // should be excluded from the class list. + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/BootClassPathAppendHelper.java 2019-07-24 08:28:14.717467418 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class BootClassPathAppendHelper { - public static void main(String[] args) throws ClassNotFoundException { - Class cls = Class.forName("Hello"); - - if (cls == null) { - throw new java.lang.RuntimeException("Cannot find Hello.class"); - } - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (!wb.isSharedClass(cls)) { - System.out.println("Hello.class is not in shared space as expected."); - } else { - throw new java.lang.RuntimeException("Hello.class shouldn't be in shared space."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/BootClassPathAppendHelper.java 2019-07-24 08:28:14.429467428 -0400 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class BootClassPathAppendHelper { + public static void main(String[] args) throws ClassNotFoundException { + Class cls = Class.forName("Hello"); + + if (cls == null) { + throw new java.lang.RuntimeException("Cannot find Hello.class"); + } + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (!wb.isSharedClass(cls)) { + System.out.println("Hello.class is not in shared space as expected."); + } else { + throw new java.lang.RuntimeException("Hello.class shouldn't be in shared space."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/C1.java 2019-07-24 08:28:15.049467406 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sealed.pkg; - -public class C1 { -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/C1.java 2019-07-24 08:28:14.765467416 -0400 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sealed.pkg; + +public class C1 { +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/C2.java 2019-07-24 08:28:15.417467393 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package pkg; - -public class C2 { -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/C2.java 2019-07-24 08:28:15.089467405 -0400 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package pkg; + +public class C2 { +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/Child.java 2019-07-24 08:28:15.797467380 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class Child extends Super {} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/Child.java 2019-07-24 08:28:15.469467392 -0400 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class Child extends Super {} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr1.java 2019-07-24 08:28:16.133467368 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class CpAttr1 { - public static void main(String args[]) { - System.out.println("2"); CpAttr2.doit(); // Only the version of this class defined in CpAttr2.java will not throw exception. - System.out.println("3"); CpAttr3.doit(); // Only the version of this class defined in CpAttr3.java will not throw exception. - System.out.println("4"); CpAttr4.doit(); // Only the version of this class defined in CpAttr4.java will not throw exception. - System.out.println("5"); CpAttr5.doit(); // Only the version of this class defined in CpAttr5.java will not throw exception. - System.out.println("Test passed"); - } -} - -class CpAttr2 { static void doit() {throw new RuntimeException("");} } -class CpAttr3 { static void doit() {throw new RuntimeException("");} } -class CpAttr4 { static void doit() {throw new RuntimeException("");} } -class CpAttr5 { static void doit() {throw new RuntimeException("");} } --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/CpAttr1.java 2019-07-24 08:28:15.845467378 -0400 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class CpAttr1 { + public static void main(String args[]) { + System.out.println("2"); CpAttr2.doit(); // Only the version of this class defined in CpAttr2.java will not throw exception. + System.out.println("3"); CpAttr3.doit(); // Only the version of this class defined in CpAttr3.java will not throw exception. + System.out.println("4"); CpAttr4.doit(); // Only the version of this class defined in CpAttr4.java will not throw exception. + System.out.println("5"); CpAttr5.doit(); // Only the version of this class defined in CpAttr5.java will not throw exception. + System.out.println("Test passed"); + } +} + +class CpAttr2 { static void doit() {throw new RuntimeException("");} } +class CpAttr3 { static void doit() {throw new RuntimeException("");} } +class CpAttr4 { static void doit() {throw new RuntimeException("");} } +class CpAttr5 { static void doit() {throw new RuntimeException("");} } --- old/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr2.java 2019-07-24 08:28:16.465467357 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -class CpAttr2 { static void doit() {} } --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/CpAttr2.java 2019-07-24 08:28:16.185467367 -0400 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +class CpAttr2 { static void doit() {} } --- old/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr3.java 2019-07-24 08:28:16.789467346 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -class CpAttr2 { static void doit() {throw new RuntimeException("");} } -class CpAttr3 { static void doit() {} } --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/CpAttr3.java 2019-07-24 08:28:16.513467355 -0400 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +class CpAttr2 { static void doit() {throw new RuntimeException("");} } +class CpAttr3 { static void doit() {} } --- old/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr4.java 2019-07-24 08:28:17.157467333 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -class CpAttr2 { static void doit() {throw new RuntimeException("");} } -class CpAttr3 { static void doit() {throw new RuntimeException("");} } -class CpAttr4 { static void doit() {} } -class CpAttr5 { static void doit() {throw new RuntimeException("");} } --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/CpAttr4.java 2019-07-24 08:28:16.837467344 -0400 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +class CpAttr2 { static void doit() {throw new RuntimeException("");} } +class CpAttr3 { static void doit() {throw new RuntimeException("");} } +class CpAttr4 { static void doit() {} } +class CpAttr5 { static void doit() {throw new RuntimeException("");} } --- old/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr5.java 2019-07-24 08:28:17.521467320 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -class CpAttr5 { static void doit() {} } --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/CpAttr5.java 2019-07-24 08:28:17.205467331 -0400 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +class CpAttr5 { static void doit() {} } --- old/test/hotspot/jtreg/runtime/appcds/test-classes/DummyClassHelper.java 2019-07-24 08:28:17.857467308 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.*; -import java.lang.reflect.*; -import jdk.test.lib.cds.CDSTestUtils; -import sun.hotspot.WhiteBox; - -public class DummyClassHelper { - static void checkDummyMethod(Class cls, String className) { - Method m = null; - try { - m = cls.getMethod("thisClassIsDummy"); - throw new java.lang.RuntimeException(className + - " should be loaded from the jimage and should not have the thisClassIsDummy() method."); - } catch(NoSuchMethodException ex) { - System.out.println(ex.toString()); - } - } - - public static void main(String[] args) throws Exception { - String[] classNames = {args[0], args[1]}; - Class cls = null; - boolean doWBCheck = (args.length == 3); - WhiteBox wb = null; - if (doWBCheck) { - wb = WhiteBox.getWhiteBox(); - } - for (int i = 0; i < classNames.length; i++) { - cls = Class.forName(classNames[i]); - checkDummyMethod(cls, classNames[i]); - if (doWBCheck) { - // FIXME: for dynamic archive, the class loaded from the - // bootclasspath jar during dump time is not loaded from the - // archive during run time. - if (!CDSTestUtils.isDynamicArchive()) { - if (!wb.isSharedClass(cls)) { - throw new java.lang.RuntimeException(classNames[i] + - ".class should be in shared space."); - } - } - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/DummyClassHelper.java 2019-07-24 08:28:17.573467318 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.*; +import java.lang.reflect.*; +import jdk.test.lib.cds.CDSTestUtils; +import sun.hotspot.WhiteBox; + +public class DummyClassHelper { + static void checkDummyMethod(Class cls, String className) { + Method m = null; + try { + m = cls.getMethod("thisClassIsDummy"); + throw new java.lang.RuntimeException(className + + " should be loaded from the jimage and should not have the thisClassIsDummy() method."); + } catch(NoSuchMethodException ex) { + System.out.println(ex.toString()); + } + } + + public static void main(String[] args) throws Exception { + String[] classNames = {args[0], args[1]}; + Class cls = null; + boolean doWBCheck = (args.length == 3); + WhiteBox wb = null; + if (doWBCheck) { + wb = WhiteBox.getWhiteBox(); + } + for (int i = 0; i < classNames.length; i++) { + cls = Class.forName(classNames[i]); + checkDummyMethod(cls, classNames[i]); + if (doWBCheck) { + // FIXME: for dynamic archive, the class loaded from the + // bootclasspath jar during dump time is not loaded from the + // archive during run time. + if (!CDSTestUtils.isDynamicArchive()) { + if (!wb.isSharedClass(cls)) { + throw new java.lang.RuntimeException(classNames[i] + + ".class should be in shared space."); + } + } + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/EmptyClassHelper.java 2019-07-24 08:28:18.181467297 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.*; - -import java.lang.reflect.Method; -import jdk.internal.access.JavaLangAccess; -import jdk.internal.access.SharedSecrets; - -class EmptyClassHelper { - static final JavaLangAccess jla = SharedSecrets.getJavaLangAccess(); - static final String USE_APP = "useAppLoader"; - public static void main(String[] args) throws Exception { - Class cls = null; - Method m = null; - ClassLoader appLoader = ClassLoader.getSystemClassLoader(); - String className = "com.sun.tools.javac.Main"; - if (args[0].equals(USE_APP)) { - cls = appLoader.loadClass(className); - System.out.println("appLoader loaded class"); - try { - m = cls.getMethod("main", String[].class); - System.out.println("appLoader found method main"); - } catch(NoSuchMethodException ex) { - System.out.println(ex.toString()); - } - } else { - cls = jla.findBootstrapClassOrNull(appLoader, className); - System.out.println("bootLoader loaded class"); - System.out.println("cls = " + cls); - try { - m = cls.getMethod("main", String[].class); - System.out.println("bootLoader found method main"); - } catch(NoSuchMethodException ex) { - System.out.println(ex.toString()); - } - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/EmptyClassHelper.java 2019-07-24 08:28:17.901467307 -0400 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.*; + +import java.lang.reflect.Method; +import jdk.internal.access.JavaLangAccess; +import jdk.internal.access.SharedSecrets; + +class EmptyClassHelper { + static final JavaLangAccess jla = SharedSecrets.getJavaLangAccess(); + static final String USE_APP = "useAppLoader"; + public static void main(String[] args) throws Exception { + Class cls = null; + Method m = null; + ClassLoader appLoader = ClassLoader.getSystemClassLoader(); + String className = "com.sun.tools.javac.Main"; + if (args[0].equals(USE_APP)) { + cls = appLoader.loadClass(className); + System.out.println("appLoader loaded class"); + try { + m = cls.getMethod("main", String[].class); + System.out.println("appLoader found method main"); + } catch(NoSuchMethodException ex) { + System.out.println(ex.toString()); + } + } else { + cls = jla.findBootstrapClassOrNull(appLoader, className); + System.out.println("bootLoader loaded class"); + System.out.println("cls = " + cls); + try { + m = cls.getMethod("main", String[].class); + System.out.println("bootLoader found method main"); + } catch(NoSuchMethodException ex) { + System.out.println(ex.toString()); + } + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/FieldAnnotationsApp.java 2019-07-24 08:28:18.497467286 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; - -public class FieldAnnotationsApp { - @MyAnnotation(name="myField1", value="myValue1") - public String myField1 = null; - - @MyAnnotation(name="myField2", value="myValue2") - public String myField2 = null; - - public static void main(String args[]) throws Exception { - for (int i=1; i<=2; i++) { - Field field = FieldAnnotationsApp.class.getField("myField" + i); - Annotation[] annotations = field.getDeclaredAnnotations(); - - for (Annotation anno : annotations){ - if (anno instanceof MyAnnotation){ - MyAnnotation myAnno = (MyAnnotation) anno; - String name = myAnno.name(); - String value = myAnno.value(); - - System.out.println("Field : " + field.getName()); - System.out.println(" myAnno.name : " + name); - System.out.println(" myAnno.value: " + value); - - if (!(name.equals("myField" + i) && value.equals("myValue" + i))) { - throw new Exception("Unexpected annotation values: " + i + " = " + value); - } - } - } - } - System.out.println("Field annotations are OK."); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/FieldAnnotationsApp.java 2019-07-24 08:28:18.229467295 -0400 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +public class FieldAnnotationsApp { + @MyAnnotation(name="myField1", value="myValue1") + public String myField1 = null; + + @MyAnnotation(name="myField2", value="myValue2") + public String myField2 = null; + + public static void main(String args[]) throws Exception { + for (int i=1; i<=2; i++) { + Field field = FieldAnnotationsApp.class.getField("myField" + i); + Annotation[] annotations = field.getDeclaredAnnotations(); + + for (Annotation anno : annotations){ + if (anno instanceof MyAnnotation){ + MyAnnotation myAnno = (MyAnnotation) anno; + String name = myAnno.name(); + String value = myAnno.value(); + + System.out.println("Field : " + field.getName()); + System.out.println(" myAnno.name : " + name); + System.out.println(" myAnno.value: " + value); + + if (!(name.equals("myField" + i) && value.equals("myValue" + i))) { + throw new Exception("Unexpected annotation values: " + i + " = " + value); + } + } + } + } + System.out.println("Field annotations are OK."); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/ForNameTest.java 2019-07-24 08:28:18.893467272 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class ForNameTest { - public static void main(String[] args) throws Throwable { - // Hello is on the bootclasspath. The defining classloader is - // the NULL classloader. See ../ClassLoaderTest.java - Class c = Class.forName("Hello"); - ClassLoader cl = c.getClassLoader(); - if (cl != null) { - throw new RuntimeException( - "Test Failed. Wrong classloader is used. Expect the NULL classloader."); - } - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (wb.isSharedClass(c)) { - System.out.println("As expected, Hello.class is in shared space."); - } else { - throw new java.lang.RuntimeException("Hello.class must be in shared space."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/ForNameTest.java 2019-07-24 08:28:18.553467284 -0400 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class ForNameTest { + public static void main(String[] args) throws Throwable { + // Hello is on the bootclasspath. The defining classloader is + // the NULL classloader. See ../ClassLoaderTest.java + Class c = Class.forName("Hello"); + ClassLoader cl = c.getClassLoader(); + if (cl != null) { + throw new RuntimeException( + "Test Failed. Wrong classloader is used. Expect the NULL classloader."); + } + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (wb.isSharedClass(c)) { + System.out.println("As expected, Hello.class is in shared space."); + } else { + throw new java.lang.RuntimeException("Hello.class must be in shared space."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/GenericTestApp.java 2019-07-24 08:28:19.241467260 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import sun.hotspot.WhiteBox; - -/** - * This is a generic test app for testing if classes are loaded from the CDS archive - * or not (without having to parse -Xlog:class+load, or writing your own WhiteBox apps). - * Usage: - * [1] Create an archive with WhiteBox enabled. - * [2] Run this app with arguments such as - * "assertShared:java.lang.Object" - * "assertNotShared:NotSharedClassName" - * - * We can probably add other kinds of simple tests as well .... - * - * FIXME: enhance WB API to check if a particular archive has failed. So you can say - * assertShared:0,java.lang.Object - * to assert that java.lang.Object is shared from archive #0 (i.e., base archive). - */ -public class GenericTestApp { - private static final WhiteBox wb = WhiteBox.getWhiteBox(); - - public static void main(String args[]) throws Exception { - System.out.println("GenericTestApp started. WhiteBox = " + wb); - System.out.println("cdsMemoryMappingFailed() = " + cdsMemoryMappingFailed()); - - for (String s : args) { - Class c; - if ((c = getClass(s, "assertShared:")) != null) { - assertShared(c); - } - else if ((c = getClass(s, "assertNotShared:")) != null) { - assertNotShared(c); - } - else { - throw new RuntimeException("Unknown option: " + s); - } - System.out.println("passed: " + s); - } - } - - private static Class getClass(String s, String prefix) throws Exception { - if (s.startsWith(prefix)) { - return Class.forName(s.substring(prefix.length())); - } else { - return null; - } - } - - private static boolean cdsMemoryMappingFailed() { - return wb.cdsMemoryMappingFailed(); - } - - private static void assertShared(Class klass) { - if (!cdsMemoryMappingFailed()) { - if (!wb.isSharedClass(klass)) { - throw new RuntimeException("Class should be shared but is not: " + klass); - } - } else { - // FIXME -- need to throw jtreg.SkippedException - System.out.println("Cannot test for wb.isSharedClass(" + klass + ") because CDS mapping has failed"); - } - } - - private static void assertNotShared(Class klass) { - if (wb.isSharedClass(klass)) { - throw new RuntimeException("Class should be shared but is not: " + klass); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/GenericTestApp.java 2019-07-24 08:28:18.937467271 -0400 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.hotspot.WhiteBox; + +/** + * This is a generic test app for testing if classes are loaded from the CDS archive + * or not (without having to parse -Xlog:class+load, or writing your own WhiteBox apps). + * Usage: + * [1] Create an archive with WhiteBox enabled. + * [2] Run this app with arguments such as + * "assertShared:java.lang.Object" + * "assertNotShared:NotSharedClassName" + * + * We can probably add other kinds of simple tests as well .... + * + * FIXME: enhance WB API to check if a particular archive has failed. So you can say + * assertShared:0,java.lang.Object + * to assert that java.lang.Object is shared from archive #0 (i.e., base archive). + */ +public class GenericTestApp { + private static final WhiteBox wb = WhiteBox.getWhiteBox(); + + public static void main(String args[]) throws Exception { + System.out.println("GenericTestApp started. WhiteBox = " + wb); + System.out.println("cdsMemoryMappingFailed() = " + cdsMemoryMappingFailed()); + + for (String s : args) { + Class c; + if ((c = getClass(s, "assertShared:")) != null) { + assertShared(c); + } + else if ((c = getClass(s, "assertNotShared:")) != null) { + assertNotShared(c); + } + else { + throw new RuntimeException("Unknown option: " + s); + } + System.out.println("passed: " + s); + } + } + + private static Class getClass(String s, String prefix) throws Exception { + if (s.startsWith(prefix)) { + return Class.forName(s.substring(prefix.length())); + } else { + return null; + } + } + + private static boolean cdsMemoryMappingFailed() { + return wb.cdsMemoryMappingFailed(); + } + + private static void assertShared(Class klass) { + if (!cdsMemoryMappingFailed()) { + if (!wb.isSharedClass(klass)) { + throw new RuntimeException("Class should be shared but is not: " + klass); + } + } else { + // FIXME -- need to throw jtreg.SkippedException + System.out.println("Cannot test for wb.isSharedClass(" + klass + ") because CDS mapping has failed"); + } + } + + private static void assertNotShared(Class klass) { + if (wb.isSharedClass(klass)) { + throw new RuntimeException("Class should be shared but is not: " + klass); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/GetFlightRecorder.java 2019-07-24 08:28:19.613467247 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; - -import jdk.jfr.Event; -import jdk.jfr.EventType; -import jdk.jfr.FlightRecorder; -import jdk.jfr.Recording; -import jdk.jfr.consumer.RecordingFile; -import jdk.jfr.consumer.RecordedEvent; - -public class GetFlightRecorder { - private static class TestEvent extends Event { - } - private static class SimpleEvent extends Event { - public int id; - } - public static void main(String args[]) throws Exception { - EventType type = EventType.getEventType(TestEvent.class); // This class is loaded before recording has started. - if (type.isEnabled()) { - throw new RuntimeException("Expected event to be disabled before recording start"); - } - - // (1) make sure you can obtain the flight recorder without error. - System.out.println("jdk.jfr.FlightRecorder.getFlightRecorder() = " + FlightRecorder.getFlightRecorder()); - - // (2) test that the event class loaded before recording can still work. - Recording r = new Recording(); - r.start(); - if (!type.isEnabled()) { - throw new RuntimeException("Expected event to be enabled during recording"); - } - TestEvent testEvent = new TestEvent(); - testEvent.commit(); - loadEventClassDuringRecording(); - r.stop(); - if (type.isEnabled()) { - throw new RuntimeException("Expected event to be disabled after recording stopped"); - } - System.out.println("Checking SimpleEvent"); - hasEvent(r, SimpleEvent.class.getName()); - System.out.println("OK"); - - System.out.println("Checking TestEvent"); - hasEvent(r, TestEvent.class.getName()); - System.out.println("OK"); - } - - // Classes that are loaded during a recording - // should get instrumentation on class load - private static void loadEventClassDuringRecording() { - SimpleEvent event = new SimpleEvent(); - event.commit(); - } - - public static List fromRecording(Recording recording) throws IOException { - return RecordingFile.readAllEvents(makeCopy(recording)); - } - - private static Path makeCopy(Recording recording) throws IOException { - Path p = recording.getDestination(); - if (p == null) { - File directory = new File("."); - // FIXME: Must come up with a way to give human-readable name - // this will at least not clash when running parallel. - ProcessHandle h = ProcessHandle.current(); - p = new File(directory.getAbsolutePath(), "recording-" + recording.getId() + "-pid" + h.pid() + ".jfr").toPath(); - recording.dump(p); - } - return p; - } - - public static void hasEvent(Recording r, String name) throws IOException { - List events = fromRecording(r); - hasEvents(events); - hasEvent(events, name); - } - - public static void hasEvents(List events) { - if (events.isEmpty()) { - throw new RuntimeException("No events"); - } - } - - public static void hasEvent(List events, String name) throws IOException { - if (!containsEvent(events, name)) { - throw new RuntimeException("Missing event " + name + " in recording " + events.toString()); - } - } - - private static boolean containsEvent(List events, String name) { - for (RecordedEvent event : events) { - if (event.getEventType().getName().equals(name)) { - return true; - } - } - return false; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/GetFlightRecorder.java 2019-07-24 08:28:19.289467259 -0400 @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; + +import jdk.jfr.Event; +import jdk.jfr.EventType; +import jdk.jfr.FlightRecorder; +import jdk.jfr.Recording; +import jdk.jfr.consumer.RecordingFile; +import jdk.jfr.consumer.RecordedEvent; + +public class GetFlightRecorder { + private static class TestEvent extends Event { + } + private static class SimpleEvent extends Event { + public int id; + } + public static void main(String args[]) throws Exception { + EventType type = EventType.getEventType(TestEvent.class); // This class is loaded before recording has started. + if (type.isEnabled()) { + throw new RuntimeException("Expected event to be disabled before recording start"); + } + + // (1) make sure you can obtain the flight recorder without error. + System.out.println("jdk.jfr.FlightRecorder.getFlightRecorder() = " + FlightRecorder.getFlightRecorder()); + + // (2) test that the event class loaded before recording can still work. + Recording r = new Recording(); + r.start(); + if (!type.isEnabled()) { + throw new RuntimeException("Expected event to be enabled during recording"); + } + TestEvent testEvent = new TestEvent(); + testEvent.commit(); + loadEventClassDuringRecording(); + r.stop(); + if (type.isEnabled()) { + throw new RuntimeException("Expected event to be disabled after recording stopped"); + } + System.out.println("Checking SimpleEvent"); + hasEvent(r, SimpleEvent.class.getName()); + System.out.println("OK"); + + System.out.println("Checking TestEvent"); + hasEvent(r, TestEvent.class.getName()); + System.out.println("OK"); + } + + // Classes that are loaded during a recording + // should get instrumentation on class load + private static void loadEventClassDuringRecording() { + SimpleEvent event = new SimpleEvent(); + event.commit(); + } + + public static List fromRecording(Recording recording) throws IOException { + return RecordingFile.readAllEvents(makeCopy(recording)); + } + + private static Path makeCopy(Recording recording) throws IOException { + Path p = recording.getDestination(); + if (p == null) { + File directory = new File("."); + // FIXME: Must come up with a way to give human-readable name + // this will at least not clash when running parallel. + ProcessHandle h = ProcessHandle.current(); + p = new File(directory.getAbsolutePath(), "recording-" + recording.getId() + "-pid" + h.pid() + ".jfr").toPath(); + recording.dump(p); + } + return p; + } + + public static void hasEvent(Recording r, String name) throws IOException { + List events = fromRecording(r); + hasEvents(events); + hasEvent(events, name); + } + + public static void hasEvents(List events) { + if (events.isEmpty()) { + throw new RuntimeException("No events"); + } + } + + public static void hasEvent(List events, String name) throws IOException { + if (!containsEvent(events, name)) { + throw new RuntimeException("Missing event " + name + " in recording " + events.toString()); + } + } + + private static boolean containsEvent(List events, String name) { + for (RecordedEvent event : events) { + if (event.getEventType().getName().equals(name)) { + return true; + } + } + return false; + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/Greet.java 2019-07-24 08:28:19.985467234 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class Greet { - - public String Greeting() { - return new String(", how are you?"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/Greet.java 2019-07-24 08:28:19.661467246 -0400 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class Greet { + + public String Greeting() { + return new String(", how are you?"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/Hello.java 2019-07-24 08:28:20.365467221 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class Hello { - public static void main(String args[]) { - System.out.println("Hello World"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/Hello.java 2019-07-24 08:28:20.033467233 -0400 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class Hello { + public static void main(String args[]) { + System.out.println("Hello World"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/HelloExt.java 2019-07-24 08:28:20.713467209 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class HelloExt { - public static void main(String[] args) throws Throwable { - - String className = "javax.annotation.processing.FilerException"; - Class cls = Class.forName(className); - - ClassLoader loader = cls.getClassLoader(); - if (loader != ClassLoader.getPlatformClassLoader()) { - throw new java.lang.RuntimeException(className + " should be load by PlatformClassLoader but it is loaded by " + loader); - } - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (wb.isSharedClass(cls)) { - System.out.println("As expected, " + className + " is in shared space."); - } else { - throw new java.lang.RuntimeException(className + " is not in shared space."); - } - - className = "[Ljava.lang.Comparable;"; - cls = Class.forName(className); - loader = cls.getClassLoader(); - if (loader != null) { - throw new java.lang.RuntimeException(className + " should be load by the NULL class loader but it is loaded by " + loader); - } - - if (wb.isSharedClass(cls)) { - System.out.println("As expected, " + className + " is in shared space."); - } else { - throw new java.lang.RuntimeException(className + " is not in shared space."); - } - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/HelloExt.java 2019-07-24 08:28:20.413467219 -0400 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class HelloExt { + public static void main(String[] args) throws Throwable { + + String className = "javax.annotation.processing.FilerException"; + Class cls = Class.forName(className); + + ClassLoader loader = cls.getClassLoader(); + if (loader != ClassLoader.getPlatformClassLoader()) { + throw new java.lang.RuntimeException(className + " should be load by PlatformClassLoader but it is loaded by " + loader); + } + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (wb.isSharedClass(cls)) { + System.out.println("As expected, " + className + " is in shared space."); + } else { + throw new java.lang.RuntimeException(className + " is not in shared space."); + } + + className = "[Ljava.lang.Comparable;"; + cls = Class.forName(className); + loader = cls.getClassLoader(); + if (loader != null) { + throw new java.lang.RuntimeException(className + " should be load by the NULL class loader but it is loaded by " + loader); + } + + if (wb.isSharedClass(cls)) { + System.out.println("As expected, " + className + " is in shared space."); + } else { + throw new java.lang.RuntimeException(className + " is not in shared space."); + } + } +} + --- old/test/hotspot/jtreg/runtime/appcds/test-classes/HelloExtApp.java 2019-07-24 08:28:21.045467197 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class HelloExtApp { - public static void main(String args[]) { - System.out.println("Hello World Ext: " + HelloExtExt.class.getProtectionDomain()); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/HelloExtApp.java 2019-07-24 08:28:20.761467207 -0400 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class HelloExtApp { + public static void main(String args[]) { + System.out.println("Hello World Ext: " + HelloExtExt.class.getProtectionDomain()); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/HelloExtExt.java 2019-07-24 08:28:21.373467186 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class HelloExtExt { - -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/HelloExtExt.java 2019-07-24 08:28:21.097467196 -0400 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class HelloExtExt { + +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/HelloMore.java 2019-07-24 08:28:21.757467173 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class HelloMore { - public static void main(String args[]) { - Hello.main(args); - System.out.println("Hello World ... More"); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/HelloMore.java 2019-07-24 08:28:21.421467184 -0400 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class HelloMore { + public static void main(String args[]) { + Hello.main(args); + System.out.println("Hello World ... More"); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/HelloWB.java 2019-07-24 08:28:22.133467159 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class HelloWB { - public static void main(String[] args) throws Throwable { - System.out.println("HelloWB.class.getClassLoader() = " + HelloWB.class.getClassLoader()); - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (wb.isSharedClass(HelloWB.class)) { - System.out.println("As expected, HelloWB.class is in shared space."); - } else { - throw new java.lang.RuntimeException("HelloWB.class should be in shared space."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/HelloWB.java 2019-07-24 08:28:21.809467171 -0400 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class HelloWB { + public static void main(String[] args) throws Throwable { + System.out.println("HelloWB.class.getClassLoader() = " + HelloWB.class.getClassLoader()); + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (wb.isSharedClass(HelloWB.class)) { + System.out.println("As expected, HelloWB.class is in shared space."); + } else { + throw new java.lang.RuntimeException("HelloWB.class should be in shared space."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/Hi.java 2019-07-24 08:28:22.457467148 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class Hi extends Greet { - public static void main(String args[]) { - Greet g = new Greet(); - MyClass.doit(g.Greeting()); - } - public static class MyClass { - public static void doit(String greeting) { - System.out.println("Hi" + greeting); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/Hi.java 2019-07-24 08:28:22.181467158 -0400 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class Hi extends Greet { + public static void main(String args[]) { + Greet g = new Greet(); + MyClass.doit(g.Greeting()); + } + public static class MyClass { + public static void doit(String greeting) { + System.out.println("Hi" + greeting); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/Iloadw.jasm 2019-07-24 08:28:22.765467137 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class Iloadw - version 51: 0 -{ - public static Method run:"()I" - stack 1 locals 400 - { - iconst_0; - istore_w 300; - iinc_w 300,1; - iload_w 300; - ireturn; - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/Iloadw.jasm 2019-07-24 08:28:22.493467147 -0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class Iloadw + version 51: 0 +{ + public static Method run:"()I" + stack 1 locals 400 + { + iconst_0; + istore_w 300; + iinc_w 300,1; + iload_w 300; + ireturn; + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/IloadwMain.java 2019-07-24 08:28:23.065467127 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class IloadwMain { - public static void main(String args[]) { - int result = Iloadw.run(); - if (result != 1) { - throw new RuntimeException( - "Failed. Result is " + result + ", expect 1."); - } else { - System.out.println("Passed."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/IloadwMain.java 2019-07-24 08:28:22.801467136 -0400 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class IloadwMain { + public static void main(String args[]) { + int result = Iloadw.run(); + if (result != 1) { + throw new RuntimeException( + "Failed. Result is " + result + ", expect 1."); + } else { + System.out.println("Passed."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassPackage.java 2019-07-24 08:28:23.401467115 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class JimageClassPackage { - public static void main(String args[]) throws Throwable { - // Test Package for boot/app/ext module classes from the "modules" jimage. - // The following classes are archived. See runtime/AppCDS/Package.java. - // java.util.Dictionary (testcase 0), - // sun.tools.javac.Main (testcase 1), - // jdk.nio.zipfs.ZipInfo (testcase 2), - // java.net.URL (testcase 3), - // sun.rmi.rmic.Main (testcase 4), - // com.sun.jndi.dns.DnsName (testcase 5) - String testcases[][] = - {{"Loading shared boot module class first", "java.util", - "java.util.Dictionary", "java.util.ServiceConfigurationError"}, - - {"Loading shared app module class first", "sun.tools.javac", - "sun.tools.javac.Main", "sun.tools.javac.BatchParser"}, - - {"Loading shared ext module class first", "jdk.nio.zipfs", - "jdk.nio.zipfs.ZipInfo", "jdk.nio.zipfs.ZipPath"}, - - {"Loading non-shared boot module class first", "java.net", - "java.net.HttpCookie", "java.net.URL"}, - - {"Loading non-shared app module class first", "sun.rmi.rmic", - "sun.rmi.rmic.RMIGenerator", "sun.rmi.rmic.Main"}, - - {"Loading non-shared ext module class first", "com.sun.jndi.dns", - "com.sun.jndi.dns.Resolver", "com.sun.jndi.dns.DnsName"}}; - - JimageClassPackage test = new JimageClassPackage(); - for (int i = 0; i < testcases.length; i++) { - System.out.println("Testcase " + i + ": " + testcases[i][0]); - test.testPackage(testcases[i][1], testcases[i][2], testcases[i][3]); - } - } - - private void testPackage (String pkg, - String shared, - String nonShared) throws Throwable { - Class c1 = Class.forName(shared); - ClassLoader cl = c1.getClassLoader(); - Package pkg_from_loader; - if (cl != null) { - pkg_from_loader = cl.getDefinedPackage(pkg); - } else { - pkg_from_loader = Package.getPackage(pkg); - } - - Package pkg_from_shared_class = c1.getPackage(); - - Class c2 = Class.forName(nonShared); - Package pkg_from_nonshared_class = c2.getPackage(); - - if (pkg_from_loader != null && - pkg_from_shared_class != null && - pkg_from_loader == pkg_from_shared_class && - pkg_from_shared_class == pkg_from_nonshared_class && - pkg_from_shared_class.getName().equals(pkg)) { - System.out.println("Expected package: " + pkg_from_shared_class.toString()); - } else { - System.out.println("Unexpected package" + pkg_from_shared_class); - System.exit(1); - } - if (pkg_from_shared_class.isSealed()) { - System.out.println("Package is sealed"); - } else { - System.out.println("Package is not sealed"); - System.exit(1); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/JimageClassPackage.java 2019-07-24 08:28:23.105467126 -0400 @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class JimageClassPackage { + public static void main(String args[]) throws Throwable { + // Test Package for boot/app/ext module classes from the "modules" jimage. + // The following classes are archived. See runtime/AppCDS/Package.java. + // java.util.Dictionary (testcase 0), + // sun.tools.javac.Main (testcase 1), + // jdk.nio.zipfs.ZipInfo (testcase 2), + // java.net.URL (testcase 3), + // sun.rmi.rmic.Main (testcase 4), + // com.sun.jndi.dns.DnsName (testcase 5) + String testcases[][] = + {{"Loading shared boot module class first", "java.util", + "java.util.Dictionary", "java.util.ServiceConfigurationError"}, + + {"Loading shared app module class first", "sun.tools.javac", + "sun.tools.javac.Main", "sun.tools.javac.BatchParser"}, + + {"Loading shared ext module class first", "jdk.nio.zipfs", + "jdk.nio.zipfs.ZipInfo", "jdk.nio.zipfs.ZipPath"}, + + {"Loading non-shared boot module class first", "java.net", + "java.net.HttpCookie", "java.net.URL"}, + + {"Loading non-shared app module class first", "sun.rmi.rmic", + "sun.rmi.rmic.RMIGenerator", "sun.rmi.rmic.Main"}, + + {"Loading non-shared ext module class first", "com.sun.jndi.dns", + "com.sun.jndi.dns.Resolver", "com.sun.jndi.dns.DnsName"}}; + + JimageClassPackage test = new JimageClassPackage(); + for (int i = 0; i < testcases.length; i++) { + System.out.println("Testcase " + i + ": " + testcases[i][0]); + test.testPackage(testcases[i][1], testcases[i][2], testcases[i][3]); + } + } + + private void testPackage (String pkg, + String shared, + String nonShared) throws Throwable { + Class c1 = Class.forName(shared); + ClassLoader cl = c1.getClassLoader(); + Package pkg_from_loader; + if (cl != null) { + pkg_from_loader = cl.getDefinedPackage(pkg); + } else { + pkg_from_loader = Package.getPackage(pkg); + } + + Package pkg_from_shared_class = c1.getPackage(); + + Class c2 = Class.forName(nonShared); + Package pkg_from_nonshared_class = c2.getPackage(); + + if (pkg_from_loader != null && + pkg_from_shared_class != null && + pkg_from_loader == pkg_from_shared_class && + pkg_from_shared_class == pkg_from_nonshared_class && + pkg_from_shared_class.getName().equals(pkg)) { + System.out.println("Expected package: " + pkg_from_shared_class.toString()); + } else { + System.out.println("Unexpected package" + pkg_from_shared_class); + System.exit(1); + } + if (pkg_from_shared_class.isSealed()) { + System.out.println("Package is sealed"); + } else { + System.out.println("Package is not sealed"); + System.exit(1); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassProtDomain.java 2019-07-24 08:28:23.757467103 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class JimageClassProtDomain { - public static void main(String args[]) throws Throwable { - // Test ProtectionDomain for boot/app/ext module classes from the "modules" jimage. - // The following classes are archived. See runtime/AppCDS/ProtectionDomain.java. - // java.util.Dictionary (testcase 0), - // sun.tools.javac.Main (testcase 1), - // jdk.nio.zipfs.ZipInfo (testcase 2), - // java.net.URL (testcase 3), - // sun.rmi.rmic.Main (testcase 4), - // com.sun.jndi.dns.DnsName (testcase 5) - String testcases[][] = - {{"Loading shared boot module class first", - "java.util.Dictionary", "java.util.ServiceConfigurationError"}, - - {"Loading shared app module class first", - "com.sun.tools.javac.Main", "com.sun.tools.javac.code.Symbol"}, - - {"Loading shared ext module class first", - "jdk.nio.zipfs.ZipInfo", "jdk.nio.zipfs.ZipPath"}, - - {"Loading non-shared boot module class first", - "java.net.HttpCookie", "java.net.URL"}, - - {"Loading non-shared app module class first", - "com.sun.tools.sjavac.Util", "com.sun.tools.sjavac.Main"}, - - {"Loading non-shared ext module class first", - "com.sun.jndi.dns.Resolver", "com.sun.jndi.dns.DnsName"}}; - for (int i = 0; i < testcases.length; i++) { - System.out.println("Testcase " + i + ": " + testcases[i][0]); - JimageClassProtDomain.testProtectionDomain(testcases[i][1], testcases[i][2]); - } - } - - private static void testProtectionDomain(String shared, String nonShared) - throws Throwable { - Class c1 = Class.forName(shared); - Class c2 = Class.forName(nonShared); - if (c1.getProtectionDomain() != c2.getProtectionDomain()) { - System.out.println(c1.getProtectionDomain()); - System.out.println(c1.getProtectionDomain().getCodeSource()); - System.out.println(c2.getProtectionDomain()); - System.out.println(c2.getProtectionDomain().getCodeSource()); - throw new RuntimeException("Failed: Protection Domains do not match!"); - } else { - System.out.println(c1.getProtectionDomain()); - System.out.println(c1.getProtectionDomain().getCodeSource()); - System.out.println(c2.getProtectionDomain()); - System.out.println(c2.getProtectionDomain().getCodeSource()); - System.out.println("Passed: Protection Domains match."); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/JimageClassProtDomain.java 2019-07-24 08:28:23.445467114 -0400 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class JimageClassProtDomain { + public static void main(String args[]) throws Throwable { + // Test ProtectionDomain for boot/app/ext module classes from the "modules" jimage. + // The following classes are archived. See runtime/AppCDS/ProtectionDomain.java. + // java.util.Dictionary (testcase 0), + // sun.tools.javac.Main (testcase 1), + // jdk.nio.zipfs.ZipInfo (testcase 2), + // java.net.URL (testcase 3), + // sun.rmi.rmic.Main (testcase 4), + // com.sun.jndi.dns.DnsName (testcase 5) + String testcases[][] = + {{"Loading shared boot module class first", + "java.util.Dictionary", "java.util.ServiceConfigurationError"}, + + {"Loading shared app module class first", + "com.sun.tools.javac.Main", "com.sun.tools.javac.code.Symbol"}, + + {"Loading shared ext module class first", + "jdk.nio.zipfs.ZipInfo", "jdk.nio.zipfs.ZipPath"}, + + {"Loading non-shared boot module class first", + "java.net.HttpCookie", "java.net.URL"}, + + {"Loading non-shared app module class first", + "com.sun.tools.sjavac.Util", "com.sun.tools.sjavac.Main"}, + + {"Loading non-shared ext module class first", + "com.sun.jndi.dns.Resolver", "com.sun.jndi.dns.DnsName"}}; + for (int i = 0; i < testcases.length; i++) { + System.out.println("Testcase " + i + ": " + testcases[i][0]); + JimageClassProtDomain.testProtectionDomain(testcases[i][1], testcases[i][2]); + } + } + + private static void testProtectionDomain(String shared, String nonShared) + throws Throwable { + Class c1 = Class.forName(shared); + Class c2 = Class.forName(nonShared); + if (c1.getProtectionDomain() != c2.getProtectionDomain()) { + System.out.println(c1.getProtectionDomain()); + System.out.println(c1.getProtectionDomain().getCodeSource()); + System.out.println(c2.getProtectionDomain()); + System.out.println(c2.getProtectionDomain().getCodeSource()); + throw new RuntimeException("Failed: Protection Domains do not match!"); + } else { + System.out.println(c1.getProtectionDomain()); + System.out.println(c1.getProtectionDomain().getCodeSource()); + System.out.println(c2.getProtectionDomain()); + System.out.println(c2.getProtectionDomain().getCodeSource()); + System.out.println("Passed: Protection Domains match."); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/JvmtiApp.java 2019-07-24 08:28:24.073467092 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -public class JvmtiApp { - static Class forname(String cn) { - try { - return Class.forName(cn); - } catch (Throwable t) { - return null; - } - } - - static void failed(String msg) { - System.out.println("TEST FAILED: " + msg); - System.exit(1); - } - - // See ../JvmtiAddPath.java for how the classpaths are configured. - public static void main(String args[]) { - String cn = "Hello"; - if (args.length >= 3) { - cn = args[args.length - 1]; - } - - if (args[0].equals("noadd")) { - if (forname(cn) != null) { - failed(cn + " class was loaded unexpectedly"); - } - // We use -verbose:class to verify that Extra.class IS loaded by AppCDS if - // the boot classpath HAS NOT been appended. - ExtraClass.doit(); - System.exit(0); - } - - WhiteBox wb = WhiteBox.getWhiteBox(); - - if (args[0].equals("bootonly")) { - wb.addToBootstrapClassLoaderSearch(args[1]); - Class cls = forname(cn); - if (cls == null) { - failed("Cannot find " + cn + " class"); - } - if (cls.getClassLoader() != null) { - failed("Hello class not loaded by boot classloader"); - } - } else if (args[0].equals("apponly")) { - wb.addToSystemClassLoaderSearch(args[1]); - Class cls = forname(cn); - if (cls == null) { - failed("Cannot find " + cn + " class"); - } - if (cls.getClassLoader() != JvmtiApp.class.getClassLoader()) { - failed(cn + " class not loaded by app classloader"); - } - } else if (args[0].equals("noadd-appcds")) { - cn = (args.length == 1) ? "Hello" : args[1]; - Class cls = forname(cn); - if (cls == null) { - failed("Cannot find " + cn + " class"); - } - if (cls.getClassLoader() != JvmtiApp.class.getClassLoader()) { - failed(cn + " class not loaded by app classloader"); - } - } else if (args[0].equals("appandboot")) { - wb.addToBootstrapClassLoaderSearch(args[1]); - wb.addToSystemClassLoaderSearch(args[2]); - cn = (args.length == 3) ? "Hello" : args[3]; - Class cls = forname(cn); - if (cls == null) { - failed("Cannot find " + cn + " class"); - } - if (cls.getClassLoader() != null) { - failed(cn + " class not loaded by boot classloader"); - } - } else { - failed("unknown option " + args[0]); - } - - // We use -verbose:class to verify that Extra.class IS NOT loaded by AppCDS if - // the boot classpath HAS been appended. - ExtraClass.doit(); - - System.out.println("Test passed: " + args[0]); - } -} - -class ExtraClass { - static void doit() {} -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/JvmtiApp.java 2019-07-24 08:28:23.801467101 -0400 @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +public class JvmtiApp { + static Class forname(String cn) { + try { + return Class.forName(cn); + } catch (Throwable t) { + return null; + } + } + + static void failed(String msg) { + System.out.println("TEST FAILED: " + msg); + System.exit(1); + } + + // See ../JvmtiAddPath.java for how the classpaths are configured. + public static void main(String args[]) { + String cn = "Hello"; + if (args.length >= 3) { + cn = args[args.length - 1]; + } + + if (args[0].equals("noadd")) { + if (forname(cn) != null) { + failed(cn + " class was loaded unexpectedly"); + } + // We use -verbose:class to verify that Extra.class IS loaded by AppCDS if + // the boot classpath HAS NOT been appended. + ExtraClass.doit(); + System.exit(0); + } + + WhiteBox wb = WhiteBox.getWhiteBox(); + + if (args[0].equals("bootonly")) { + wb.addToBootstrapClassLoaderSearch(args[1]); + Class cls = forname(cn); + if (cls == null) { + failed("Cannot find " + cn + " class"); + } + if (cls.getClassLoader() != null) { + failed("Hello class not loaded by boot classloader"); + } + } else if (args[0].equals("apponly")) { + wb.addToSystemClassLoaderSearch(args[1]); + Class cls = forname(cn); + if (cls == null) { + failed("Cannot find " + cn + " class"); + } + if (cls.getClassLoader() != JvmtiApp.class.getClassLoader()) { + failed(cn + " class not loaded by app classloader"); + } + } else if (args[0].equals("noadd-appcds")) { + cn = (args.length == 1) ? "Hello" : args[1]; + Class cls = forname(cn); + if (cls == null) { + failed("Cannot find " + cn + " class"); + } + if (cls.getClassLoader() != JvmtiApp.class.getClassLoader()) { + failed(cn + " class not loaded by app classloader"); + } + } else if (args[0].equals("appandboot")) { + wb.addToBootstrapClassLoaderSearch(args[1]); + wb.addToSystemClassLoaderSearch(args[2]); + cn = (args.length == 3) ? "Hello" : args[3]; + Class cls = forname(cn); + if (cls == null) { + failed("Cannot find " + cn + " class"); + } + if (cls.getClassLoader() != null) { + failed(cn + " class not loaded by boot classloader"); + } + } else { + failed("unknown option " + args[0]); + } + + // We use -verbose:class to verify that Extra.class IS NOT loaded by AppCDS if + // the boot classpath HAS been appended. + ExtraClass.doit(); + + System.out.println("Test passed: " + args[0]); + } +} + +class ExtraClass { + static void doit() {} +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/MethodNoReturn.jasm 2019-07-24 08:28:24.433467079 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/* -WAS: - -class MethodNoReturn { - void badMethod() {} -} -*/ - -super class MethodNoReturn - version 52:0 -{ - - -Method "":"()V" - stack 1 locals 1 -{ - aload_0; - invokespecial Method java/lang/Object."":"()V"; - return; -} - -Method badMethod:"()V" - stack 0 locals 1 -{ - /* - should be: - return; - */ - - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - pop; - iconst_1; - iconst_1; - iconst_1; - iconst_1; - iconst_1; - iconst_1; - iconst_1; - iconst_1; - pop; - pop; - pop; - pop; - pop; - pop; - pop; - pop; - // no return here -- so this class will fail verification -} - -} // end Class MethodNoReturn --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/MethodNoReturn.jasm 2019-07-24 08:28:24.121467090 -0400 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* +WAS: + +class MethodNoReturn { + void badMethod() {} +} +*/ + +super class MethodNoReturn + version 52:0 +{ + + +Method "":"()V" + stack 1 locals 1 +{ + aload_0; + invokespecial Method java/lang/Object."":"()V"; + return; +} + +Method badMethod:"()V" + stack 0 locals 1 +{ + /* + should be: + return; + */ + + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + pop; + iconst_1; + iconst_1; + iconst_1; + iconst_1; + iconst_1; + iconst_1; + iconst_1; + iconst_1; + pop; + pop; + pop; + pop; + pop; + pop; + pop; + pop; + // no return here -- so this class will fail verification +} + +} // end Class MethodNoReturn --- old/test/hotspot/jtreg/runtime/appcds/test-classes/MissingSuper.java 2019-07-24 08:28:24.769467068 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class MissingSuper { - public static void main(String args[]) { - try { - new MissingSuperSub(); - } catch (NoClassDefFoundError e) { - System.out.println("Expected NoClassDefFoundError:"); - e.printStackTrace(System.out); - } - - try { - new MissingSuperImpl(); - } catch (NoClassDefFoundError e) { - System.out.println("Expected NoClassDefFoundError:"); - e.printStackTrace(System.out); - } - } -} - -class MissingSuperSup {} // This class will be deleted from missing_super.jar before dumping - -class MissingSuperSub extends MissingSuperSup {} - -interface MissingSuperIntf {} // This interface will be deleted from missing_super.jar before dumping - -class MissingSuperImpl implements MissingSuperIntf {} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/MissingSuper.java 2019-07-24 08:28:24.485467078 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class MissingSuper { + public static void main(String args[]) { + try { + new MissingSuperSub(); + } catch (NoClassDefFoundError e) { + System.out.println("Expected NoClassDefFoundError:"); + e.printStackTrace(System.out); + } + + try { + new MissingSuperImpl(); + } catch (NoClassDefFoundError e) { + System.out.println("Expected NoClassDefFoundError:"); + e.printStackTrace(System.out); + } + } +} + +class MissingSuperSup {} // This class will be deleted from missing_super.jar before dumping + +class MissingSuperSub extends MissingSuperSup {} + +interface MissingSuperIntf {} // This interface will be deleted from missing_super.jar before dumping + +class MissingSuperImpl implements MissingSuperIntf {} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/MultiProcClass.java 2019-07-24 08:28:25.121467055 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import sun.hotspot.WhiteBox; - -// This class should be loaded from a shared archive. -public class MultiProcClass { - private static String instanceLabel; - - public static void main(String args[]) throws Exception { - instanceLabel = args[0]; - String checkPmap = args[1]; - - long pid = ProcessHandle.current().pid(); - System.out.println(inst("========================== Starting MultiProcClass")); - System.out.println(inst("My PID: " + pid )); - System.out.println(inst("checkPmap = <" + checkPmap + ">" )); - - if ("true".equals(checkPmap)) { - if (runPmap(pid, true) != 0) - System.out.println("MultiProcClass: Pmap failed"); - } - - WhiteBox wb = WhiteBox.getWhiteBox(); - if (!wb.isSharedClass(MultiProcClass.class)) { - throw new RuntimeException(inst("MultiProcClass should be shared but is not.")); - } - - System.out.println(inst("========================== Leaving MultiProcClass")); - } - - // A convenience method to append process instance label - private static String inst(String msg) { - return "process-" + instanceLabel + " : " + msg; - } - - // Use on Linux-only; requires jdk-9 for Process.pid() - public static int runPmap(long pid, boolean inheritIO) throws Exception { - ProcessBuilder pmapPb = new ProcessBuilder("pmap", "" + pid); - if (inheritIO) - pmapPb.inheritIO(); - - return pmapPb.start().waitFor(); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/MultiProcClass.java 2019-07-24 08:28:24.817467066 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import sun.hotspot.WhiteBox; + +// This class should be loaded from a shared archive. +public class MultiProcClass { + private static String instanceLabel; + + public static void main(String args[]) throws Exception { + instanceLabel = args[0]; + String checkPmap = args[1]; + + long pid = ProcessHandle.current().pid(); + System.out.println(inst("========================== Starting MultiProcClass")); + System.out.println(inst("My PID: " + pid )); + System.out.println(inst("checkPmap = <" + checkPmap + ">" )); + + if ("true".equals(checkPmap)) { + if (runPmap(pid, true) != 0) + System.out.println("MultiProcClass: Pmap failed"); + } + + WhiteBox wb = WhiteBox.getWhiteBox(); + if (!wb.isSharedClass(MultiProcClass.class)) { + throw new RuntimeException(inst("MultiProcClass should be shared but is not.")); + } + + System.out.println(inst("========================== Leaving MultiProcClass")); + } + + // A convenience method to append process instance label + private static String inst(String msg) { + return "process-" + instanceLabel + " : " + msg; + } + + // Use on Linux-only; requires jdk-9 for Process.pid() + public static int runPmap(long pid, boolean inheritIO) throws Exception { + ProcessBuilder pmapPb = new ProcessBuilder("pmap", "" + pid); + if (inheritIO) + pmapPb.inheritIO(); + + return pmapPb.start().waitFor(); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/MyAnnotation.java 2019-07-24 08:28:25.453467044 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.annotation.Target; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) - -public @interface MyAnnotation { - public String name(); - public String value(); -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/MyAnnotation.java 2019-07-24 08:28:25.169467054 -0400 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) + +public @interface MyAnnotation { + public String name(); + public String value(); +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/MyThread.java 2019-07-24 08:28:25.805467032 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -class MyThread extends Thread { - void foo() {} - - public void run() { - while (true) { - foo(); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/MyThread.java 2019-07-24 08:28:25.505467042 -0400 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +class MyThread extends Thread { + void foo() {} + + public void run() { + while (true) { + foo(); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/PackageSealingTest.java 2019-07-24 08:28:26.133467020 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.lang.Package; - -public class PackageSealingTest { - public static void main(String args[]) { - try { - Class c1 = PackageSealingTest.class.forName("sealed.pkg.C1"); - Class c2 = PackageSealingTest.class.forName("pkg.C2"); - Package p1 = c1.getPackage(); - System.out.println("Package 1: " + p1.toString()); - Package p2 = c2.getPackage(); - System.out.println("Package 2: " + p2.toString()); - - if (!p1.isSealed()) { - System.out.println("Failed: sealed.pkg is not sealed."); - System.exit(0); - } - - if (p2.isSealed()) { - System.out.println("Failed: pkg is sealed."); - System.exit(0); - } - - System.out.println("OK"); - } catch (Exception e) { - System.out.println(e.getMessage()); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/PackageSealingTest.java 2019-07-24 08:28:25.849467030 -0400 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +import java.lang.Package; + +public class PackageSealingTest { + public static void main(String args[]) { + try { + Class c1 = PackageSealingTest.class.forName("sealed.pkg.C1"); + Class c2 = PackageSealingTest.class.forName("pkg.C2"); + Package p1 = c1.getPackage(); + System.out.println("Package 1: " + p1.toString()); + Package p2 = c2.getPackage(); + System.out.println("Package 2: " + p2.toString()); + + if (!p1.isSealed()) { + System.out.println("Failed: sealed.pkg is not sealed."); + System.exit(0); + } + + if (p2.isSealed()) { + System.out.println("Failed: pkg is sealed."); + System.exit(0); + } + + System.out.println("OK"); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/PackageTest.java 2019-07-24 08:28:26.465467009 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package p; - -public class PackageTest { - public static void main(String args[]) { - (new PackageTest()).test(); - } - - private void test() { - ClassLoader cl = PackageTest.class.getClassLoader(); - Package pkg_from_loader; - if (cl != null) { - pkg_from_loader = cl.getDefinedPackage("p"); - } else { - pkg_from_loader = Package.getPackage("p"); - } - - Package pkg = PackageTest.class.getPackage(); - if (pkg_from_loader != null && pkg == pkg_from_loader && - pkg.getName().equals("p")) { - System.out.println("Expected package: " + pkg); - } else { - System.out.println("Unexpected package: " + pkg); - System.exit(1); - } - if (pkg.isSealed()) { - System.out.println("Package is sealed"); - System.exit(1); - } else { - System.out.println("Package is not sealed"); - } - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/PackageTest.java 2019-07-24 08:28:26.185467018 -0400 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package p; + +public class PackageTest { + public static void main(String args[]) { + (new PackageTest()).test(); + } + + private void test() { + ClassLoader cl = PackageTest.class.getClassLoader(); + Package pkg_from_loader; + if (cl != null) { + pkg_from_loader = cl.getDefinedPackage("p"); + } else { + pkg_from_loader = Package.getPackage("p"); + } + + Package pkg = PackageTest.class.getPackage(); + if (pkg_from_loader != null && pkg == pkg_from_loader && + pkg.getName().equals("p")) { + System.out.println("Expected package: " + pkg); + } else { + System.out.println("Unexpected package: " + pkg); + System.exit(1); + } + if (pkg.isSealed()) { + System.out.println("Package is sealed"); + System.exit(1); + } else { + System.out.println("Package is not sealed"); + } + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/ParallelClasses.java 2019-07-24 08:28:26.845466995 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -class ParallelClass0 {} -class ParallelClass1 {} -class ParallelClass2 {} -class ParallelClass3 {} -class ParallelClass4 {} -class ParallelClass5 {} -class ParallelClass6 {} -class ParallelClass7 {} -class ParallelClass8 {} -class ParallelClass9 {} -class ParallelClass10 {} -class ParallelClass11 {} -class ParallelClass12 {} -class ParallelClass13 {} -class ParallelClass14 {} -class ParallelClass15 {} -class ParallelClass16 {} -class ParallelClass17 {} -class ParallelClass18 {} -class ParallelClass19 {} -class ParallelClass20 {} -class ParallelClass21 {} -class ParallelClass22 {} -class ParallelClass23 {} -class ParallelClass24 {} -class ParallelClass25 {} -class ParallelClass26 {} -class ParallelClass27 {} -class ParallelClass28 {} -class ParallelClass29 {} -class ParallelClass30 {} -class ParallelClass31 {} -class ParallelClass32 {} -class ParallelClass33 {} -class ParallelClass34 {} -class ParallelClass35 {} -class ParallelClass36 {} -class ParallelClass37 {} -class ParallelClass38 {} -class ParallelClass39 {} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/ParallelClasses.java 2019-07-24 08:28:26.513467007 -0400 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +class ParallelClass0 {} +class ParallelClass1 {} +class ParallelClass2 {} +class ParallelClass3 {} +class ParallelClass4 {} +class ParallelClass5 {} +class ParallelClass6 {} +class ParallelClass7 {} +class ParallelClass8 {} +class ParallelClass9 {} +class ParallelClass10 {} +class ParallelClass11 {} +class ParallelClass12 {} +class ParallelClass13 {} +class ParallelClass14 {} +class ParallelClass15 {} +class ParallelClass16 {} +class ParallelClass17 {} +class ParallelClass18 {} +class ParallelClass19 {} +class ParallelClass20 {} +class ParallelClass21 {} +class ParallelClass22 {} +class ParallelClass23 {} +class ParallelClass24 {} +class ParallelClass25 {} +class ParallelClass26 {} +class ParallelClass27 {} +class ParallelClass28 {} +class ParallelClass29 {} +class ParallelClass30 {} +class ParallelClass31 {} +class ParallelClass32 {} +class ParallelClass33 {} +class ParallelClass34 {} +class ParallelClass35 {} +class ParallelClass36 {} +class ParallelClass37 {} +class ParallelClass38 {} +class ParallelClass39 {} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/ParallelLoad.java 2019-07-24 08:28:27.189466983 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,220 +0,0 @@ -/* - * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.*; -import java.net.*; -import java.lang.reflect.Field; - - -// This test helper is parameterized by: -// - class transformation mode: property "appcds.parallel.transform.mode" -// - class loader test types -// -// In the case of transformMode == "cflh", the transformation is performed -// by AppCDS/jvmti/TransformerAgent.java. The classes to be transformed, such as -// ParallelClassTr0, are defined in ./jvmti/parallelLoad/ParallelClasses.java - -public class ParallelLoad { - public static int MAX_CLASSES = 40; - public static int NUM_THREADS = 4; - - public final static int SYSTEM_LOADER = 0; - public final static int SINGLE_CUSTOM_LOADER = 1; - public final static int MULTI_CUSTOM_LOADER = 2; - - public static final int FINGERPRINT_MODE = 1; - public static final int API_MODE = 2; - - public static int loaderType = SYSTEM_LOADER; - public static ClassLoader classLoaders[]; - public static int mode = FINGERPRINT_MODE; - - public static float timeoutFactor = - Float.parseFloat(System.getProperty("test.timeout.factor", "1.0")); - - public static void main(String args[]) throws Throwable { - run(args, null); - } - public static void run(String args[], ClassLoader loaders[]) throws Throwable { - String customJar = null; - System.out.println("ParallelLoad: timeoutFactor = " + timeoutFactor); - - if (args.length >= 1) { - if ("SINGLE_CUSTOM_LOADER".equals(args[0])) { - loaderType = SINGLE_CUSTOM_LOADER; - customJar = args[2]; - } else if ("MULTI_CUSTOM_LOADER".equals(args[0])) { - loaderType = MULTI_CUSTOM_LOADER; - customJar = args[2]; - } else if ("SYSTEM_LOADER".equals(args[0])) { - loaderType = SYSTEM_LOADER; - } else { - throw new RuntimeException("Unexpected loaderType" + args[0]); - } - } - - if (customJar != null) { - if ("FINGERPRINT_MODE".equals(args[1])) { - mode = FINGERPRINT_MODE; - classLoaders = new ClassLoader[NUM_THREADS]; - for (int i=0; i loadClass(String name, boolean resolve) - throws ClassNotFoundException - { - called = true; - System.out.println("TestClassLoader: loadClass(\"" + name + "\", " + resolve + ")"); - return (super.loadClass(name, resolve)); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/TestClassLoader.java 2019-07-24 08:28:29.685466896 -0400 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// This is a class loader that simply delegates all calls to its parent loader. + +public class TestClassLoader extends ClassLoader { + static boolean called = false; + ClassLoader parent; + public TestClassLoader(ClassLoader parent) { + super(parent); + this.parent = parent; + } + + public Class loadClass(String name, boolean resolve) + throws ClassNotFoundException + { + called = true; + System.out.println("TestClassLoader: loadClass(\"" + name + "\", " + resolve + ")"); + return (super.loadClass(name, resolve)); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/TestWithProfilerHelper.java 2019-07-24 08:28:30.249466877 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class TestWithProfilerHelper { - public static void main(String[] args) throws Exception { - Thread t = new MyThread(); - t.start(); - String prop = "TestWithProfiler.timeout"; - int secs = Integer.parseInt(System.getProperty(prop, "15")); - System.out.println("Run for -D" + prop + "=" + secs + " (seconds)"); - Thread.sleep(secs * 1000); - System.exit(0); - } -} --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/TestWithProfilerHelper.java 2019-07-24 08:28:29.989466886 -0400 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class TestWithProfilerHelper { + public static void main(String[] args) throws Exception { + Thread t = new MyThread(); + t.start(); + String prop = "TestWithProfiler.timeout"; + int secs = Integer.parseInt(System.getProperty(prop, "15")); + System.out.println("Run for -D" + prop + "=" + secs + " (seconds)"); + Thread.sleep(secs * 1000); + System.exit(0); + } +} --- old/test/hotspot/jtreg/runtime/appcds/test-classes/TrySwitchMyLoader.java 2019-07-24 08:28:30.549466866 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -public class TrySwitchMyLoader { - public static void main(String args[]) { - System.out.println("TrySwitchMyLoader's loader = " + ReportMyLoader.class.getClassLoader()); - System.setProperty("java.system.class.loader", "TestClassLoader"); - - // This should still report the same loader as TrySwitchMyLoader.class.getClassLoader(), - // as setting the java.system.class.loader after main method has been executed - // has no effect. - ReportMyLoader.main(args); - } -} - --- /dev/null 2019-07-22 09:37:15.068007775 -0400 +++ new/test/hotspot/jtreg/runtime/cds/test-classes/TrySwitchMyLoader.java 2019-07-24 08:28:30.285466875 -0400 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +public class TrySwitchMyLoader { + public static void main(String args[]) { + System.out.println("TrySwitchMyLoader's loader = " + ReportMyLoader.class.getClassLoader()); + System.setProperty("java.system.class.loader", "TestClassLoader"); + + // This should still report the same loader as TrySwitchMyLoader.class.getClassLoader(), + // as setting the java.system.class.loader after main method has been executed + // has no effect. + ReportMyLoader.main(args); + } +} + --- old/test/hotspot/jtreg/runtime/appcds/test-classes/Util.java 2019-07-24 08:28:30.849466856 -0400 +++ /dev/null 2019-07-22 09:37:15.068007775 -0400 @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -import java.io.*; -import java.lang.reflect.*; -import java.util.jar.*; - -public class Util { - /** - * Invoke the loader.defineClass() class method to define the class stored in clsFile, - * with the following modification: - *
    - *
  • All ASCII strings in the class file bytes that matches fromString will be replaced with toString. - * NOTE: the two strings must be the exact same length. - *
- */ - public static Class defineModifiedClass(ClassLoader loader, File clsFile, String fromString, String toString) - throws FileNotFoundException, IOException, NoSuchMethodException, IllegalAccessException, - InvocationTargetException - { - try (DataInputStream dis = new DataInputStream(new FileInputStream(clsFile))) { - byte[] buff = new byte[(int)clsFile.length()]; - dis.readFully(buff); - replace(buff, fromString, toString); - - System.out.println("Loading from: " + clsFile + " (" + buff.length + " bytes)"); - - Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", - buff.getClass(), int.class, int.class); - defineClass.setAccessible(true); - - // We directly call into ClassLoader.defineClass() to define the "Super" class. Also, - // rewrite its classfile so that it returns ___yyy___ instead of ___xxx___. Changing the - // classfile will guarantee that this class will NOT be loaded from the CDS archive. - Class cls = (Class)defineClass.invoke(loader, buff, new Integer(0), new Integer(buff.length)); - System.out.println("Loaded : " + cls); - - return cls; - } - } - - /** - * @return the number of occurrences of the from string that - * have been replaced. - */ - public static int replace(byte buff[], String from, String to) { - if (to.length() != from.length()) { - throw new RuntimeException("bad strings"); - } - byte f[] = asciibytes(from); - byte t[] = asciibytes(to); - byte f0 = f[0]; - - int numReplaced = 0; - int max = buff.length - f.length; - for (int i=0; i + *
  • All ASCII strings in the class file bytes that matches fromString will be replaced with toString. + * NOTE: the two strings must be the exact same length. + * + */ + public static Class defineModifiedClass(ClassLoader loader, File clsFile, String fromString, String toString) + throws FileNotFoundException, IOException, NoSuchMethodException, IllegalAccessException, + InvocationTargetException + { + try (DataInputStream dis = new DataInputStream(new FileInputStream(clsFile))) { + byte[] buff = new byte[(int)clsFile.length()]; + dis.readFully(buff); + replace(buff, fromString, toString); + + System.out.println("Loading from: " + clsFile + " (" + buff.length + " bytes)"); + + Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", + buff.getClass(), int.class, int.class); + defineClass.setAccessible(true); + + // We directly call into ClassLoader.defineClass() to define the "Super" class. Also, + // rewrite its classfile so that it returns ___yyy___ instead of ___xxx___. Changing the + // classfile will guarantee that this class will NOT be loaded from the CDS archive. + Class cls = (Class)defineClass.invoke(loader, buff, new Integer(0), new Integer(buff.length)); + System.out.println("Loaded : " + cls); + + return cls; + } + } + + /** + * @return the number of occurrences of the from string that + * have been replaced. + */ + public static int replace(byte buff[], String from, String to) { + if (to.length() != from.length()) { + throw new RuntimeException("bad strings"); + } + byte f[] = asciibytes(from); + byte t[] = asciibytes(to); + byte f0 = f[0]; + + int numReplaced = 0; + int max = buff.length - f.length; + for (int i=0; i