8188791: Move AppCDS from closed repo to open repo
authoriklam
Mon, 27 Nov 2017 20:21:34 -0800
changeset 48138 78b2ecdd3c4b
parent 48137 0afc5f9eafef
child 48139 111834dd10dd
8188791: Move AppCDS from closed repo to open repo Reviewed-by: dsamersoff, simonis, minqi Contributed-by: jiangli.zhou@oracle.com, mikhailo.seledtsov@oracle.com, calvin.cheung@oracle.com
src/hotspot/share/classfile/classListParser.cpp
src/hotspot/share/classfile/classListParser.hpp
src/hotspot/share/classfile/classLoaderExt.cpp
src/hotspot/share/classfile/classLoaderExt.hpp
src/hotspot/share/classfile/sharedClassUtil.cpp
src/hotspot/share/classfile/sharedClassUtil.hpp
src/hotspot/share/classfile/systemDictionary.cpp
src/hotspot/share/classfile/systemDictionaryShared.cpp
src/hotspot/share/classfile/systemDictionaryShared.hpp
src/hotspot/share/classfile/systemDictionary_ext.hpp
src/hotspot/share/classfile/vmSymbols.hpp
src/hotspot/share/classfile/vmSymbols_ext.hpp
src/hotspot/share/prims/cdsoffsets.cpp
src/hotspot/share/prims/cdsoffsets.hpp
src/hotspot/share/prims/whitebox.cpp
src/hotspot/share/runtime/arguments.cpp
src/hotspot/share/runtime/arguments_ext.hpp
src/hotspot/share/runtime/globals.hpp
test/hotspot/jtreg/TEST.groups
test/hotspot/jtreg/runtime/appcds/AppCDSOptions.java
test/hotspot/jtreg/runtime/appcds/AppendClasspath.java
test/hotspot/jtreg/runtime/appcds/BootClassPathMismatch.java
test/hotspot/jtreg/runtime/appcds/CaseSensitiveClassPath.java
test/hotspot/jtreg/runtime/appcds/ClassLoaderTest.java
test/hotspot/jtreg/runtime/appcds/ClassPathAttr.java
test/hotspot/jtreg/runtime/appcds/CommandLineFlagCombo.java
test/hotspot/jtreg/runtime/appcds/CommandLineFlagComboNegative.java
test/hotspot/jtreg/runtime/appcds/CompilerUtils.java
test/hotspot/jtreg/runtime/appcds/DumpClassList.java
test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_1.txt
test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_2.txt
test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_3.txt
test/hotspot/jtreg/runtime/appcds/ExtraSymbols.java
test/hotspot/jtreg/runtime/appcds/ExtraSymbols.symbols.txt
test/hotspot/jtreg/runtime/appcds/FieldAnnotationsTest.java
test/hotspot/jtreg/runtime/appcds/FreeUnusedMetadata.java
test/hotspot/jtreg/runtime/appcds/HelloExtTest.java
test/hotspot/jtreg/runtime/appcds/HelloTest.java
test/hotspot/jtreg/runtime/appcds/IgnoreEmptyClassPaths.java
test/hotspot/jtreg/runtime/appcds/JarBuilder.java
test/hotspot/jtreg/runtime/appcds/JvmtiAddPath.java
test/hotspot/jtreg/runtime/appcds/MismatchedUseAppCDS.java
test/hotspot/jtreg/runtime/appcds/MissingSuperTest.java
test/hotspot/jtreg/runtime/appcds/MultiProcessSharing.java
test/hotspot/jtreg/runtime/appcds/MultiReleaseJars.java
test/hotspot/jtreg/runtime/appcds/OldClassTest.java
test/hotspot/jtreg/runtime/appcds/PackageSealing.java
test/hotspot/jtreg/runtime/appcds/ParallelLoad2.java
test/hotspot/jtreg/runtime/appcds/ParallelLoadTest.java
test/hotspot/jtreg/runtime/appcds/PrintSharedArchiveAndExit.java
test/hotspot/jtreg/runtime/appcds/ProhibitedPackage.java
test/hotspot/jtreg/runtime/appcds/ProtectionDomain.java
test/hotspot/jtreg/runtime/appcds/RewriteBytecodesTest.java
test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
test/hotspot/jtreg/runtime/appcds/SharedArchiveFile.java
test/hotspot/jtreg/runtime/appcds/SharedBaseAddress.java
test/hotspot/jtreg/runtime/appcds/SharedPackages.java
test/hotspot/jtreg/runtime/appcds/SignedJar.java
test/hotspot/jtreg/runtime/appcds/SpecifySysLoaderProp.java
test/hotspot/jtreg/runtime/appcds/TestCommon.java
test/hotspot/jtreg/runtime/appcds/TraceLongClasspath.java
test/hotspot/jtreg/runtime/appcds/UseAppCDS.java
test/hotspot/jtreg/runtime/appcds/UseAppCDS_Test.java
test/hotspot/jtreg/runtime/appcds/VerifierTest.java
test/hotspot/jtreg/runtime/appcds/VerifierTest_0.java
test/hotspot/jtreg/runtime/appcds/VerifierTest_1A.java
test/hotspot/jtreg/runtime/appcds/VerifierTest_1B.java
test/hotspot/jtreg/runtime/appcds/VerifierTest_2.java
test/hotspot/jtreg/runtime/appcds/WideIloadTest.java
test/hotspot/jtreg/runtime/appcds/WrongClasspath.java
test/hotspot/jtreg/runtime/appcds/XShareAutoWithChangedJar.java
test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferences.java
test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferencesApp.java
test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.config.txt
test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.java
test/hotspot/jtreg/runtime/appcds/cacheObject/GCStress.config.txt
test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressApp.java
test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressTest.java
test/hotspot/jtreg/runtime/appcds/cacheObject/InstrumentationAgent.mf
test/hotspot/jtreg/runtime/appcds/cacheObject/MyException.java
test/hotspot/jtreg/runtime/appcds/cacheObject/MyOuter.java
test/hotspot/jtreg/runtime/appcds/cacheObject/OpenArchiveRegion.java
test/hotspot/jtreg/runtime/appcds/cacheObject/RangeNotWithinHeap.java
test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassApp.java
test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassTest.java
test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatA.java
test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatB.java
test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatBase.java
test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatC.java
test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatD.java
test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatE.java
test/hotspot/jtreg/runtime/appcds/customLoader/CustomLoaderApp.java
test/hotspot/jtreg/runtime/appcds/customLoader/HelloCustom.java
test/hotspot/jtreg/runtime/appcds/customLoader/LoaderSegregationTest.java
test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestBase.java
test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestMultiFP.java
test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestSingleFP.java
test/hotspot/jtreg/runtime/appcds/customLoader/ProhibitedPackageNamesTest.java
test/hotspot/jtreg/runtime/appcds/customLoader/ProtectionDomain.java
test/hotspot/jtreg/runtime/appcds/customLoader/SameNameInTwoLoadersTest.java
test/hotspot/jtreg/runtime/appcds/customLoader/UnintendedLoadersTest.java
test/hotspot/jtreg/runtime/appcds/customLoader/UnloadUnregisteredLoaderTest.java
test/hotspot/jtreg/runtime/appcds/customLoader/UnsupportedPlatforms.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomInterface2_ia.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomInterface2_ib.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee2.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee3.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee3Child.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/Hello.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/InProhibitedPkg.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/LoaderAPI.mf
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/LoaderSegregation.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/OnlyBuiltin.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/OnlyUnregistered.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/ProtDomain.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/SameNameUnrelatedLoaders.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/SimpleHello.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/UnintendedLoaders.java
test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/UnloadUnregisteredLoader.java
test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTest.java
test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTestHelper.java
test/hotspot/jtreg/runtime/appcds/javaldr/CheckAnonymousClass.java
test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDump.java
test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDumpTransformer.java
test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDumpTransformer.mf
test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDump.java
test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDumpWb.java
test/hotspot/jtreg/runtime/appcds/jigsaw/CheckUnsupportedDumpingOptions.java
test/hotspot/jtreg/runtime/appcds/jigsaw/JigsawOptionsCombo.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/AppClassInCP.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/CustomPackage.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/MismatchedPatchModule.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchDir.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchJavaBase.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchMain.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/Simple.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/SubClassOfPatchedClass.java
test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/TwoJars.java
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/BootAppendTests.java
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/ClassPathTests.java
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/EmptyClassInBootClassPath.java
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/com/sun/tools/javac/Main.jasm
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/com/sun/tools/javac/Main2.jasm
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/javax/activation/UnsupportedDataTypeException2.jasm
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/jdk/test/Main.java
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/sun/nio/cs/ext/MyClass.java
test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/sun/nio/cs/ext1/MyClass.java
test/hotspot/jtreg/runtime/appcds/jigsaw/limitmods/LimitModsHelper.java
test/hotspot/jtreg/runtime/appcds/jigsaw/limitmods/LimitModsTests.java
test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/OverrideTests.java
test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/java.activation/javax/activation/UnsupportedDataTypeException.java
test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/java.activation/module-info.java
test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/jdk.compiler/com/sun/tools/javac/Main.java
test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/jdk.compiler/module-info.java
test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/test/jdk/test/Main.java
test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/test/module-info.java
test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHook.java
test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHookTest.java
test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationAgent.mf
test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationApp.java
test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationClassFileTransformer.java
test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationRegisterClassFileTransformer.java
test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationTest.java
test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelClassesTransform.java
test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelLoadAndTransformTest.java
test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformInterfaceImplementorAppCDS.java
test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformRelatedClassesAppCDS.java
test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformSuperSubAppCDS.java
test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasic.java
test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasicTest.java
test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_Shared.java
test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_SharedHelper.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/ExerciseGC.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/ExtraSharedInput.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/FlagCombo.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloString.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloStringGC.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloStringPlus.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/InternSharedString.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/InternStringTest.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/InvalidFileFormat.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/LargePages.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/LockSharedStrings.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/LockStringTest.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/LockStringValueTest.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasicPlus.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsStress.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsUtils.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWb.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWbTest.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/SysDictCrash.java
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/CorruptDataLine.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidDataType.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidHeader.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidString.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidStringFormat.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidSymbol.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidSymbolFormat.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidVersion.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/OverflowPrefix.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/TruncatedString.txt
test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/UnrecognizedPrefix.txt
test/hotspot/jtreg/runtime/appcds/test-classes/ArrayListTest.java
test/hotspot/jtreg/runtime/appcds/test-classes/BootClassPathAppendHelper.java
test/hotspot/jtreg/runtime/appcds/test-classes/C1.java
test/hotspot/jtreg/runtime/appcds/test-classes/C2.java
test/hotspot/jtreg/runtime/appcds/test-classes/CheckIfShared.java
test/hotspot/jtreg/runtime/appcds/test-classes/Child.java
test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr1.java
test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr2.java
test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr3.java
test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr4.java
test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr5.java
test/hotspot/jtreg/runtime/appcds/test-classes/DummyClassHelper.java
test/hotspot/jtreg/runtime/appcds/test-classes/EmptyClassHelper.java
test/hotspot/jtreg/runtime/appcds/test-classes/FieldAnnotationsApp.java
test/hotspot/jtreg/runtime/appcds/test-classes/ForNameTest.java
test/hotspot/jtreg/runtime/appcds/test-classes/Greet.java
test/hotspot/jtreg/runtime/appcds/test-classes/Hello.java
test/hotspot/jtreg/runtime/appcds/test-classes/HelloExt.java
test/hotspot/jtreg/runtime/appcds/test-classes/HelloExtApp.java
test/hotspot/jtreg/runtime/appcds/test-classes/HelloExtExt.java
test/hotspot/jtreg/runtime/appcds/test-classes/HelloMore.java
test/hotspot/jtreg/runtime/appcds/test-classes/HelloWB.java
test/hotspot/jtreg/runtime/appcds/test-classes/Hi.java
test/hotspot/jtreg/runtime/appcds/test-classes/Iloadw.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/IloadwMain.java
test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassPackage.java
test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassProtDomain.java
test/hotspot/jtreg/runtime/appcds/test-classes/JvmtiApp.java
test/hotspot/jtreg/runtime/appcds/test-classes/MethodNoReturn.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/MissingSuper.java
test/hotspot/jtreg/runtime/appcds/test-classes/MultiProcClass.java
test/hotspot/jtreg/runtime/appcds/test-classes/MyAnnotation.java
test/hotspot/jtreg/runtime/appcds/test-classes/PackageSealingTest.java
test/hotspot/jtreg/runtime/appcds/test-classes/PackageTest.java
test/hotspot/jtreg/runtime/appcds/test-classes/ParallelClasses.java
test/hotspot/jtreg/runtime/appcds/test-classes/ParallelLoad.java
test/hotspot/jtreg/runtime/appcds/test-classes/Prohibited.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/ProhibitedHelper.java
test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomain.java
test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomainB.java
test/hotspot/jtreg/runtime/appcds/test-classes/ReportMyLoader.java
test/hotspot/jtreg/runtime/appcds/test-classes/RewriteBytecodes.java
test/hotspot/jtreg/runtime/appcds/test-classes/Super.java
test/hotspot/jtreg/runtime/appcds/test-classes/TestClassLoader.java
test/hotspot/jtreg/runtime/appcds/test-classes/TrySwitchMyLoader.java
test/hotspot/jtreg/runtime/appcds/test-classes/Util.java
test/hotspot/jtreg/runtime/appcds/test-classes/VerifierTest0.java
test/hotspot/jtreg/runtime/appcds/test-classes/com/sun/tools/javac/Main.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/cpattr1.mf
test/hotspot/jtreg/runtime/appcds/test-classes/cpattr1_long.mf
test/hotspot/jtreg/runtime/appcds/test-classes/cpattr2.mf
test/hotspot/jtreg/runtime/appcds/test-classes/cpattr3.mf
test/hotspot/jtreg/runtime/appcds/test-classes/cpattr4.mf
test/hotspot/jtreg/runtime/appcds/test-classes/cpattr5_extra_long.mf
test/hotspot/jtreg/runtime/appcds/test-classes/java/net/HttpCookie.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/javax/activation/MimeType.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/javax/transaction/InvalidTransactionException.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/jdk/dynalink/DynamicLinker.jasm
test/hotspot/jtreg/runtime/appcds/test-classes/package_seal.mf
--- a/src/hotspot/share/classfile/classListParser.cpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/classListParser.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -23,13 +23,32 @@
  */
 
 #include "precompiled.hpp"
+#include "jvm.h"
+#include "jimage.hpp"
 #include "classfile/classListParser.hpp"
-#include "runtime/os.hpp"
-#include "runtime/java.hpp"
+#include "classfile/classLoaderExt.hpp"
+#include "classfile/sharedClassUtil.hpp"
+#include "classfile/symbolTable.hpp"
+#include "classfile/systemDictionary.hpp"
+#include "classfile/systemDictionaryShared.hpp"
+#include "memory/metaspaceShared.hpp"
+#include "memory/resourceArea.hpp"
+#include "runtime/fieldType.hpp"
+#include "runtime/javaCalls.hpp"
+#include "utilities/defaultStream.hpp"
+#include "utilities/hashtable.inline.hpp"
+#include "utilities/macros.hpp"
+
+ClassListParser* ClassListParser::_instance = NULL;
 
 ClassListParser::ClassListParser(const char* file) {
+  assert(_instance == NULL, "must be singleton");
+  _instance = this;
   _classlist_file = file;
   _file = fopen(file, "r");
+  _line_no = 0;
+  _interfaces = new (ResourceObj::C_HEAP, mtClass) GrowableArray<int>(10, true);
+
   if (_file == NULL) {
     char errmsg[JVM_MAXPATHLEN];
     os::lasterror(errmsg, JVM_MAXPATHLEN);
@@ -41,6 +60,7 @@
   if (_file) {
     fclose(_file);
   }
+  _instance = NULL;
 }
 
 bool ClassListParser::parse_one_line() {
@@ -48,10 +68,10 @@
     if (fgets(_line, sizeof(_line), _file) == NULL) {
       return false;
     }
-    int line_len = (int)strlen(_line);
-    if (line_len > _max_allowed_line_len) {
-      tty->print_cr("input line too long (must be no longer than %d chars)", _max_allowed_line_len);
-      vm_exit_during_initialization("Loading classlist failed");
+    ++ _line_no;
+    _line_len = (int)strlen(_line);
+    if (_line_len > _max_allowed_line_len) {
+      error("input line too long (must be no longer than %d chars)", _max_allowed_line_len);
     }
     if (*_line == '#') { // comment
       continue;
@@ -59,8 +79,378 @@
     break;
   }
 
-  // Remove trailing \r\n
-  _line[strcspn(_line, "\r\n")] = 0;
+  _id = _unspecified;
+  _super = _unspecified;
+  _interfaces->clear();
+  _source = NULL;
+  _interfaces_specified = false;
+
+  {
+    int len = (int)strlen(_line);
+    int i;
+    // Replace \t\r\n with ' '
+    for (i=0; i<len; i++) {
+      if (_line[i] == '\t' || _line[i] == '\r' || _line[i] == '\n') {
+        _line[i] = ' ';
+      }
+    }
+
+    // Remove trailing newline/space
+    while (len > 0) {
+      if (_line[len-1] == ' ') {
+        _line[len-1] = '\0';
+        len --;
+      } else {
+        break;
+      }
+    }
+    _line_len = len;
+    _class_name = _line;
+  }
+
+  if ((_token = strchr(_line, ' ')) == NULL) {
+    // No optional arguments are specified.
+    return true;
+  }
+
+  // Mark the end of the name, and go to the next input char
+  *_token++ = '\0';
+
+  while (*_token) {
+    skip_whitespaces();
+
+    if (parse_int_option("id:", &_id)) {
+      continue;
+    } else if (parse_int_option("super:", &_super)) {
+      check_already_loaded("Super class", _super);
+      continue;
+    } else if (skip_token("interfaces:")) {
+      int i;
+      while (try_parse_int(&i)) {
+        check_already_loaded("Interface", i);
+        _interfaces->append(i);
+      }
+    } else if (skip_token("source:")) {
+      skip_whitespaces();
+      _source = _token;
+      char* s = strchr(_token, ' ');
+      if (s == NULL) {
+        break; // end of input line
+      } else {
+        *s = '\0'; // mark the end of _source
+        _token = s+1;
+      }
+    } else {
+      error("Unknown input");
+    }
+  }
+
+  // if src is specified
+  //     id super interfaces must all be specified
+  //     loader may be specified
+  // else
+  //     # the class is loaded from classpath
+  //     id may be specified
+  //     super, interfaces, loader must not be specified
   return true;
 }
 
+void ClassListParser::skip_whitespaces() {
+  while (*_token == ' ' || *_token == '\t') {
+    _token ++;
+  }
+}
+
+void ClassListParser::skip_non_whitespaces() {
+  while (*_token && *_token != ' ' && *_token != '\t') {
+    _token ++;
+  }
+}
+
+void ClassListParser::parse_int(int* value) {
+  skip_whitespaces();
+  if (sscanf(_token, "%i", value) == 1) {
+    skip_non_whitespaces();
+    if (*value < 0) {
+      error("Error: negative integers not allowed (%d)", *value);
+    }
+  } else {
+    error("Error: expected integer");
+  }
+}
+
+bool ClassListParser::try_parse_int(int* value) {
+  skip_whitespaces();
+  if (sscanf(_token, "%i", value) == 1) {
+    skip_non_whitespaces();
+    return true;
+  }
+  return false;
+}
+
+bool ClassListParser::skip_token(const char* option_name) {
+  size_t len = strlen(option_name);
+  if (strncmp(_token, option_name, len) == 0) {
+    _token += len;
+    return true;
+  } else {
+    return false;
+  }
+}
+
+bool ClassListParser::parse_int_option(const char* option_name, int* value) {
+  if (skip_token(option_name)) {
+    if (*value != _unspecified) {
+      error("%s specified twice", option_name);
+    } else {
+      parse_int(value);
+      return true;
+    }
+  }
+  return false;
+}
+
+void ClassListParser::print_specified_interfaces() {
+  const int n = _interfaces->length();
+  jio_fprintf(defaultStream::error_stream(), "Currently specified interfaces[%d] = {\n", n);
+  for (int i=0; i<n; i++) {
+    InstanceKlass* k = lookup_class_by_id(_interfaces->at(i));
+    jio_fprintf(defaultStream::error_stream(), "  %4d = %s\n", _interfaces->at(i), k->name()->as_klass_external_name());
+  }
+  jio_fprintf(defaultStream::error_stream(), "}\n");
+}
+
+void ClassListParser::print_actual_interfaces(InstanceKlass *ik) {
+  int n = ik->local_interfaces()->length();
+  jio_fprintf(defaultStream::error_stream(), "Actual interfaces[%d] = {\n", n);
+  for (int i = 0; i < n; i++) {
+    InstanceKlass* e = InstanceKlass::cast(ik->local_interfaces()->at(i));
+    jio_fprintf(defaultStream::error_stream(), "  %s\n", e->name()->as_klass_external_name());
+  }
+  jio_fprintf(defaultStream::error_stream(), "}\n");
+}
+
+void ClassListParser::error(const char *msg, ...) {
+  va_list ap;
+  va_start(ap, msg);
+  int error_index = _token - _line;
+  if (error_index >= _line_len) {
+    error_index = _line_len - 1;
+  }
+  if (error_index < 0) {
+    error_index = 0;
+  }
+
+  jio_fprintf(defaultStream::error_stream(),
+              "An error has occurred while processing class list file %s %d:%d.\n",
+              _classlist_file, _line_no, (error_index + 1));
+  jio_vfprintf(defaultStream::error_stream(), msg, ap);
+
+  if (_line_len <= 0) {
+    jio_fprintf(defaultStream::error_stream(), "\n");
+  } else {
+    jio_fprintf(defaultStream::error_stream(), ":\n");
+    for (int i=0; i<_line_len; i++) {
+      char c = _line[i];
+      if (c == '\0') {
+        jio_fprintf(defaultStream::error_stream(), "%s", " ");
+      } else {
+        jio_fprintf(defaultStream::error_stream(), "%c", c);
+      }
+    }
+    jio_fprintf(defaultStream::error_stream(), "\n");
+    for (int i=0; i<error_index; i++) {
+      jio_fprintf(defaultStream::error_stream(), "%s", " ");
+    }
+    jio_fprintf(defaultStream::error_stream(), "^\n");
+  }
+
+  vm_exit_during_initialization("class list format error.", NULL);
+  va_end(ap);
+}
+
+// This function is used for loading classes for customized class loaders
+// during archive dumping.
+InstanceKlass* ClassListParser::load_class_from_source(Symbol* class_name, TRAPS) {
+#if !((defined(LINUX) && defined(X86) && defined(_LP64)) || \
+      (defined(SOLARIS) && defined(_LP64)))
+  // The only supported platforms are: (1) Linux/AMD64; (2) Solaris/64-bit
+  error("AppCDS custom class loaders not supported on this platform");
+#endif
+
+  assert(UseAppCDS, "must be");
+  if (!is_super_specified()) {
+    error("If source location is specified, super class must be also specified");
+  }
+  if (!is_id_specified()) {
+    error("If source location is specified, id must be also specified");
+  }
+  InstanceKlass* k = ClassLoaderExt::load_class(class_name, _source, THREAD);
+
+  if (strncmp(_class_name, "java/", 5) == 0) {
+    log_info(cds)("Prohibited package for non-bootstrap classes: %s.class from %s",
+          _class_name, _source);
+    return NULL;
+  }
+
+  if (k != NULL) {
+    if (k->local_interfaces()->length() != _interfaces->length()) {
+      print_specified_interfaces();
+      print_actual_interfaces(k);
+      error("The number of interfaces (%d) specified in class list does not match the class file (%d)",
+            _interfaces->length(), k->local_interfaces()->length());
+    }
+
+    if (!SystemDictionaryShared::add_non_builtin_klass(class_name, ClassLoaderData::the_null_class_loader_data(),
+                                                       k, THREAD)) {
+      error("Duplicated class %s", _class_name);
+    }
+
+    // This tells JVM_FindLoadedClass to not find this class.
+    k->set_shared_classpath_index(UNREGISTERED_INDEX);
+  }
+
+  return k;
+}
+
+InstanceKlass* ClassListParser::load_current_class(TRAPS) {
+  TempNewSymbol class_name_symbol = SymbolTable::new_symbol(_class_name, THREAD);
+  guarantee(!HAS_PENDING_EXCEPTION, "Exception creating a symbol.");
+
+  InstanceKlass *klass = NULL;
+  if (!is_loading_from_source()) {
+    if (is_super_specified()) {
+      error("If source location is not specified, super class must not be specified");
+    }
+    if (are_interfaces_specified()) {
+      error("If source location is not specified, interface(s) must not be specified");
+    }
+
+    bool non_array = !FieldType::is_array(class_name_symbol);
+
+    Handle s = java_lang_String::create_from_symbol(class_name_symbol, CHECK_0);
+    // Translate to external class name format, i.e., convert '/' chars to '.'
+    Handle string = java_lang_String::externalize_classname(s, CHECK_0);
+    JavaValue result(T_OBJECT);
+    InstanceKlass* spec_klass =  non_array ?
+      SystemDictionary::ClassLoader_klass() : SystemDictionary::Class_klass();
+    Symbol* method_name = non_array ?
+      vmSymbols::loadClass_name() : vmSymbols::forName_name();
+    Handle loader = Handle(THREAD, SystemDictionary::java_system_loader());
+
+    if (non_array) {
+      JavaCalls::call_virtual(&result,
+                              loader, //SystemDictionary::java_system_loader(),
+                              spec_klass,
+                              method_name, //vmSymbols::loadClass_name(),
+                              vmSymbols::string_class_signature(),
+                              string,
+                              THREAD);
+    } else {
+      JavaCalls::call_static(&result,
+                             spec_klass,
+                             method_name,
+                             vmSymbols::string_class_signature(),
+                             string,
+                             CHECK_NULL);
+    }
+    assert(result.get_type() == T_OBJECT, "just checking");
+    oop obj = (oop) result.get_jobject();
+    if (!HAS_PENDING_EXCEPTION && (obj != NULL)) {
+      if (non_array) {
+        klass = InstanceKlass::cast(java_lang_Class::as_Klass(obj));
+      } else {
+        klass = static_cast<InstanceKlass*>(java_lang_Class::array_klass_acquire(obj));
+      }
+    } else { // load classes in bootclasspath/a
+      if (HAS_PENDING_EXCEPTION) {
+        CLEAR_PENDING_EXCEPTION;
+      }
+
+      if (non_array) {
+        Klass* k = SystemDictionary::resolve_or_null(class_name_symbol, CHECK_NULL);
+        if (k != NULL) {
+          klass = InstanceKlass::cast(k);
+        } else {
+          if (!HAS_PENDING_EXCEPTION) {
+            THROW_NULL(vmSymbols::java_lang_ClassNotFoundException());
+          }
+        }
+      }
+    }
+  } else {
+    // If "source:" tag is specified, all super class and super interfaces must be specified in the
+    // class list file.
+    if (UseAppCDS) {
+      klass = load_class_from_source(class_name_symbol, CHECK_NULL);
+    }
+  }
+
+  if (klass != NULL && is_id_specified()) {
+    int id = this->id();
+    SystemDictionaryShared::update_shared_entry(klass, id);
+    InstanceKlass* old = table()->lookup(id);
+    if (old != NULL && old != klass) {
+      error("Duplicated ID %d for class %s", id, _class_name);
+    }
+    table()->add(id, klass);
+  }
+
+  return klass;
+}
+
+bool ClassListParser::is_loading_from_source() {
+  return (_source != NULL);
+}
+
+InstanceKlass* ClassListParser::lookup_class_by_id(int id) {
+  InstanceKlass* klass = table()->lookup(id);
+  if (klass == NULL) {
+    error("Class ID %d has not been defined", id);
+  }
+  return klass;
+}
+
+
+InstanceKlass* ClassListParser::lookup_super_for_current_class(Symbol* super_name) {
+  if (!is_loading_from_source()) {
+    return NULL;
+  }
+
+  InstanceKlass* k = lookup_class_by_id(super());
+  if (super_name != k->name()) {
+    error("The specified super class %s (id %d) does not match actual super class %s",
+          k->name()->as_klass_external_name(), super(),
+          super_name->as_klass_external_name());
+  }
+  return k;
+}
+
+InstanceKlass* ClassListParser::lookup_interface_for_current_class(Symbol* interface_name) {
+  if (!is_loading_from_source()) {
+    return NULL;
+  }
+
+  const int n = _interfaces->length();
+  if (n == 0) {
+    error("Class %s implements the interface %s, but no interface has been specified in the input line",
+          _class_name, interface_name->as_klass_external_name());
+    ShouldNotReachHere();
+  }
+
+  int i;
+  for (i=0; i<n; i++) {
+    InstanceKlass* k = lookup_class_by_id(_interfaces->at(i));
+    if (interface_name == k->name()) {
+      return k;
+    }
+  }
+
+  // interface_name is not specified by the "interfaces:" keyword.
+  print_specified_interfaces();
+  error("The interface %s implemented by class %s does not match any of the specified interface IDs",
+        interface_name->as_klass_external_name(), _class_name);
+  ShouldNotReachHere();
+  return NULL;
+}
+
--- a/src/hotspot/share/classfile/classListParser.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/classListParser.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -27,30 +27,122 @@
 
 #include "utilities/exceptions.hpp"
 #include "utilities/globalDefinitions.hpp"
+#include "utilities/hashtable.hpp"
+
+class CDSClassInfo;
+
+// Look up from ID -> InstanceKlass*
+class ID2KlassTable : public Hashtable<InstanceKlass*, mtClass> {
+public:
+  ID2KlassTable() : Hashtable<InstanceKlass*, mtClass>(1987, sizeof(HashtableEntry<InstanceKlass*, mtClass>)) { }
+  void add(int id, InstanceKlass* klass) {
+    unsigned int hash = (unsigned int)id;
+    HashtableEntry<InstanceKlass*, mtClass>* entry = new_entry(hash, klass);
+    add_entry(hash_to_index(hash), entry);
+  }
+
+  InstanceKlass* lookup(int id) {
+    unsigned int hash = (unsigned int)id;
+    int index = hash_to_index(id);
+    for (HashtableEntry<InstanceKlass*, mtClass>* e = bucket(index); e != NULL; e = e->next()) {
+      if (e->hash() == hash) {
+        return e->literal();
+      }
+    }
+    return NULL;
+  }
+};
 
 class ClassListParser : public StackObj {
   enum {
+    _unspecified      = -999,
+
     // Max number of bytes allowed per line in the classlist.
-    // Theoretically Java class names could be 65535 bytes in length. In reality,
+    // Theoretically Java class names could be 65535 bytes in length. Also, an input line
+    // could have a very long path name up to JVM_MAXPATHLEN bytes in length. In reality,
     // 4K bytes is more than enough.
     _max_allowed_line_len = 4096,
     _line_buf_extra       = 10, // for detecting input too long
     _line_buf_size        = _max_allowed_line_len + _line_buf_extra
   };
 
+  static ClassListParser* _instance; // the singleton.
   const char* _classlist_file;
   FILE* _file;
-  char  _line[_line_buf_size];  // The buffer that holds the current line.
+
+  ID2KlassTable _id2klass_table;
 
+  // The following field contains information from the *current* line being
+  // parsed.
+  char                _line[_line_buf_size];  // The buffer that holds the current line. Some characters in
+                                              // the buffer may be overwritten by '\0' during parsing.
+  int                 _line_len;              // Original length of the input line.
+  int                 _line_no;               // Line number for current line being parsed
+  const char*         _class_name;
+  int                 _id;
+  int                 _super;
+  GrowableArray<int>* _interfaces;
+  bool                _interfaces_specified;
+  const char*         _source;
+
+  bool parse_int_option(const char* option_name, int* value);
+  InstanceKlass* load_class_from_source(Symbol* class_name, TRAPS);
+  ID2KlassTable *table() {
+    return &_id2klass_table;
+  }
+  InstanceKlass* lookup_class_by_id(int id);
+  void print_specified_interfaces();
+  void print_actual_interfaces(InstanceKlass *ik);
 public:
   ClassListParser(const char* file);
   ~ClassListParser();
+
+  static ClassListParser* instance() {
+    return _instance;
+  }
   bool parse_one_line();
+  char* _token;
+  void error(const char* msg, ...);
+  void parse_int(int* value);
+  bool try_parse_int(int* value);
+  bool skip_token(const char* option_name);
+  void skip_whitespaces();
+  void skip_non_whitespaces();
+
+  bool is_id_specified() {
+    return _id != _unspecified;
+  }
+  bool is_super_specified() {
+    return _super != _unspecified;
+  }
+  bool are_interfaces_specified() {
+    return _interfaces->length() > 0;
+  }
+  int id() {
+    assert(is_id_specified(), "do not query unspecified id");
+    return _id;
+  }
+  int super() {
+    assert(is_super_specified(), "do not query unspecified super");
+    return _super;
+  }
+  void check_already_loaded(const char* which, int id) {
+    if (_id2klass_table.lookup(id) == NULL) {
+      error("%s id %d is not yet loaded", which, id);
+    }
+  }
 
   const char* current_class_name() {
-    return _line;
+    return _class_name;
   }
+
+  InstanceKlass* load_current_class(TRAPS);
+
+  bool is_loading_from_source();
+
+  // Look up the super or interface of the current class being loaded
+  // (in this->load_current_class()).
+  InstanceKlass* lookup_super_for_current_class(Symbol* super_name);
+  InstanceKlass* lookup_interface_for_current_class(Symbol* interface_name);
 };
-
-
-#endif // SHARE_VM_MEMORY_CLASSLISTPARSER_HPP
+#endif
--- a/src/hotspot/share/classfile/classLoaderExt.cpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/classLoaderExt.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -23,14 +23,329 @@
  */
 
 #include "precompiled.hpp"
+#include "classfile/classFileParser.hpp"
+#include "classfile/classFileStream.hpp"
 #include "classfile/classListParser.hpp"
+#include "classfile/classLoader.hpp"
 #include "classfile/classLoaderExt.hpp"
-#include "classfile/symbolTable.hpp"
-#include "classfile/systemDictionary.hpp"
+#include "classfile/classLoaderData.inline.hpp"
+#include "classfile/klassFactory.hpp"
+#include "classfile/sharedClassUtil.hpp"
+#include "classfile/sharedPathsMiscInfo.hpp"
+#include "classfile/systemDictionaryShared.hpp"
+#include "classfile/vmSymbols.hpp"
+#include "memory/allocation.inline.hpp"
+#include "memory/filemap.hpp"
+#include "memory/resourceArea.hpp"
+#include "oops/instanceKlass.hpp"
+#include "oops/oop.inline.hpp"
+#include "oops/symbol.hpp"
+#include "runtime/arguments.hpp"
+#include "runtime/java.hpp"
+#include "runtime/javaCalls.hpp"
+#include "runtime/os.hpp"
+#include "services/threadService.hpp"
+#include "utilities/stringUtils.hpp"
+
+jshort ClassLoaderExt::_app_paths_start_index = ClassLoaderExt::max_classpath_index;
+bool ClassLoaderExt::_has_app_classes = false;
+bool ClassLoaderExt::_has_platform_classes = false;
+
+void ClassLoaderExt::setup_app_search_path() {
+  assert(DumpSharedSpaces, "this function is only used with -Xshare:dump and -XX:+UseAppCDS");
+  _app_paths_start_index = ClassLoader::num_boot_classpath_entries();
+  char* app_class_path = os::strdup(Arguments::get_appclasspath());
+
+  if (strcmp(app_class_path, ".") == 0) {
+    // This doesn't make any sense, even for AppCDS, so let's skip it. We
+    // don't want to throw an error here because -cp "." is usually assigned
+    // by the launcher when classpath is not specified.
+    trace_class_path("app loader class path (skipped)=", app_class_path);
+  } else {
+    trace_class_path("app loader class path=", app_class_path);
+    shared_paths_misc_info()->add_app_classpath(app_class_path);
+    ClassLoader::setup_app_search_path(app_class_path);
+  }
+}
+
+char* ClassLoaderExt::read_manifest(ClassPathEntry* entry, jint *manifest_size, bool clean_text, TRAPS) {
+  const char* name = "META-INF/MANIFEST.MF";
+  char* manifest;
+  jint size;
+
+  assert(entry->is_jar_file(), "must be");
+  manifest = (char*) ((ClassPathZipEntry*)entry )->open_entry(name, &size, true, CHECK_NULL);
+
+  if (manifest == NULL) { // No Manifest
+    *manifest_size = 0;
+    return NULL;
+  }
 
 
+  if (clean_text) {
+    // See http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#JAR%20Manifest
+    // (1): replace all CR/LF and CR with LF
+    StringUtils::replace_no_expand(manifest, "\r\n", "\n");
+
+    // (2) remove all new-line continuation (remove all "\n " substrings)
+    StringUtils::replace_no_expand(manifest, "\n ", "");
+  }
+
+  *manifest_size = (jint)strlen(manifest);
+  return manifest;
+}
+
+char* ClassLoaderExt::get_class_path_attr(const char* jar_path, char* manifest, jint manifest_size) {
+  const char* tag = "Class-Path: ";
+  const int tag_len = (int)strlen(tag);
+  char* found = NULL;
+  char* line_start = manifest;
+  char* end = manifest + manifest_size;
+
+  assert(*end == 0, "must be nul-terminated");
+
+  while (line_start < end) {
+    char* line_end = strchr(line_start, '\n');
+    if (line_end == NULL) {
+      // JAR spec require the manifest file to be terminated by a new line.
+      break;
+    }
+    if (strncmp(tag, line_start, tag_len) == 0) {
+      if (found != NULL) {
+        // Same behavior as jdk/src/share/classes/java/util/jar/Attributes.java
+        // If duplicated entries are found, the last one is used.
+        tty->print_cr("Warning: Duplicate name in Manifest: %s.\n"
+                      "Ensure that the manifest does not have duplicate entries, and\n"
+                      "that blank lines separate individual sections in both your\n"
+                      "manifest and in the META-INF/MANIFEST.MF entry in the jar file:\n%s\n", tag, jar_path);
+      }
+      found = line_start + tag_len;
+      assert(found <= line_end, "sanity");
+      *line_end = '\0';
+    }
+    line_start = line_end + 1;
+  }
+  return found;
+}
+
+void ClassLoaderExt::process_jar_manifest(ClassPathEntry* entry,
+                                          bool check_for_duplicates) {
+  Thread* THREAD = Thread::current();
+  ResourceMark rm(THREAD);
+  jint manifest_size;
+  char* manifest = read_manifest(entry, &manifest_size, CHECK);
+
+  if (manifest == NULL) {
+    return;
+  }
+
+  if (strstr(manifest, "Extension-List:") != NULL) {
+    tty->print_cr("-Xshare:dump does not support Extension-List in JAR manifest: %s", entry->name());
+    vm_exit(1);
+  }
+
+  char* cp_attr = get_class_path_attr(entry->name(), manifest, manifest_size);
+
+  if (cp_attr != NULL && strlen(cp_attr) > 0) {
+    trace_class_path("found Class-Path: ", cp_attr);
+
+    char sep = os::file_separator()[0];
+    const char* dir_name = entry->name();
+    const char* dir_tail = strrchr(dir_name, sep);
+    int dir_len;
+    if (dir_tail == NULL) {
+      dir_len = 0;
+    } else {
+      dir_len = dir_tail - dir_name + 1;
+    }
+
+    // Split the cp_attr by spaces, and add each file
+    char* file_start = cp_attr;
+    char* end = file_start + strlen(file_start);
+
+    while (file_start < end) {
+      char* file_end = strchr(file_start, ' ');
+      if (file_end != NULL) {
+        *file_end = 0;
+        file_end += 1;
+      } else {
+        file_end = end;
+      }
+
+      int name_len = (int)strlen(file_start);
+      if (name_len > 0) {
+        ResourceMark rm(THREAD);
+        char* libname = NEW_RESOURCE_ARRAY(char, dir_len + name_len + 1);
+        *libname = 0;
+        strncat(libname, dir_name, dir_len);
+        strncat(libname, file_start, name_len);
+        trace_class_path("library = ", libname);
+        ClassLoader::update_class_path_entry_list(libname, true, false);
+      }
+
+      file_start = file_end;
+    }
+  }
+}
+
+void ClassLoaderExt::setup_search_paths() {
+  if (UseAppCDS) {
+    shared_paths_misc_info()->record_app_offset();
+    ClassLoaderExt::setup_app_search_path();
+  }
+}
+
+Thread* ClassLoaderExt::Context::_dump_thread = NULL;
+
+bool ClassLoaderExt::check(ClassLoaderExt::Context *context,
+                           const ClassFileStream* stream,
+                           const int classpath_index) {
+  if (stream != NULL) {
+    // Ignore any App classes from signed JAR file during CDS archiving
+    // dumping
+    if (DumpSharedSpaces &&
+        SharedClassUtil::is_classpath_entry_signed(classpath_index) &&
+        classpath_index >= _app_paths_start_index) {
+      tty->print_cr("Preload Warning: Skipping %s from signed JAR",
+                    context->class_name());
+      return false;
+    }
+    if (classpath_index >= _app_paths_start_index) {
+      _has_app_classes = true;
+      _has_platform_classes = true;
+    }
+  }
+
+  return true;
+}
+
+void ClassLoaderExt::record_result(ClassLoaderExt::Context *context,
+                                   Symbol* class_name,
+                                   const s2 classpath_index,
+                                   InstanceKlass* result,
+                                   TRAPS) {
+  assert(DumpSharedSpaces, "Sanity");
+
+  // We need to remember where the class comes from during dumping.
+  oop loader = result->class_loader();
+  s2 classloader_type = ClassLoader::BOOT_LOADER;
+  if (SystemDictionary::is_system_class_loader(loader)) {
+    classloader_type = ClassLoader::APP_LOADER;
+    ClassLoaderExt::set_has_app_classes();
+  } else if (SystemDictionary::is_platform_class_loader(loader)) {
+    classloader_type = ClassLoader::PLATFORM_LOADER;
+    ClassLoaderExt::set_has_platform_classes();
+  }
+  result->set_shared_classpath_index(classpath_index);
+  result->set_class_loader_type(classloader_type);
+}
+
+void ClassLoaderExt::finalize_shared_paths_misc_info() {
+  if (UseAppCDS) {
+    if (!_has_app_classes) {
+      shared_paths_misc_info()->pop_app();
+    }
+  }
+}
+
+// Load the class of the given name from the location given by path. The path is specified by
+// the "source:" in the class list file (see classListParser.cpp), and can be a directory or
+// a JAR file.
+InstanceKlass* ClassLoaderExt::load_class(Symbol* name, const char* path, TRAPS) {
+
+  assert(name != NULL, "invariant");
+  assert(DumpSharedSpaces && UseAppCDS, "this function is only used with -Xshare:dump and -XX:+UseAppCDS");
+  ResourceMark rm(THREAD);
+  const char* class_name = name->as_C_string();
+
+  const char* file_name = file_name_for_class_name(class_name,
+                                                   name->utf8_length());
+  assert(file_name != NULL, "invariant");
+
+  // Lookup stream for parsing .class file
+  ClassFileStream* stream = NULL;
+  ClassPathEntry* e = find_classpath_entry_from_cache(path, CHECK_NULL);
+  if (e == NULL) {
+    return NULL;
+  }
+  {
+    PerfClassTraceTime vmtimer(perf_sys_class_lookup_time(),
+                               ((JavaThread*) THREAD)->get_thread_stat()->perf_timers_addr(),
+                               PerfClassTraceTime::CLASS_LOAD);
+    stream = e->open_stream(file_name, CHECK_NULL);
+  }
+
+  if (NULL == stream) {
+    tty->print_cr("Preload Warning: Cannot find %s", class_name);
+    return NULL;
+  }
+
+  assert(stream != NULL, "invariant");
+  stream->set_verify(true);
+
+  ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
+  Handle protection_domain;
+
+  InstanceKlass* result = KlassFactory::create_from_stream(stream,
+                                                           name,
+                                                           loader_data,
+                                                           protection_domain,
+                                                           NULL, // host_klass
+                                                           NULL, // cp_patches
+                                                           THREAD);
+
+  if (HAS_PENDING_EXCEPTION) {
+    tty->print_cr("Preload Error: Failed to load %s", class_name);
+    return NULL;
+  }
+  result->set_shared_classpath_index(UNREGISTERED_INDEX);
+  SystemDictionaryShared::set_shared_class_misc_info(result, stream);
+  return result;
+}
+
+struct CachedClassPathEntry {
+  const char* _path;
+  ClassPathEntry* _entry;
+};
+
+static GrowableArray<CachedClassPathEntry>* cached_path_entries = NULL;
+
+ClassPathEntry* ClassLoaderExt::find_classpath_entry_from_cache(const char* path, TRAPS) {
+  // This is called from dump time so it's single threaded and there's no need for a lock.
+  assert(DumpSharedSpaces && UseAppCDS, "this function is only used with -Xshare:dump and -XX:+UseAppCDS");
+  if (cached_path_entries == NULL) {
+    cached_path_entries = new (ResourceObj::C_HEAP, mtClass) GrowableArray<CachedClassPathEntry>(20, /*c heap*/ true);
+  }
+  CachedClassPathEntry ccpe;
+  for (int i=0; i<cached_path_entries->length(); i++) {
+    ccpe = cached_path_entries->at(i);
+    if (strcmp(ccpe._path, path) == 0) {
+      if (i != 0) {
+        // Put recent entries at the beginning to speed up searches.
+        cached_path_entries->remove_at(i);
+        cached_path_entries->insert_before(0, ccpe);
+      }
+      return ccpe._entry;
+    }
+  }
+
+  struct stat st;
+  if (os::stat(path, &st) != 0) {
+    // File or directory not found
+    return NULL;
+  }
+  ClassPathEntry* new_entry = NULL;
+
+  new_entry = create_class_path_entry(path, &st, false, false, CHECK_NULL);
+  if (new_entry == NULL) {
+    return NULL;
+  }
+  ccpe._path = strdup(path);
+  ccpe._entry = new_entry;
+  cached_path_entries->insert_before(0, ccpe);
+  return new_entry;
+}
+
 Klass* ClassLoaderExt::load_one_class(ClassListParser* parser, TRAPS) {
-  TempNewSymbol class_name_symbol = SymbolTable::new_symbol(parser->current_class_name(), THREAD);
-  guarantee(!HAS_PENDING_EXCEPTION, "Exception creating a symbol.");
-  return SystemDictionary::resolve_or_null(class_name_symbol, THREAD);
+  return parser->load_current_class(THREAD);
 }
--- a/src/hotspot/share/classfile/classLoaderExt.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/classLoaderExt.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -26,65 +26,152 @@
 #define SHARE_VM_CLASSFILE_CLASSLOADEREXT_HPP
 
 #include "classfile/classLoader.hpp"
-#include "classfile/systemDictionary.hpp"
-#include "oops/instanceKlass.hpp"
-#include "runtime/handles.hpp"
+#include "utilities/macros.hpp"
 
-class ClassListParser;
+CDS_ONLY(class SharedPathsMiscInfoExt;)
+CDS_ONLY(class ClassListParser;)
 
 class ClassLoaderExt: public ClassLoader { // AllStatic
 public:
-
+  enum SomeConstants {
+    max_classpath_index = 0x7fff
+  };
+  // ClassLoaderExt::Context --
+  //
+  // This is used by DumpSharedSpaces only - it enforces the same classloader
+  // delegation model as would be in run-time. I.e.,
+  // + classes defined by the NULL class loader cannot load classes in the PLATFORM or APP paths.
+  // + classes defined by the PLATFORM class loader cannot load classes in the APP paths.
   class Context {
+    static Thread* _dump_thread;
+    const char* _class_name;
     const char* _file_name;
   public:
+    const char* class_name() {
+      return _class_name;
+    }
+    const char* file_name() {
+      return _file_name;
+    }
+
     Context(const char* class_name, const char* file_name, TRAPS) {
+      _class_name = class_name;
       _file_name = file_name;
+#if INCLUDE_CDS
+      if (!DumpSharedSpaces && !UseSharedSpaces) {
+        // Must not modify _app_paths_start_index if we're not using CDS.
+        assert(_app_paths_start_index == ClassLoaderExt::max_classpath_index, "must be");
+      }
+#endif
     }
 
     bool check(const ClassFileStream* stream, const int classpath_index) {
-      return true;
+      CDS_ONLY(return ClassLoaderExt::check(this, stream, classpath_index);)
+      NOT_CDS(return true;)
     }
 
     bool should_verify(int classpath_index) {
-      return false;
+      CDS_ONLY(return (classpath_index >= _app_paths_start_index);)
+      NOT_CDS(return false;)
     }
 
     void record_result(Symbol* class_name,
                        const s2 classpath_index,
-                       InstanceKlass* result, TRAPS) {
+                       InstanceKlass* result,
+                       TRAPS) {
 #if INCLUDE_CDS
-      assert(DumpSharedSpaces, "Sanity");
-      oop loader = result->class_loader();
-      s2 classloader_type = ClassLoader::BOOT_LOADER;
-      if (SystemDictionary::is_system_class_loader(loader)) {
-        classloader_type = ClassLoader::APP_LOADER;
-        ClassLoaderExt::set_has_app_classes();
-      } else if (SystemDictionary::is_platform_class_loader(loader)) {
-        classloader_type = ClassLoader::PLATFORM_LOADER;
-        ClassLoaderExt::set_has_platform_classes();
+      ClassLoaderExt::record_result(this, class_name, classpath_index, result, THREAD);
+#endif
+    }
+
+    ~Context() {
+#if INCLUDE_CDS
+      if (!DumpSharedSpaces && !UseSharedSpaces) {
+        // Must not modify app_paths_start_index if we're not using CDS.
+        assert(_app_paths_start_index == ClassLoaderExt::max_classpath_index, "must be");
       }
-      result->set_shared_classpath_index(classpath_index);
-      result->set_class_loader_type(classloader_type);
 #endif
     }
-  };
+  }; // end ClassLoaderExt::Context
 
+private:
+#if INCLUDE_CDS
+  static char* get_class_path_attr(const char* jar_path, char* manifest, jint manifest_size);
+  static void setup_app_search_path(); // Only when -Xshare:dump
+  static SharedPathsMiscInfoExt* shared_paths_misc_info() {
+    return (SharedPathsMiscInfoExt*)_shared_paths_misc_info;
+  }
+  static jshort _app_paths_start_index; // index of first app JAR in shared classpath entry table
+  static bool _has_app_classes;
+  static bool _has_platform_classes;
+#endif
+
+public:
+  CDS_ONLY(static void process_jar_manifest(ClassPathEntry* entry, bool check_for_duplicates);)
+
+  // Called by JVMTI code to add boot classpath
   static void append_boot_classpath(ClassPathEntry* new_entry) {
+#if INCLUDE_CDS
+    if (UseAppCDS) {
+      warning("UseAppCDS is disabled because bootstrap classpath has been appended");
+      UseAppCDS = false;
+    }
+#endif
     ClassLoader::add_to_boot_append_entries(new_entry);
   }
-  static void setup_search_paths() {}
-  static bool is_boot_classpath(int classpath_index) {
-   return true;
- }
-  static Klass* load_one_class(ClassListParser* parser, TRAPS);
+
+  static void setup_search_paths() NOT_CDS_RETURN;
+
 #if INCLUDE_CDS
-  static void set_has_app_classes() {}
-  static void set_has_platform_classes() {}
+private:
+  static char* read_manifest(ClassPathEntry* entry, jint *manifest_size, bool clean_text, TRAPS);
+  static ClassPathEntry* find_classpath_entry_from_cache(const char* path, TRAPS);
+
+public:
   static char* read_manifest(ClassPathEntry* entry, jint *manifest_size, TRAPS) {
-    return NULL;
+    // Remove all the new-line continuations (which wrap long lines at 72 characters, see
+    // http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#JAR%20Manifest), so
+    // that the manifest is easier to parse.
+    return read_manifest(entry, manifest_size, true, THREAD);
+  }
+  static char* read_raw_manifest(ClassPathEntry* entry, jint *manifest_size, TRAPS) {
+    // Do not remove new-line continuations, so we can easily pass it as an argument to
+    // java.util.jar.Manifest.getManifest() at run-time.
+    return read_manifest(entry, manifest_size, false, THREAD);
+  }
+
+  static void finalize_shared_paths_misc_info();
+
+  static jshort app_paths_start_index() { return _app_paths_start_index; }
+
+  static void init_paths_start_index(jshort app_start) {
+    _app_paths_start_index = app_start;
+  }
+
+  static bool is_boot_classpath(int classpath_index) {
+    return classpath_index < _app_paths_start_index;
   }
-  static void process_jar_manifest(ClassPathEntry* entry, bool check_for_duplicates) {}
+
+  static bool has_platform_or_app_classes() {
+    return _has_app_classes || _has_platform_classes;
+  }
+
+  static bool check(class ClassLoaderExt::Context *context,
+                    const ClassFileStream* stream,
+                    const int classpath_index);
+
+  static void record_result(class ClassLoaderExt::Context *context,
+                            Symbol* class_name,
+                            const s2 classpath_index,
+                            InstanceKlass* result, TRAPS);
+  static InstanceKlass* load_class(Symbol* h_name, const char* path, TRAPS);
+  static Klass* load_one_class(ClassListParser* parser, TRAPS);
+  static void set_has_app_classes() {
+    _has_app_classes = true;
+  }
+  static void set_has_platform_classes() {
+    _has_platform_classes = true;
+  }
 #endif
 };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/classfile/sharedClassUtil.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,248 @@
+/*
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "classfile/classLoader.hpp"
+#include "classfile/classLoaderExt.hpp"
+#include "classfile/dictionary.hpp"
+#include "classfile/javaClasses.hpp"
+#include "classfile/sharedClassUtil.hpp"
+#include "classfile/stringTable.hpp"
+#include "classfile/symbolTable.hpp"
+#include "classfile/systemDictionary.hpp"
+#include "classfile/systemDictionaryShared.hpp"
+#include "memory/filemap.hpp"
+#include "memory/metadataFactory.hpp"
+#include "memory/resourceArea.hpp"
+#include "oops/instanceKlass.hpp"
+#include "runtime/arguments.hpp"
+#include "runtime/java.hpp"
+#include "runtime/os.hpp"
+
+class ManifestStream: public ResourceObj {
+  private:
+  u1*   _buffer_start; // Buffer bottom
+  u1*   _buffer_end;   // Buffer top (one past last element)
+  u1*   _current;      // Current buffer position
+
+ public:
+  // Constructor
+  ManifestStream(u1* buffer, int length) : _buffer_start(buffer),
+                                           _current(buffer) {
+    _buffer_end = buffer + length;
+  }
+
+  static bool is_attr(u1* attr, const char* name) {
+    return strncmp((const char*)attr, name, strlen(name)) == 0;
+  }
+
+  static char* copy_attr(u1* value, size_t len) {
+    char* buf = NEW_RESOURCE_ARRAY(char, len + 1);
+    strncpy(buf, (char*)value, len);
+    buf[len] = 0;
+    return buf;
+  }
+
+  // The return value indicates if the JAR is signed or not
+  bool check_is_signed() {
+    u1* attr = _current;
+    bool isSigned = false;
+    while (_current < _buffer_end) {
+      if (*_current == '\n') {
+        *_current = '\0';
+        u1* value = (u1*)strchr((char*)attr, ':');
+        if (value != NULL) {
+          assert(*(value+1) == ' ', "Unrecognized format" );
+          if (strstr((char*)attr, "-Digest") != NULL) {
+            isSigned = true;
+            break;
+          }
+        }
+        *_current = '\n'; // restore
+        attr = _current + 1;
+      }
+      _current ++;
+    }
+    return isSigned;
+  }
+};
+
+void SharedPathsMiscInfoExt::print_path(outputStream* out, int type, const char* path) {
+  switch(type) {
+  case APP:
+    ClassLoader::trace_class_path("Expecting -Djava.class.path=", path);
+    break;
+  default:
+    SharedPathsMiscInfo::print_path(out, type, path);
+  }
+}
+
+bool SharedPathsMiscInfoExt::check(jint type, const char* path) {
+
+  switch (type) {
+  case APP:
+    {
+      // Prefix is OK: E.g., dump with -cp foo.jar, but run with -cp foo.jar:bar.jar
+      size_t len = strlen(path);
+      const char *appcp = Arguments::get_appclasspath();
+      assert(appcp != NULL, "NULL app classpath");
+      size_t appcp_len = strlen(appcp);
+      if (appcp_len < len) {
+        return fail("Run time APP classpath is shorter than the one at dump time: ", appcp);
+      }
+      ResourceMark rm;
+      char* tmp_path;
+      if (len == appcp_len) {
+        tmp_path = (char*)appcp;
+      } else {
+        tmp_path = NEW_RESOURCE_ARRAY(char, len + 1);
+        strncpy(tmp_path, appcp, len);
+        tmp_path[len] = 0;
+      }
+      if (os::file_name_strcmp(path, tmp_path) != 0) {
+        return fail("[APP classpath mismatch, actual: -Djava.class.path=", appcp);
+      }
+      if (appcp[len] != '\0' && appcp[len] != os::path_separator()[0]) {
+        return fail("Dump time APP classpath is not a proper prefix of run time APP classpath: ", appcp);
+      }
+    }
+    break;
+  default:
+    return SharedPathsMiscInfo::check(type, path);
+  }
+
+  return true;
+}
+
+void SharedClassUtil::update_shared_classpath(ClassPathEntry *cpe, SharedClassPathEntry* e, TRAPS) {
+  ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
+  SharedClassPathEntryExt* ent = (SharedClassPathEntryExt*)e;
+  ResourceMark rm(THREAD);
+  jint manifest_size;
+  bool isSigned;
+  char* manifest = ClassLoaderExt::read_manifest(cpe, &manifest_size, CHECK);
+  if (manifest != NULL) {
+    ManifestStream* stream = new ManifestStream((u1*)manifest,
+                                                manifest_size);
+    isSigned = stream->check_is_signed();
+    if (isSigned) {
+      ent->_is_signed = true;
+    } else {
+      // Copy the manifest into the shared archive
+      manifest = ClassLoaderExt::read_raw_manifest(cpe, &manifest_size, CHECK);
+      Array<u1>* buf = MetadataFactory::new_array<u1>(loader_data,
+                                                      manifest_size,
+                                                      THREAD);
+      char* p = (char*)(buf->data());
+      memcpy(p, manifest, manifest_size);
+      ent->set_manifest(buf);
+      ent->_is_signed = false;
+    }
+  }
+}
+
+void SharedClassUtil::initialize(TRAPS) {
+  if (UseSharedSpaces) {
+    int size = FileMapInfo::get_number_of_share_classpaths();
+    if (size > 0) {
+      SystemDictionaryShared::allocate_shared_data_arrays(size, THREAD);
+      if (!DumpSharedSpaces) {
+        FileMapHeaderExt* header = (FileMapHeaderExt*)FileMapInfo::current_info()->header();
+        ClassLoaderExt::init_paths_start_index(header->_app_paths_start_index);
+      }
+    }
+  }
+
+  if (DumpSharedSpaces) {
+    if (SharedArchiveConfigFile) {
+      read_extra_data(SharedArchiveConfigFile, THREAD);
+    }
+  }
+}
+
+void SharedClassUtil::read_extra_data(const char* filename, TRAPS) {
+  HashtableTextDump reader(filename);
+  reader.check_version("VERSION: 1.0");
+
+  while (reader.remain() > 0) {
+    int utf8_length;
+    int prefix_type = reader.scan_prefix(&utf8_length);
+    ResourceMark rm(THREAD);
+    char* utf8_buffer = NEW_RESOURCE_ARRAY(char, utf8_length);
+    reader.get_utf8(utf8_buffer, utf8_length);
+
+    if (prefix_type == HashtableTextDump::SymbolPrefix) {
+      SymbolTable::new_symbol(utf8_buffer, utf8_length, THREAD);
+    } else{
+      assert(prefix_type == HashtableTextDump::StringPrefix, "Sanity");
+      utf8_buffer[utf8_length] = '\0';
+      oop s = StringTable::intern(utf8_buffer, THREAD);
+    }
+  }
+}
+
+bool SharedClassUtil::is_classpath_entry_signed(int classpath_index) {
+  assert(classpath_index >= 0, "Sanity");
+  SharedClassPathEntryExt* ent = (SharedClassPathEntryExt*)
+    FileMapInfo::shared_classpath(classpath_index);
+  return ent->_is_signed;
+}
+
+void FileMapHeaderExt::populate(FileMapInfo* mapinfo, size_t alignment) {
+  FileMapInfo::FileMapHeader::populate(mapinfo, alignment);
+
+  ClassLoaderExt::finalize_shared_paths_misc_info();
+  _app_paths_start_index = ClassLoaderExt::app_paths_start_index();
+
+  _verify_local = BytecodeVerificationLocal;
+  _verify_remote = BytecodeVerificationRemote;
+  _has_platform_or_app_classes = ClassLoaderExt::has_platform_or_app_classes();
+}
+
+bool FileMapHeaderExt::validate() {
+  if (UseAppCDS) {
+    const char* prop = Arguments::get_property("java.system.class.loader");
+    if (prop != NULL) {
+      warning("UseAppCDS is disabled because the java.system.class.loader property is specified (value = \"%s\"). "
+              "To enable UseAppCDS, this property must be not be set", prop);
+      UseAppCDS = false;
+    }
+  }
+
+  if (!FileMapInfo::FileMapHeader::validate()) {
+    return false;
+  }
+
+  // For backwards compatibility, we don't check the verification setting
+  // if the archive only contains system classes.
+  if (_has_platform_or_app_classes &&
+      ((!_verify_local && BytecodeVerificationLocal) ||
+       (!_verify_remote && BytecodeVerificationRemote))) {
+    FileMapInfo::fail_continue("The shared archive file was created with less restrictive "
+                  "verification setting than the current setting.");
+    return false;
+  }
+
+  return true;
+}
--- a/src/hotspot/share/classfile/sharedClassUtil.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/sharedClassUtil.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -27,37 +27,108 @@
 
 #include "classfile/sharedPathsMiscInfo.hpp"
 #include "memory/filemap.hpp"
+#include "classfile/classLoaderExt.hpp"
+#include "classfile/dictionary.hpp"
+#include "classfile/systemDictionaryShared.hpp"
+#include "oops/klass.hpp"
+
+class FileMapHeaderExt: public FileMapInfo::FileMapHeader {
+public:
+  jshort _app_paths_start_index;    // Index of first app classpath entry
+  bool   _verify_local;             // BytecodeVerificationLocal setting
+  bool   _verify_remote;            // BytecodeVerificationRemote setting
+  bool   _has_platform_or_app_classes;          // Archive contains app classes
+
+  FileMapHeaderExt() {
+    _has_platform_or_app_classes = true;
+  }
+  virtual void populate(FileMapInfo* mapinfo, size_t alignment);
+  virtual bool validate();
+};
+
+// In addition to SharedPathsMiscInfo, the following information is also stored
+//
+//
+// + The value of Arguments::get_appclasspath() used during dumping.
+//
+class SharedPathsMiscInfoExt : public SharedPathsMiscInfo {
+private:
+  int   _app_offset;
+public:
+  enum {
+    APP       = 5
+  };
+
+  virtual const char* type_name(int type) {
+    switch (type) {
+    case APP:     return "APP";
+    default:      return SharedPathsMiscInfo::type_name(type);
+    }
+  }
+
+  virtual void print_path(outputStream* out, int type, const char* path);
+
+  SharedPathsMiscInfoExt() : SharedPathsMiscInfo() {
+    _app_offset = 0;
+  }
+  SharedPathsMiscInfoExt(char* buf, int size) : SharedPathsMiscInfo(buf, size) {
+    _app_offset = 0;
+  }
+
+  virtual bool check(jint type, const char* path);
+
+  void add_app_classpath(const char* path) {
+    add_path(path, APP);
+  }
+
+  void record_app_offset() {
+    _app_offset = get_used_bytes();
+  }
+  void pop_app() {
+    _cur_ptr = _buf_start + _app_offset;
+    write_jint(0);
+  }
+};
+
+class SharedClassPathEntryExt: public SharedClassPathEntry {
+public:
+  //Maniest attributes
+  bool _is_signed;
+  void set_manifest(Array<u1>* manifest) {
+    _manifest = manifest;
+  }
+};
 
 class SharedClassUtil : AllStatic {
 public:
-
   static SharedPathsMiscInfo* allocate_shared_paths_misc_info() {
-    return new SharedPathsMiscInfo();
+    return new SharedPathsMiscInfoExt();
   }
 
   static SharedPathsMiscInfo* allocate_shared_paths_misc_info(char* buf, int size) {
-    return new SharedPathsMiscInfo(buf, size);
+    return new SharedPathsMiscInfoExt(buf, size);
   }
 
   static FileMapInfo::FileMapHeader* allocate_file_map_header() {
-    return new FileMapInfo::FileMapHeader();
+    return new FileMapHeaderExt();
   }
 
   static size_t file_map_header_size() {
-    return sizeof(FileMapInfo::FileMapHeader);
+    return sizeof(FileMapHeaderExt);
   }
 
   static size_t shared_class_path_entry_size() {
-    return sizeof(SharedClassPathEntry);
+    return sizeof(SharedClassPathEntryExt);
   }
 
-  static void update_shared_classpath(ClassPathEntry *cpe,
-                                      SharedClassPathEntry* ent, TRAPS) {}
-  static void initialize(TRAPS) {}
+  static void update_shared_classpath(ClassPathEntry *cpe, SharedClassPathEntry* ent, TRAPS);
+  static void initialize(TRAPS);
 
-  inline static bool is_shared_boot_class(Klass* klass) {
-    return (klass->_shared_class_path_index >= 0);
-  }
+private:
+  static void read_extra_data(const char* filename, TRAPS);
+
+public:
+  static bool is_classpath_entry_signed(int classpath_index);
 };
 
 #endif // SHARE_VM_CLASSFILE_SHAREDCLASSUTIL_HPP
--- a/src/hotspot/share/classfile/systemDictionary.cpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/systemDictionary.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -1087,7 +1087,7 @@
 #if INCLUDE_CDS
   ResourceMark rm(THREAD);
   if (DumpSharedSpaces && !class_loader.is_null() &&
-      !ArgumentsExt::using_AppCDS() && strcmp(class_name->as_C_string(), "Unnamed") != 0) {
+      !UseAppCDS && strcmp(class_name->as_C_string(), "Unnamed") != 0) {
     // If AppCDS is not enabled, don't define the class at dump time (except for the "Unnamed"
     // class, which is used by MethodHandles).
     THROW_MSG_NULL(vmSymbols::java_lang_ClassNotFoundException(), class_name->as_C_string());
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/classfile/systemDictionaryShared.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,1086 @@
+/*
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "classfile/classFileStream.hpp"
+#include "classfile/classListParser.hpp"
+#include "classfile/classLoader.hpp"
+#include "classfile/classLoaderData.inline.hpp"
+#include "classfile/classLoaderExt.hpp"
+#include "classfile/compactHashtable.inline.hpp"
+#include "classfile/dictionary.hpp"
+#include "classfile/javaClasses.hpp"
+#include "classfile/sharedClassUtil.hpp"
+#include "classfile/symbolTable.hpp"
+#include "classfile/systemDictionary.hpp"
+#include "classfile/systemDictionaryShared.hpp"
+#include "classfile/verificationType.hpp"
+#include "classfile/vmSymbols.hpp"
+#include "logging/log.hpp"
+#include "memory/allocation.hpp"
+#include "memory/filemap.hpp"
+#include "memory/metadataFactory.hpp"
+#include "memory/metaspaceClosure.hpp"
+#include "memory/oopFactory.hpp"
+#include "memory/resourceArea.hpp"
+#include "oops/instanceKlass.hpp"
+#include "oops/klass.inline.hpp"
+#include "oops/objArrayOop.inline.hpp"
+#include "oops/oop.inline.hpp"
+#include "runtime/java.hpp"
+#include "runtime/javaCalls.hpp"
+#include "runtime/mutexLocker.hpp"
+#include "utilities/hashtable.inline.hpp"
+#include "utilities/stringUtils.hpp"
+
+
+objArrayOop SystemDictionaryShared::_shared_protection_domains  =  NULL;
+objArrayOop SystemDictionaryShared::_shared_jar_urls            =  NULL;
+objArrayOop SystemDictionaryShared::_shared_jar_manifests       =  NULL;
+
+static Mutex* SharedDictionary_lock = NULL;
+
+void SystemDictionaryShared::initialize(TRAPS) {
+  if (_java_system_loader != NULL) {
+    SharedDictionary_lock = new Mutex(Mutex::leaf, "SharedDictionary_lock", true);
+
+    // These classes need to be initialized before calling get_shared_jar_manifest(), etc.
+    SystemDictionary::ByteArrayInputStream_klass()->initialize(CHECK);
+    SystemDictionary::File_klass()->initialize(CHECK);
+    SystemDictionary::Jar_Manifest_klass()->initialize(CHECK);
+    SystemDictionary::CodeSource_klass()->initialize(CHECK);
+  }
+}
+
+oop SystemDictionaryShared::shared_protection_domain(int index) {
+  return _shared_protection_domains->obj_at(index);
+}
+
+oop SystemDictionaryShared::shared_jar_url(int index) {
+  return _shared_jar_urls->obj_at(index);
+}
+
+oop SystemDictionaryShared::shared_jar_manifest(int index) {
+  return _shared_jar_manifests->obj_at(index);
+}
+
+
+Handle SystemDictionaryShared::get_shared_jar_manifest(int shared_path_index, TRAPS) {
+  Handle empty;
+  Handle manifest ;
+  if (shared_jar_manifest(shared_path_index) == NULL) {
+    SharedClassPathEntryExt* ent = (SharedClassPathEntryExt*)FileMapInfo::shared_classpath(shared_path_index);
+    long size = ent->manifest_size();
+    if (size <= 0) {
+      return empty; // No manifest - return NULL handle
+    }
+
+    // ByteArrayInputStream bais = new ByteArrayInputStream(buf);
+    InstanceKlass* bais_klass = SystemDictionary::ByteArrayInputStream_klass();
+    Handle bais = bais_klass->allocate_instance_handle(CHECK_(empty));
+    {
+      const char* src = ent->manifest();
+      assert(src != NULL, "No Manifest data");
+      typeArrayOop buf = oopFactory::new_byteArray(size, CHECK_(empty));
+      typeArrayHandle bufhandle(THREAD, buf);
+      char* dst = (char*)(buf->byte_at_addr(0));
+      memcpy(dst, src, (size_t)size);
+
+      JavaValue result(T_VOID);
+      JavaCalls::call_special(&result, bais, bais_klass,
+                              vmSymbols::object_initializer_name(),
+                              vmSymbols::byte_array_void_signature(),
+                              bufhandle, CHECK_(empty));
+    }
+
+    // manifest = new Manifest(bais)
+    InstanceKlass* manifest_klass = SystemDictionary::Jar_Manifest_klass();
+    manifest = manifest_klass->allocate_instance_handle(CHECK_(empty));
+    {
+      JavaValue result(T_VOID);
+      JavaCalls::call_special(&result, manifest, manifest_klass,
+                              vmSymbols::object_initializer_name(),
+                              vmSymbols::input_stream_void_signature(),
+                              bais, CHECK_(empty));
+    }
+    atomic_set_shared_jar_manifest(shared_path_index, manifest());
+  }
+
+  manifest = Handle(THREAD, shared_jar_manifest(shared_path_index));
+  assert(manifest.not_null(), "sanity");
+  return manifest;
+}
+
+Handle SystemDictionaryShared::get_shared_jar_url(int shared_path_index, TRAPS) {
+  Handle url_h;
+  if (shared_jar_url(shared_path_index) == NULL) {
+    JavaValue result(T_OBJECT);
+    const char* path = FileMapInfo::shared_classpath_name(shared_path_index);
+    Handle path_string = java_lang_String::create_from_str(path, CHECK_(url_h));
+    Klass* classLoaders_klass =
+        SystemDictionary::jdk_internal_loader_ClassLoaders_klass();
+        JavaCalls::call_static(&result, classLoaders_klass,
+                               vmSymbols::toFileURL_name(),
+                               vmSymbols::toFileURL_signature(),
+                               path_string, CHECK_(url_h));
+
+    atomic_set_shared_jar_url(shared_path_index, (oop)result.get_jobject());
+  }
+
+  url_h = Handle(THREAD, shared_jar_url(shared_path_index));
+  assert(url_h.not_null(), "sanity");
+  return url_h;
+}
+
+Handle SystemDictionaryShared::get_package_name(Symbol* class_name, TRAPS) {
+  ResourceMark rm(THREAD);
+  Handle pkgname_string;
+  char* pkgname = (char*) ClassLoader::package_from_name((const char*) class_name->as_C_string());
+  if (pkgname != NULL) { // Package prefix found
+    StringUtils::replace_no_expand(pkgname, "/", ".");
+    pkgname_string = java_lang_String::create_from_str(pkgname,
+                                                       CHECK_(pkgname_string));
+  }
+  return pkgname_string;
+}
+
+// Define Package for shared app classes from JAR file and also checks for
+// package sealing (all done in Java code)
+// See http://docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
+void SystemDictionaryShared::define_shared_package(Symbol*  class_name,
+                                                   Handle class_loader,
+                                                   Handle manifest,
+                                                   Handle url,
+                                                   TRAPS) {
+  assert(class_loader == _java_system_loader, "unexpected class loader");
+  // get_package_name() returns a NULL handle if the class is in unnamed package
+  Handle pkgname_string = get_package_name(class_name, CHECK);
+  if (pkgname_string.not_null()) {
+    Klass* app_classLoader_klass = SystemDictionary::jdk_internal_loader_ClassLoaders_AppClassLoader_klass();
+    JavaValue result(T_OBJECT);
+    JavaCallArguments args(3);
+    args.set_receiver(class_loader);
+    args.push_oop(pkgname_string);
+    args.push_oop(manifest);
+    args.push_oop(url);
+    JavaCalls::call_virtual(&result, app_classLoader_klass,
+                            vmSymbols::defineOrCheckPackage_name(),
+                            vmSymbols::defineOrCheckPackage_signature(),
+                            &args,
+                            CHECK);
+  }
+}
+
+// Define Package for shared app/platform classes from named module
+void SystemDictionaryShared::define_shared_package(Symbol* class_name,
+                                                   Handle class_loader,
+                                                   ModuleEntry* mod_entry,
+                                                   TRAPS) {
+  assert(mod_entry != NULL, "module_entry should not be NULL");
+  Handle module_handle(THREAD, mod_entry->module());
+
+  Handle pkg_name = get_package_name(class_name, CHECK);
+  assert(pkg_name.not_null(), "Package should not be null for class in named module");
+
+  Klass* classLoader_klass;
+  if (SystemDictionary::is_system_class_loader(class_loader())) {
+    classLoader_klass = SystemDictionary::jdk_internal_loader_ClassLoaders_AppClassLoader_klass();
+  } else {
+    assert(SystemDictionary::is_platform_class_loader(class_loader()), "unexpected classloader");
+    classLoader_klass = SystemDictionary::jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass();
+  }
+
+  JavaValue result(T_OBJECT);
+  JavaCallArguments args(2);
+  args.set_receiver(class_loader);
+  args.push_oop(pkg_name);
+  args.push_oop(module_handle);
+  JavaCalls::call_virtual(&result, classLoader_klass,
+                          vmSymbols::definePackage_name(),
+                          vmSymbols::definePackage_signature(),
+                          &args,
+                          CHECK);
+}
+
+// Get the ProtectionDomain associated with the CodeSource from the classloader.
+Handle SystemDictionaryShared::get_protection_domain_from_classloader(Handle class_loader,
+                                                                      Handle url, TRAPS) {
+  // CodeSource cs = new CodeSource(url, null);
+  InstanceKlass* cs_klass = SystemDictionary::CodeSource_klass();
+  Handle cs = cs_klass->allocate_instance_handle(CHECK_NH);
+  JavaValue void_result(T_VOID);
+  JavaCalls::call_special(&void_result, cs, cs_klass,
+                          vmSymbols::object_initializer_name(),
+                          vmSymbols::url_code_signer_array_void_signature(),
+                          url, Handle(), CHECK_NH);
+
+  // protection_domain = SecureClassLoader.getProtectionDomain(cs);
+  Klass* secureClassLoader_klass = SystemDictionary::SecureClassLoader_klass();
+  JavaValue obj_result(T_OBJECT);
+  JavaCalls::call_virtual(&obj_result, class_loader, secureClassLoader_klass,
+                          vmSymbols::getProtectionDomain_name(),
+                          vmSymbols::getProtectionDomain_signature(),
+                          cs, CHECK_NH);
+  return Handle(THREAD, (oop)obj_result.get_jobject());
+}
+
+// Returns the ProtectionDomain associated with the JAR file identified by the url.
+Handle SystemDictionaryShared::get_shared_protection_domain(Handle class_loader,
+                                                            int shared_path_index,
+                                                            Handle url,
+                                                            TRAPS) {
+  Handle protection_domain;
+  if (shared_protection_domain(shared_path_index) == NULL) {
+    Handle pd = get_protection_domain_from_classloader(class_loader, url, THREAD);
+    atomic_set_shared_protection_domain(shared_path_index, pd());
+  }
+
+  // Acquire from the cache because if another thread beats the current one to
+  // set the shared protection_domain and the atomic_set fails, the current thread
+  // needs to get the updated protection_domain from the cache.
+  protection_domain = Handle(THREAD, shared_protection_domain(shared_path_index));
+  assert(protection_domain.not_null(), "sanity");
+  return protection_domain;
+}
+
+// Returns the ProtectionDomain associated with the moduleEntry.
+Handle SystemDictionaryShared::get_shared_protection_domain(Handle class_loader,
+                                                            ModuleEntry* mod, TRAPS) {
+  ClassLoaderData *loader_data = mod->loader_data();
+  Handle protection_domain;
+  if (mod->shared_protection_domain() == NULL) {
+    Symbol* location = mod->location();
+    if (location != NULL) {
+      Handle url_string = java_lang_String::create_from_symbol(
+                                 location, CHECK_(protection_domain));
+      JavaValue result(T_OBJECT);
+      Klass* classLoaders_klass =
+        SystemDictionary::jdk_internal_loader_ClassLoaders_klass();
+        JavaCalls::call_static(&result, classLoaders_klass, vmSymbols::toFileURL_name(),
+                               vmSymbols::toFileURL_signature(),
+                               url_string, CHECK_(protection_domain));
+      Handle url = Handle(THREAD, (oop)result.get_jobject());
+
+      Handle pd = get_protection_domain_from_classloader(class_loader, url, THREAD);
+      mod->set_shared_protection_domain(loader_data, pd);
+    }
+  }
+
+  protection_domain = Handle(THREAD, mod->shared_protection_domain());
+  assert(protection_domain.not_null(), "sanity");
+  return protection_domain;
+}
+
+// Initializes the java.lang.Package and java.security.ProtectionDomain objects associated with
+// the given InstanceKlass.
+// Returns the ProtectionDomain for the InstanceKlass.
+Handle SystemDictionaryShared::init_security_info(Handle class_loader, InstanceKlass* ik, TRAPS) {
+  Handle pd;
+
+  if (ik != NULL) {
+    int index = ik->shared_classpath_index();
+    assert(index >= 0, "Sanity");
+    SharedClassPathEntryExt* ent =
+            (SharedClassPathEntryExt*)FileMapInfo::shared_classpath(index);
+    Symbol* class_name = ik->name();
+
+    if (ent->is_modules_image()) {
+      // For shared app/platform classes originated from the run-time image:
+      //   The ProtectionDomains are cached in the corresponding ModuleEntries
+      //   for fast access by the VM.
+      ResourceMark rm;
+      ClassLoaderData *loader_data =
+                ClassLoaderData::class_loader_data(class_loader());
+      PackageEntryTable* pkgEntryTable = loader_data->packages();
+      TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK_(pd));
+      if (pkg_name != NULL) {
+        PackageEntry* pkg_entry = pkgEntryTable->lookup_only(pkg_name);
+        if (pkg_entry != NULL) {
+          ModuleEntry* mod_entry = pkg_entry->module();
+          pd = get_shared_protection_domain(class_loader, mod_entry, THREAD);
+          define_shared_package(class_name, class_loader, mod_entry, CHECK_(pd));
+        }
+      }
+    } else {
+      // For shared app/platform classes originated from JAR files on the class path:
+      //   Each of the 3 SystemDictionaryShared::_shared_xxx arrays has the same length
+      //   as the shared classpath table in the shared archive (see
+      //   FileMap::_classpath_entry_table in filemap.hpp for details).
+      //
+      //   If a shared InstanceKlass k is loaded from the class path, let
+      //
+      //     index = k->shared_classpath_index():
+      //
+      //   FileMap::_classpath_entry_table[index] identifies the JAR file that contains k.
+      //
+      //   k's protection domain is:
+      //
+      //     ProtectionDomain pd = _shared_protection_domains[index];
+      //
+      //   and k's Package is initialized using
+      //
+      //     manifest = _shared_jar_manifests[index];
+      //     url = _shared_jar_urls[index];
+      //     define_shared_package(class_name, class_loader, manifest, url, CHECK_(pd));
+      //
+      //   Note that if an element of these 3 _shared_xxx arrays is NULL, it will be initialized by
+      //   the corresponding SystemDictionaryShared::get_shared_xxx() function.
+      Handle manifest = get_shared_jar_manifest(index, CHECK_(pd));
+      Handle url = get_shared_jar_url(index, CHECK_(pd));
+      define_shared_package(class_name, class_loader, manifest, url, CHECK_(pd));
+      pd = get_shared_protection_domain(class_loader, index, url, CHECK_(pd));
+    }
+  }
+  return pd;
+}
+
+// Currently AppCDS only archives classes from the run-time image, the
+// -Xbootclasspath/a path, and the class path. The following rules need to be
+// revised when AppCDS is changed to archive classes from other code sources
+// in the future, for example the module path (specified by -p).
+//
+// Check if a shared class can be loaded by the specific classloader. Following
+// are the "visible" archived classes for different classloaders.
+//
+// NULL classloader:
+//   - see SystemDictionary::is_shared_class_visible()
+// Platform classloader:
+//   - Module class from "modules" jimage. ModuleEntry must be defined in the
+//     classloader.
+// App Classloader:
+//   - Module class from "modules" jimage. ModuleEntry must be defined in the
+//     classloader.
+//   - Class from -cp. The class must have no PackageEntry defined in any of the
+//     boot/platform/app classloader, or must be in the unnamed module defined in the
+//     AppClassLoader.
+bool SystemDictionaryShared::is_shared_class_visible_for_classloader(
+                                                     InstanceKlass* ik,
+                                                     Handle class_loader,
+                                                     const char* pkg_string,
+                                                     Symbol* pkg_name,
+                                                     PackageEntry* pkg_entry,
+                                                     ModuleEntry* mod_entry,
+                                                     TRAPS) {
+  assert(class_loader.not_null(), "Class loader should not be NULL");
+  assert(Universe::is_module_initialized(), "Module system is not initialized");
+
+  int path_index = ik->shared_classpath_index();
+  SharedClassPathEntry* ent =
+            (SharedClassPathEntry*)FileMapInfo::shared_classpath(path_index);
+
+  if (SystemDictionary::is_platform_class_loader(class_loader())) {
+    assert(ent != NULL, "shared class for PlatformClassLoader should have valid SharedClassPathEntry");
+    // The PlatformClassLoader can only load archived class originated from the
+    // run-time image. The class' PackageEntry/ModuleEntry must be
+    // defined by the PlatformClassLoader.
+    if (mod_entry != NULL) {
+      // PackageEntry/ModuleEntry is found in the classloader. Check if the
+      // ModuleEntry's location agrees with the archived class' origination.
+      if (ent->is_modules_image() && mod_entry->location()->starts_with("jrt:")) {
+        return true; // Module class from the "modules" jimage
+      }
+    }
+  } else if (SystemDictionary::is_system_class_loader(class_loader())) {
+    assert(ent != NULL, "shared class for system loader should have valid SharedClassPathEntry");
+    if (pkg_string == NULL) {
+      // The archived class is in the unnamed package. Currently, the boot image
+      // does not contain any class in the unnamed package.
+      assert(!ent->is_modules_image(), "Class in the unnamed package must be from the classpath");
+      if (path_index >= ClassLoaderExt::app_paths_start_index()) {
+        return true;
+      }
+    } else {
+      // Check if this is from a PackageEntry/ModuleEntry defined in the AppClassloader.
+      if (pkg_entry == NULL) {
+        // It's not guaranteed that the class is from the classpath if the
+        // PackageEntry cannot be found from the AppClassloader. Need to check
+        // the boot and platform classloader as well.
+        if (get_package_entry(pkg_name, ClassLoaderData::class_loader_data_or_null(SystemDictionary::java_platform_loader())) == NULL &&
+            get_package_entry(pkg_name, ClassLoaderData::the_null_class_loader_data()) == NULL) {
+          // The PackageEntry is not defined in any of the boot/platform/app classloaders.
+          // The archived class must from -cp path and not from the run-time image.
+          if (!ent->is_modules_image() && path_index >= ClassLoaderExt::app_paths_start_index()) {
+            return true;
+          }
+        }
+      } else if (mod_entry != NULL) {
+        // The package/module is defined in the AppClassLoader. Currently we only
+        // support archiving application module class from the run-time image.
+        // Packages from the -cp path are in the unnamed_module.
+        if ((ent->is_modules_image() && mod_entry->location()->starts_with("jrt:")) ||
+            (pkg_entry->in_unnamed_module() && path_index >= ClassLoaderExt::app_paths_start_index())) {
+          DEBUG_ONLY( \
+            ClassLoaderData* loader_data = class_loader_data(class_loader); \
+            if (pkg_entry->in_unnamed_module()) \
+              assert(mod_entry == loader_data->unnamed_module(), "the unnamed module is not defined in the classloader");)
+
+          return true;
+        }
+      }
+    }
+  } else {
+    // TEMP: if a shared class can be found by a custom loader, consider it visible now.
+    // FIXME: is this actually correct?
+    return true;
+  }
+  return false;
+}
+
+// The following stack shows how this code is reached:
+//
+//   [0] SystemDictionaryShared::find_or_load_shared_class()
+//   [1] JVM_FindLoadedClass
+//   [2] java.lang.ClassLoader.findLoadedClass0()
+//   [3] java.lang.ClassLoader.findLoadedClass()
+//   [4] java.lang.ClassLoader.loadClass()
+//   [5] jdk.internal.loader.ClassLoaders$AppClassLoader_klass.loadClass()
+//
+// Because AppCDS supports only the PlatformClassLoader and AppClassLoader, we make the following
+// assumptions (based on the JDK 8.0 source code):
+//
+// [a] these two loaders use the default implementation of
+//     ClassLoader.loadClass(String name, boolean resolve), which
+// [b] calls findLoadedClass(name), immediately followed by parent.loadClass(),
+//     immediately followed by findClass(name).
+// [c] If the requested class is a shared class of the current class loader, parent.loadClass()
+//     always returns null, and
+// [d] if AppCDS is not enabled, the class would be loaded by findClass() by decoding it from a
+//     JAR file and then parsed.
+//
+// Given these assumptions, we intercept the findLoadedClass() call to invoke
+// SystemDictionaryShared::find_or_load_shared_class() to load the shared class from
+// the archive. The reasons are:
+//
+// + Because AppCDS is a commercial feature, we want to hide the implementation. There
+//   is currently no easy way to hide Java code, so we did it with native code.
+// + Start-up is improved because we avoid decoding the JAR file, and avoid delegating
+//   to the parent (since we know the parent will not find this class).
+//
+// NOTE: there's a lot of assumption about the Java code. If any of that change, this
+// needs to be redesigned.
+//
+// An alternative is to modify the Java code of AppClassLoader.loadClass().
+//
+InstanceKlass* SystemDictionaryShared::find_or_load_shared_class(
+                 Symbol* name, Handle class_loader, TRAPS) {
+  if (DumpSharedSpaces) {
+    return NULL;
+  }
+
+  InstanceKlass* k = NULL;
+  if (shared_dictionary() != NULL &&
+      UseAppCDS && (SystemDictionary::is_system_class_loader(class_loader()) ||
+                    SystemDictionary::is_platform_class_loader(class_loader()))) {
+
+    // Fix for 4474172; see evaluation for more details
+    class_loader = Handle(
+      THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
+    ClassLoaderData *loader_data = register_loader(class_loader, CHECK_NULL);
+    Dictionary* dictionary = loader_data->dictionary();
+
+    unsigned int d_hash = dictionary->compute_hash(name);
+
+    bool DoObjectLock = true;
+    if (is_parallelCapable(class_loader)) {
+      DoObjectLock = false;
+    }
+
+    // Make sure we are synchronized on the class loader before we proceed
+    //
+    // Note: currently, find_or_load_shared_class is called only from
+    // JVM_FindLoadedClass and used for PlatformClassLoader and AppClassLoader,
+    // which are parallel-capable loaders, so this lock is NOT taken.
+    Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
+    check_loader_lock_contention(lockObject, THREAD);
+    ObjectLocker ol(lockObject, THREAD, DoObjectLock);
+
+    {
+      MutexLocker mu(SystemDictionary_lock, THREAD);
+      Klass* check = find_class(d_hash, name, dictionary);
+      if (check != NULL) {
+        return InstanceKlass::cast(check);
+      }
+    }
+
+    k = load_shared_class_for_builtin_loader(name, class_loader, THREAD);
+    if (k != NULL) {
+      define_instance_class(k, CHECK_NULL);
+    }
+  }
+
+  return k;
+}
+
+InstanceKlass* SystemDictionaryShared::load_shared_class_for_builtin_loader(
+                 Symbol* class_name, Handle class_loader, TRAPS) {
+  assert(UseAppCDS && shared_dictionary() != NULL, "already checked");
+  Klass* k = shared_dictionary()->find_class_for_builtin_loader(class_name);
+
+  if (k != NULL) {
+    InstanceKlass* ik = InstanceKlass::cast(k);
+    if ((ik->is_shared_app_class() &&
+         SystemDictionary::is_system_class_loader(class_loader()))  ||
+        (ik->is_shared_platform_class() &&
+         SystemDictionary::is_platform_class_loader(class_loader()))) {
+      Handle protection_domain =
+        SystemDictionaryShared::init_security_info(class_loader, ik, CHECK_NULL);
+      return load_shared_class(ik, class_loader, protection_domain, THREAD);
+    }
+  }
+
+  return NULL;
+}
+
+void SystemDictionaryShared::oops_do(OopClosure* f) {
+  f->do_oop((oop*)&_shared_protection_domains);
+  f->do_oop((oop*)&_shared_jar_urls);
+  f->do_oop((oop*)&_shared_jar_manifests);
+}
+
+void SystemDictionaryShared::allocate_shared_protection_domain_array(int size, TRAPS) {
+  if (_shared_protection_domains == NULL) {
+    _shared_protection_domains = oopFactory::new_objArray(
+        SystemDictionary::ProtectionDomain_klass(), size, CHECK);
+  }
+}
+
+void SystemDictionaryShared::allocate_shared_jar_url_array(int size, TRAPS) {
+  if (_shared_jar_urls == NULL) {
+    _shared_jar_urls = oopFactory::new_objArray(
+        SystemDictionary::URL_klass(), size, CHECK);
+  }
+}
+
+void SystemDictionaryShared::allocate_shared_jar_manifest_array(int size, TRAPS) {
+  if (_shared_jar_manifests == NULL) {
+    _shared_jar_manifests = oopFactory::new_objArray(
+        SystemDictionary::Jar_Manifest_klass(), size, CHECK);
+  }
+}
+
+void SystemDictionaryShared::allocate_shared_data_arrays(int size, TRAPS) {
+  allocate_shared_protection_domain_array(size, CHECK);
+  allocate_shared_jar_url_array(size, CHECK);
+  allocate_shared_jar_manifest_array(size, CHECK);
+}
+
+
+InstanceKlass* SystemDictionaryShared::lookup_from_stream(const Symbol* class_name,
+                                                          Handle class_loader,
+                                                          Handle protection_domain,
+                                                          const ClassFileStream* cfs,
+                                                          TRAPS) {
+  if (!UseAppCDS || shared_dictionary() == NULL) {
+    return NULL;
+  }
+  if (class_name == NULL) {  // don't do this for anonymous classes
+    return NULL;
+  }
+  if (class_loader.is_null() ||
+      SystemDictionary::is_system_class_loader(class_loader()) ||
+      SystemDictionary::is_platform_class_loader(class_loader())) {
+    // This function is called for loading only UNREGISTERED classes.
+    // Do nothing for the BUILTIN loaders.
+    return NULL;
+  }
+
+  ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
+  Klass* k;
+
+  { // UNREGISTERED loader
+    if (!shared_dictionary()->class_exists_for_unregistered_loader(class_name)) {
+      // No classes of this name for unregistered loaders.
+      return NULL;
+    }
+
+    int clsfile_size  = cfs->length();
+    int clsfile_crc32 = ClassLoader::crc32(0, (const char*)cfs->buffer(), cfs->length());
+
+    k = shared_dictionary()->find_class_for_unregistered_loader(class_name,
+                                                                clsfile_size, clsfile_crc32);
+  }
+
+  if (k == NULL) { // not archived
+    return NULL;
+  }
+
+  return acquire_class_for_current_thread(InstanceKlass::cast(k), class_loader,
+                                          protection_domain, THREAD);
+}
+
+InstanceKlass* SystemDictionaryShared::acquire_class_for_current_thread(
+                   InstanceKlass *ik,
+                   Handle class_loader,
+                   Handle protection_domain,
+                   TRAPS) {
+  ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
+
+  {
+    MutexLocker mu(SharedDictionary_lock, THREAD);
+    if (ik->class_loader_data() != NULL) {
+      //    ik is already loaded (by this loader or by a different loader)
+      // or ik is being loaded by a different thread (by this loader or by a different loader)
+      return NULL;
+    }
+
+    // No other thread has acquired this yet, so give it to *this thread*
+    ik->set_class_loader_data(loader_data);
+  }
+
+  // No longer holding SharedDictionary_lock
+  // No need to lock, as <ik> can be held only by a single thread.
+  loader_data->add_class(ik);
+
+  // Load and check super/interfaces, restore unsharable info
+  InstanceKlass* shared_klass = load_shared_class(ik, class_loader, protection_domain, THREAD);
+  if (shared_klass == NULL || HAS_PENDING_EXCEPTION) {
+    // TODO: clean up <ik> so it can be used again
+    return NULL;
+  }
+
+  return shared_klass;
+}
+
+bool SystemDictionaryShared::add_non_builtin_klass(Symbol* name, ClassLoaderData* loader_data,
+                                                   InstanceKlass* k,
+                                                   TRAPS) {
+  assert(DumpSharedSpaces, "only when dumping");
+  assert(UseAppCDS && boot_loader_dictionary() != NULL, "must be");
+
+  if (boot_loader_dictionary()->add_non_builtin_klass(name, loader_data, k)) {
+    MutexLocker mu_r(Compile_lock, THREAD); // not really necessary, but add_to_hierarchy asserts this.
+    add_to_hierarchy(k, CHECK_0);
+    return true;
+  }
+  return false;
+}
+
+// This function is called to resolve the super/interfaces of shared classes for
+// non-built-in loaders. E.g., ChildClass in the below example
+// where "super:" (and optionally "interface:") have been specified.
+//
+// java/lang/Object id: 0
+// Interface   id: 2 super: 0 source: cust.jar
+// ChildClass  id: 4 super: 0 interfaces: 2 source: cust.jar
+Klass* SystemDictionaryShared::dump_time_resolve_super_or_fail(
+    Symbol* child_name, Symbol* class_name, Handle class_loader,
+    Handle protection_domain, bool is_superclass, TRAPS) {
+
+  assert(DumpSharedSpaces, "only when dumping");
+
+  ClassListParser* parser = ClassListParser::instance();
+  if (parser == NULL) {
+    // We're still loading the well-known classes, before the ClassListParser is created.
+    return NULL;
+  }
+  if (child_name->equals(parser->current_class_name())) {
+    // When this function is called, all the numbered super and interface types
+    // must have already been loaded. Hence this function is never recursively called.
+    if (is_superclass) {
+      return parser->lookup_super_for_current_class(class_name);
+    } else {
+      return parser->lookup_interface_for_current_class(class_name);
+    }
+  } else {
+    // The VM is not trying to resolve a super type of parser->current_class_name().
+    // Instead, it's resolving an error class (because parser->current_class_name() has
+    // failed parsing or verification). Don't do anything here.
+    return NULL;
+  }
+}
+
+struct SharedMiscInfo {
+  Klass* _klass;
+  int _clsfile_size;
+  int _clsfile_crc32;
+};
+
+static GrowableArray<SharedMiscInfo>* misc_info_array = NULL;
+
+void SystemDictionaryShared::set_shared_class_misc_info(Klass* k, ClassFileStream* cfs) {
+  assert(DumpSharedSpaces, "only when dumping");
+  int clsfile_size  = cfs->length();
+  int clsfile_crc32 = ClassLoader::crc32(0, (const char*)cfs->buffer(), cfs->length());
+
+  if (misc_info_array == NULL) {
+    misc_info_array = new (ResourceObj::C_HEAP, mtClass) GrowableArray<SharedMiscInfo>(20, /*c heap*/ true);
+  }
+
+  SharedMiscInfo misc_info;
+  DEBUG_ONLY({
+      for (int i=0; i<misc_info_array->length(); i++) {
+        misc_info = misc_info_array->at(i);
+        assert(misc_info._klass != k, "cannot call set_shared_class_misc_info twice for the same class");
+      }
+    });
+
+  misc_info._klass = k;
+  misc_info._clsfile_size = clsfile_size;
+  misc_info._clsfile_crc32 = clsfile_crc32;
+
+  misc_info_array->append(misc_info);
+}
+
+void SystemDictionaryShared::init_shared_dictionary_entry(Klass* k, DictionaryEntry* ent) {
+  SharedDictionaryEntry* entry = (SharedDictionaryEntry*)ent;
+  entry->_id = -1;
+  entry->_clsfile_size = -1;
+  entry->_clsfile_crc32 = -1;
+  entry->_verifier_constraints = NULL;
+  entry->_verifier_constraint_flags = NULL;
+
+  if (misc_info_array != NULL) {
+    for (int i=0; i<misc_info_array->length(); i++) {
+      SharedMiscInfo misc_info = misc_info_array->at(i);
+      if (misc_info._klass == k) {
+        entry->_clsfile_size = misc_info._clsfile_size;
+        entry->_clsfile_crc32 = misc_info._clsfile_crc32;
+        misc_info_array->remove_at(i);
+        return;
+      }
+    }
+  }
+}
+
+bool SystemDictionaryShared::add_verification_constraint(Klass* k, Symbol* name,
+         Symbol* from_name, bool from_field_is_protected, bool from_is_array, bool from_is_object) {
+  assert(DumpSharedSpaces, "called at dump time only");
+
+  // Skip anonymous classes, which are not archived as they are not in
+  // dictionary (see assert_no_anonymoys_classes_in_dictionaries() in
+  // VM_PopulateDumpSharedSpace::doit()).
+  if (k->class_loader_data()->is_anonymous()) {
+    return true; // anonymous classes are not archived, skip
+  }
+
+  SharedDictionaryEntry* entry = ((SharedDictionary*)(k->class_loader_data()->dictionary()))->find_entry_for(k);
+  ResourceMark rm;
+  // Lambda classes are not archived and will be regenerated at runtime.
+  if (entry == NULL && strstr(k->name()->as_C_string(), "Lambda$") != NULL) {
+    return true;
+  }
+  assert(entry != NULL, "class should be in dictionary before being verified");
+  entry->add_verification_constraint(name, from_name, from_field_is_protected,
+                                     from_is_array, from_is_object);
+  if (entry->is_builtin()) {
+    // For builtin class loaders, we can try to complete the verification check at dump time,
+    // because we can resolve all the constraint classes.
+    return false;
+  } else {
+    // For non-builtin class loaders, we cannot complete the verification check at dump time,
+    // because at dump time we don't know how to resolve classes for such loaders.
+    return true;
+  }
+}
+
+void SystemDictionaryShared::finalize_verification_constraints() {
+  boot_loader_dictionary()->finalize_verification_constraints();
+}
+
+void SystemDictionaryShared::check_verification_constraints(InstanceKlass* klass,
+                                                             TRAPS) {
+  assert(!DumpSharedSpaces && UseSharedSpaces, "called at run time with CDS enabled only");
+  SharedDictionaryEntry* entry = shared_dictionary()->find_entry_for(klass);
+  assert(entry != NULL, "call this only for shared classes");
+  entry->check_verification_constraints(klass, THREAD);
+}
+
+SharedDictionaryEntry* SharedDictionary::find_entry_for(Klass* klass) {
+  Symbol* class_name = klass->name();
+  unsigned int hash = compute_hash(class_name);
+  int index = hash_to_index(hash);
+
+  for (SharedDictionaryEntry* entry = bucket(index);
+                              entry != NULL;
+                              entry = entry->next()) {
+    if (entry->hash() == hash && entry->literal() == klass) {
+      return entry;
+    }
+  }
+
+  return NULL;
+}
+
+void SharedDictionary::finalize_verification_constraints() {
+  int bytes = 0, count = 0;
+  for (int index = 0; index < table_size(); index++) {
+    for (SharedDictionaryEntry *probe = bucket(index);
+                                probe != NULL;
+                               probe = probe->next()) {
+      int n = probe->finalize_verification_constraints();
+      if (n > 0) {
+        bytes += n;
+        count ++;
+      }
+    }
+  }
+  if (log_is_enabled(Info, cds, verification)) {
+    double avg = 0;
+    if (count > 0) {
+      avg = double(bytes) / double(count);
+    }
+    log_info(cds, verification)("Recorded verification constraints for %d classes = %d bytes (avg = %.2f bytes) ", count, bytes, avg);
+  }
+}
+
+void SharedDictionaryEntry::add_verification_constraint(Symbol* name,
+         Symbol* from_name, bool from_field_is_protected, bool from_is_array, bool from_is_object) {
+  if (_verifier_constraints == NULL) {
+    _verifier_constraints = new(ResourceObj::C_HEAP, mtClass) GrowableArray<Symbol*>(8, true, mtClass);
+  }
+  if (_verifier_constraint_flags == NULL) {
+    _verifier_constraint_flags = new(ResourceObj::C_HEAP, mtClass) GrowableArray<char>(4, true, mtClass);
+  }
+  GrowableArray<Symbol*>* vc_array = (GrowableArray<Symbol*>*)_verifier_constraints;
+  for (int i=0; i<vc_array->length(); i+= 2) {
+    if (name      == vc_array->at(i) &&
+        from_name == vc_array->at(i+1)) {
+      return;
+    }
+  }
+  vc_array->append(name);
+  vc_array->append(from_name);
+
+  GrowableArray<char>* vcflags_array = (GrowableArray<char>*)_verifier_constraint_flags;
+  char c = 0;
+  c |= from_field_is_protected ? FROM_FIELD_IS_PROTECTED : 0;
+  c |= from_is_array           ? FROM_IS_ARRAY           : 0;
+  c |= from_is_object          ? FROM_IS_OBJECT          : 0;
+  vcflags_array->append(c);
+
+  if (log_is_enabled(Trace, cds, verification)) {
+    ResourceMark rm;
+    log_trace(cds, verification)("add_verification_constraint: %s: %s must be subclass of %s",
+                                 instance_klass()->external_name(), from_name->as_klass_external_name(),
+                                 name->as_klass_external_name());
+  }
+}
+
+int SharedDictionaryEntry::finalize_verification_constraints() {
+  assert(DumpSharedSpaces, "called at dump time only");
+  Thread* THREAD = Thread::current();
+  ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data();
+  GrowableArray<Symbol*>* vc_array = (GrowableArray<Symbol*>*)_verifier_constraints;
+  GrowableArray<char>* vcflags_array = (GrowableArray<char>*)_verifier_constraint_flags;
+
+  if (vc_array != NULL) {
+    if (log_is_enabled(Trace, cds, verification)) {
+      ResourceMark rm;
+      log_trace(cds, verification)("finalize_verification_constraint: %s",
+                                   literal()->external_name());
+    }
+
+    // Copy the constraints from C_HEAP-alloced GrowableArrays to Metaspace-alloced
+    // Arrays
+    int size = 0;
+    {
+      // FIXME: change this to be done after relocation, so we can use symbol offset??
+      int length = vc_array->length();
+      Array<Symbol*>* out = MetadataFactory::new_array<Symbol*>(loader_data, length, 0, THREAD);
+      assert(out != NULL, "Dump time allocation failure would have aborted VM");
+      for (int i=0; i<length; i++) {
+        out->at_put(i, vc_array->at(i));
+      }
+      _verifier_constraints = out;
+      size += out->size() * BytesPerWord;
+      delete vc_array;
+    }
+    {
+      int length = vcflags_array->length();
+      Array<char>* out = MetadataFactory::new_array<char>(loader_data, length, 0, THREAD);
+      assert(out != NULL, "Dump time allocation failure would have aborted VM");
+      for (int i=0; i<length; i++) {
+        out->at_put(i, vcflags_array->at(i));
+      }
+      _verifier_constraint_flags = out;
+      size += out->size() * BytesPerWord;
+      delete vcflags_array;
+    }
+
+    return size;
+  }
+  return 0;
+}
+
+void SharedDictionaryEntry::check_verification_constraints(InstanceKlass* klass, TRAPS) {
+  Array<Symbol*>* vc_array = (Array<Symbol*>*)_verifier_constraints;
+  Array<char>* vcflags_array = (Array<char>*)_verifier_constraint_flags;
+
+  if (vc_array != NULL) {
+    int length = vc_array->length();
+    for (int i=0; i<length; i+=2) {
+      Symbol* name      = vc_array->at(i);
+      Symbol* from_name = vc_array->at(i+1);
+      char c = vcflags_array->at(i/2);
+
+      bool from_field_is_protected = (c & FROM_FIELD_IS_PROTECTED) ? true : false;
+      bool from_is_array           = (c & FROM_IS_ARRAY)           ? true : false;
+      bool from_is_object          = (c & FROM_IS_OBJECT)          ? true : false;
+
+      bool ok = VerificationType::resolve_and_check_assignability(klass, name,
+         from_name, from_field_is_protected, from_is_array, from_is_object, CHECK);
+      if (!ok) {
+        ResourceMark rm(THREAD);
+        stringStream ss;
+
+        ss.print_cr("Bad type on operand stack");
+        ss.print_cr("Exception Details:");
+        ss.print_cr("  Location:\n    %s", klass->name()->as_C_string());
+        ss.print_cr("  Reason:\n    Type '%s' is not assignable to '%s'",
+                    from_name->as_quoted_ascii(), name->as_quoted_ascii());
+        THROW_MSG(vmSymbols::java_lang_VerifyError(), ss.as_string());
+      }
+    }
+  }
+}
+
+void SharedDictionaryEntry::metaspace_pointers_do(MetaspaceClosure* it) {
+  it->push((Array<Symbol*>**)&_verifier_constraints);
+  it->push((Array<char>**)&_verifier_constraint_flags);
+}
+
+bool SharedDictionary::add_non_builtin_klass(const Symbol* class_name,
+                                             ClassLoaderData* loader_data,
+                                             InstanceKlass* klass) {
+
+  assert(DumpSharedSpaces, "supported only when dumping");
+  assert(klass != NULL, "adding NULL klass");
+  assert(klass->name() == class_name, "sanity check on name");
+  assert(klass->shared_classpath_index() < 0,
+         "the shared classpath index should not be set for shared class loaded by the custom loaders");
+
+  // Add an entry for a non-builtin class.
+  // For a shared class for custom class loaders, SystemDictionary::resolve_or_null will
+  // not find this class, because is_builtin() is false.
+  unsigned int hash = compute_hash(class_name);
+  int index = hash_to_index(hash);
+
+  for (SharedDictionaryEntry* entry = bucket(index);
+                              entry != NULL;
+                              entry = entry->next()) {
+    if (entry->hash() == hash) {
+      Klass* klass = (Klass*)entry->literal();
+      if (klass->name() == class_name && klass->class_loader_data() == loader_data) {
+        // There is already a class defined with the same name
+        return false;
+      }
+    }
+  }
+
+  assert(Dictionary::entry_size() >= sizeof(SharedDictionaryEntry), "must be big enough");
+  SharedDictionaryEntry* entry = (SharedDictionaryEntry*)new_entry(hash, klass);
+  add_entry(index, entry);
+
+  assert(entry->is_unregistered(), "sanity");
+  assert(!entry->is_builtin(), "sanity");
+  return true;
+}
+
+
+//-----------------
+// SharedDictionary
+//-----------------
+
+
+Klass* SharedDictionary::find_class_for_builtin_loader(const Symbol* name) const {
+  SharedDictionaryEntry* entry = get_entry_for_builtin_loader(name);
+  return entry != NULL ? entry->instance_klass() : (Klass*)NULL;
+}
+
+Klass* SharedDictionary::find_class_for_unregistered_loader(const Symbol* name,
+                                                            int clsfile_size,
+                                                            int clsfile_crc32) const {
+
+  const SharedDictionaryEntry* entry = get_entry_for_unregistered_loader(name,
+                                                                         clsfile_size,
+                                                                         clsfile_crc32);
+  return entry != NULL ? entry->instance_klass() : (Klass*)NULL;
+}
+
+void SharedDictionary::update_entry(Klass* klass, int id) {
+  assert(DumpSharedSpaces, "supported only when dumping");
+  Symbol* class_name = klass->name();
+  unsigned int hash = compute_hash(class_name);
+  int index = hash_to_index(hash);
+
+  for (SharedDictionaryEntry* entry = bucket(index);
+                              entry != NULL;
+                              entry = entry->next()) {
+    if (entry->hash() == hash && entry->literal() == klass) {
+      entry->_id = id;
+      return;
+    }
+  }
+
+  ShouldNotReachHere();
+}
+
+SharedDictionaryEntry* SharedDictionary::get_entry_for_builtin_loader(const Symbol* class_name) const {
+  assert(!DumpSharedSpaces, "supported only when at runtime");
+  unsigned int hash = compute_hash(class_name);
+  const int index = hash_to_index(hash);
+
+  for (SharedDictionaryEntry* entry = bucket(index);
+                              entry != NULL;
+                              entry = entry->next()) {
+    if (entry->hash() == hash && entry->equals(class_name)) {
+      if (entry->is_builtin()) {
+        return entry;
+      }
+    }
+  }
+  return NULL;
+}
+
+SharedDictionaryEntry* SharedDictionary::get_entry_for_unregistered_loader(const Symbol* class_name,
+                                                                           int clsfile_size,
+                                                                           int clsfile_crc32) const {
+  assert(!DumpSharedSpaces, "supported only when at runtime");
+  unsigned int hash = compute_hash(class_name);
+  int index = hash_to_index(hash);
+
+  for (SharedDictionaryEntry* entry = bucket(index);
+                              entry != NULL;
+                              entry = entry->next()) {
+    if (entry->hash() == hash && entry->equals(class_name)) {
+      if (entry->is_unregistered()) {
+        if (clsfile_size == -1) {
+          // We're called from class_exists_for_unregistered_loader. At run time, we want to
+          // compute the CRC of a ClassFileStream only if there is an UNREGISTERED class
+          // with the matching name.
+          return entry;
+        } else {
+          // We're called from find_class_for_unregistered_loader
+          if (entry->_clsfile_size && clsfile_crc32 == entry->_clsfile_crc32) {
+            return entry;
+          }
+        }
+
+        // There can be only 1 class with this name for unregistered loaders.
+        return NULL;
+      }
+    }
+  }
+  return NULL;
+}
--- a/src/hotspot/share/classfile/systemDictionaryShared.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/systemDictionaryShared.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -25,75 +25,362 @@
 #ifndef SHARE_VM_CLASSFILE_SYSTEMDICTIONARYSHARED_HPP
 #define SHARE_VM_CLASSFILE_SYSTEMDICTIONARYSHARED_HPP
 
+#include "oops/klass.hpp"
+#include "classfile/dictionary.hpp"
 #include "classfile/systemDictionary.hpp"
-#include "classfile/dictionary.hpp"
+#include "memory/filemap.hpp"
+
+
+/*===============================================================================
+
+    Handling of the classes in the AppCDS archive
+
+    To ensure safety and to simplify the implementation, archived classes are
+    "segregated" into several types. The following rules describe how they
+    are stored and looked up.
+
+[1] Category of archived classes
+
+    There are 3 disjoint groups of classes stored in the AppCDS archive. They are
+    categorized as by their SharedDictionaryEntry::loader_type()
+
+    BUILTIN:              These classes may be defined ONLY by the BOOT/PLATFORM/APP
+                          loaders.
+
+    UNREGISTERED:         These classes may be defined ONLY by a ClassLoader
+                          instance that's not listed above (using fingerprint matching)
+
+[2] How classes from different categories are specified in the classlist:
+
+    Starting from JDK9, each class in the classlist may be specified with
+    these keywords: "id", "super", "interfaces", "loader" and "source".
+
+
+    BUILTIN               Only the "id" keyword may be (optionally) specified. All other
+                          keywords are forbidden.
+
+                          The named class is looked up from the jimage and from
+                          Xbootclasspath/a and CLASSPATH.
+
+    UNREGISTERED:         The "id", "super", and "source" keywords must all be
+                          specified.
+
+                          The "interfaces" keyword must be specified if the class implements
+                          one or more local interfaces. The "interfaces" keyword must not be
+                          specified if the class does not implement local interfaces.
+
+                          The named class is looked up from the location specified in the
+                          "source" keyword.
+
+    Example classlist:
+
+    # BUILTIN
+    java/lang/Object id: 0
+    java/lang/Cloneable id: 1
+    java/lang/String
+
+    # UNREGISTERED
+    Bar id: 3 super: 0 interfaces: 1 source: /foo.jar
+
+
+[3] Identifying the loader_type of archived classes in the shared dictionary
+
+    Each archived Klass* C is associated with a SharedDictionaryEntry* E
+
+    BUILTIN:              (C->shared_classpath_index() >= 0)
+    UNREGISTERED:         (C->shared_classpath_index() <  0)
+
+[4] Lookup of archived classes at run time:
+
+    (a) BUILTIN loaders:
+
+        Search the shared directory for a BUILTIN class with a matching name.
+
+    (b) UNREGISTERED loaders:
+
+        The search originates with SystemDictionaryShared::lookup_from_stream().
+
+        Search the shared directory for a UNREGISTERED class with a matching
+        (name, clsfile_len, clsfile_crc32) tuple.
+
+===============================================================================*/
+#define UNREGISTERED_INDEX -9999
 
 class ClassFileStream;
 
-class SystemDictionaryShared: public SystemDictionary {
+// Archived classes need extra information not needed by traditionally loaded classes.
+// To keep footprint small, we add these in the dictionary entry instead of the InstanceKlass.
+class SharedDictionaryEntry : public DictionaryEntry {
+
+public:
+  enum LoaderType {
+    LT_BUILTIN,
+    LT_UNREGISTERED
+  };
+
+  enum {
+    FROM_FIELD_IS_PROTECTED = 1 << 0,
+    FROM_IS_ARRAY           = 1 << 1,
+    FROM_IS_OBJECT          = 1 << 2
+  };
+
+  int             _id;
+  int             _clsfile_size;
+  int             _clsfile_crc32;
+  void*           _verifier_constraints; // FIXME - use a union here to avoid type casting??
+  void*           _verifier_constraint_flags;
+
+  // See "Identifying the loader_type of archived classes" comments above.
+  LoaderType loader_type() const {
+    Klass* k = (Klass*)literal();
+
+    if ((k->shared_classpath_index() != UNREGISTERED_INDEX)) {
+      return LT_BUILTIN;
+    } else {
+      return LT_UNREGISTERED;
+    }
+  }
+
+  SharedDictionaryEntry* next() {
+    return (SharedDictionaryEntry*)(DictionaryEntry::next());
+  }
+
+  bool is_builtin() const {
+    return loader_type() == LT_BUILTIN;
+  }
+  bool is_unregistered() const {
+    return loader_type() == LT_UNREGISTERED;
+  }
+
+  void add_verification_constraint(Symbol* name,
+         Symbol* from_name, bool from_field_is_protected, bool from_is_array, bool from_is_object);
+  int finalize_verification_constraints();
+  void check_verification_constraints(InstanceKlass* klass, TRAPS);
+  void metaspace_pointers_do(MetaspaceClosure* it) NOT_CDS_RETURN;
+};
+
+class SharedDictionary : public Dictionary {
+  SharedDictionaryEntry* get_entry_for_builtin_loader(const Symbol* name) const;
+  SharedDictionaryEntry* get_entry_for_unregistered_loader(const Symbol* name,
+                                                           int clsfile_size,
+                                                           int clsfile_crc32) const;
+
+  // Convenience functions
+  SharedDictionaryEntry* bucket(int index) const {
+    return (SharedDictionaryEntry*)(Dictionary::bucket(index));
+  }
+
 public:
-  static void initialize(TRAPS) {}
+  SharedDictionaryEntry* find_entry_for(Klass* klass);
+  void finalize_verification_constraints();
+
+  bool add_non_builtin_klass(const Symbol* class_name,
+                             ClassLoaderData* loader_data,
+                             InstanceKlass* obj);
+
+  void update_entry(Klass* klass, int id);
+
+  Klass* find_class_for_builtin_loader(const Symbol* name) const;
+  Klass* find_class_for_unregistered_loader(const Symbol* name,
+                                            int clsfile_size,
+                                            int clsfile_crc32) const;
+  bool class_exists_for_unregistered_loader(const Symbol* name) {
+    return (get_entry_for_unregistered_loader(name, -1, -1) != NULL);
+  }
+};
+
+class SystemDictionaryShared: public SystemDictionary {
+private:
+  // These _shared_xxxs arrays are used to initialize the java.lang.Package and
+  // java.security.ProtectionDomain objects associated with each shared class.
+  //
+  // See SystemDictionaryShared::init_security_info for more info.
+  static objArrayOop _shared_protection_domains;
+  static objArrayOop _shared_jar_urls;
+  static objArrayOop _shared_jar_manifests;
+
+  static InstanceKlass* load_shared_class_for_builtin_loader(
+                                               Symbol* class_name,
+                                               Handle class_loader,
+                                               TRAPS);
+  static Handle get_package_name(Symbol*  class_name, TRAPS);
+
+
+  // Package handling:
+  //
+  // 1. For named modules in the runtime image
+  //    BOOT classes: Reuses the existing JVM_GetSystemPackage(s) interfaces
+  //                  to get packages in named modules for shared classes.
+  //                  Package for non-shared classes in named module is also
+  //                  handled using JVM_GetSystemPackage(s).
+  //
+  //    APP  classes: VM calls ClassLoaders.AppClassLoader::definePackage(String, Module)
+  //                  to define package for shared app classes from named
+  //                  modules.
+  //
+  //    PLATFORM  classes: VM calls ClassLoaders.PlatformClassLoader::definePackage(String, Module)
+  //                  to define package for shared platform classes from named
+  //                  modules.
+  //
+  // 2. For unnamed modules
+  //    BOOT classes: Reuses the existing JVM_GetSystemPackage(s) interfaces to
+  //                  get packages for shared boot classes in unnamed modules.
+  //
+  //    APP  classes: VM calls ClassLoaders.AppClassLoader::defineOrCheckPackage()
+  //                  with with the manifest and url from archived data.
+  //
+  //    PLATFORM  classes: No package is defined.
+  //
+  // The following two define_shared_package() functions are used to define
+  // package for shared APP and PLATFORM classes.
+  static void define_shared_package(Symbol*  class_name,
+                                    Handle class_loader,
+                                    Handle manifest,
+                                    Handle url,
+                                    TRAPS);
+  static void define_shared_package(Symbol* class_name,
+                                    Handle class_loader,
+                                    ModuleEntry* mod_entry,
+                                    TRAPS);
+
+  static Handle get_shared_jar_manifest(int shared_path_index, TRAPS);
+  static Handle get_shared_jar_url(int shared_path_index, TRAPS);
+  static Handle get_protection_domain_from_classloader(Handle class_loader,
+                                                       Handle url, TRAPS);
+  static Handle get_shared_protection_domain(Handle class_loader,
+                                             int shared_path_index,
+                                             Handle url,
+                                             TRAPS);
+  static Handle get_shared_protection_domain(Handle class_loader,
+                                             ModuleEntry* mod, TRAPS);
+  static Handle init_security_info(Handle class_loader, InstanceKlass* ik, TRAPS);
+
+  static void atomic_set_array_index(objArrayOop array, int index, oop o) {
+    // Benign race condition:  array.obj_at(index) may already be filled in.
+    // The important thing here is that all threads pick up the same result.
+    // It doesn't matter which racing thread wins, as long as only one
+    // result is used by all threads, and all future queries.
+    array->atomic_compare_exchange_oop(index, o, NULL);
+  }
+
+  static oop shared_protection_domain(int index);
+  static void atomic_set_shared_protection_domain(int index, oop pd) {
+    atomic_set_array_index(_shared_protection_domains, index, pd);
+  }
+  static void allocate_shared_protection_domain_array(int size, TRAPS);
+  static oop shared_jar_url(int index);
+  static void atomic_set_shared_jar_url(int index, oop url) {
+    atomic_set_array_index(_shared_jar_urls, index, url);
+  }
+  static void allocate_shared_jar_url_array(int size, TRAPS);
+  static oop shared_jar_manifest(int index);
+  static void atomic_set_shared_jar_manifest(int index, oop man) {
+    atomic_set_array_index(_shared_jar_manifests, index, man);
+  }
+  static void allocate_shared_jar_manifest_array(int size, TRAPS);
+  static InstanceKlass* acquire_class_for_current_thread(
+                                 InstanceKlass *ik,
+                                 Handle class_loader,
+                                 Handle protection_domain,
+                                 TRAPS);
+
+public:
+  static void initialize(TRAPS);
+
+  // Called by PLATFORM/APP loader only
   static InstanceKlass* find_or_load_shared_class(Symbol* class_name,
-                                                  Handle class_loader,
-                                                  TRAPS) {
-    return NULL;
+                                               Handle class_loader,
+                                               TRAPS);
+
+
+  static void allocate_shared_data_arrays(int size, TRAPS);
+  static void oops_do(OopClosure* f);
+  static void roots_oops_do(OopClosure* f) {
+    oops_do(f);
   }
-  static void roots_oops_do(OopClosure* blk) {}
-  static void oops_do(OopClosure* f) {}
+
+  // Check if sharing is supported for the class loader.
   static bool is_sharing_possible(ClassLoaderData* loader_data) {
     oop class_loader = loader_data->class_loader();
-    return (class_loader == NULL);
+    return (class_loader == NULL ||
+            (UseAppCDS && (SystemDictionary::is_system_class_loader(class_loader) ||
+                           SystemDictionary::is_platform_class_loader(class_loader)))
+            );
   }
-  static bool is_shared_class_visible_for_classloader(
-                                      InstanceKlass* ik,
-                                      Handle class_loader,
-                                      const char* pkg_string,
-                                      Symbol* pkg_name,
-                                      PackageEntry* pkg_entry,
-                                      ModuleEntry* mod_entry,
-                                      TRAPS) {
-    return false;
+  static bool is_shared_class_visible_for_classloader(InstanceKlass* ik,
+                                                      Handle class_loader,
+                                                      const char* pkg_string,
+                                                      Symbol* pkg_name,
+                                                      PackageEntry* pkg_entry,
+                                                      ModuleEntry* mod_entry,
+                                                      TRAPS);
+  static PackageEntry* get_package_entry(Symbol* pkg,
+                                         ClassLoaderData *loader_data) {
+    if (loader_data != NULL) {
+      PackageEntryTable* pkgEntryTable = loader_data->packages();
+      return pkgEntryTable->lookup_only(pkg);
+    }
+    return NULL;
   }
 
+  static bool add_non_builtin_klass(Symbol* class_name, ClassLoaderData* loader_data,
+                                    InstanceKlass* k, TRAPS);
   static Klass* dump_time_resolve_super_or_fail(Symbol* child_name,
                                                 Symbol* class_name,
                                                 Handle class_loader,
                                                 Handle protection_domain,
                                                 bool is_superclass,
-                                                TRAPS) {
-    return NULL;
-  }
+                                                TRAPS);
 
   static size_t dictionary_entry_size() {
-    return sizeof(DictionaryEntry);
+    return (DumpSharedSpaces) ? sizeof(SharedDictionaryEntry) : sizeof(DictionaryEntry);
+  }
+  static void init_shared_dictionary_entry(Klass* k, DictionaryEntry* entry) NOT_CDS_RETURN;
+  static bool is_builtin(DictionaryEntry* ent) {
+    // Can't use virtual function is_builtin because DictionaryEntry doesn't initialize
+    // vtable because it's not constructed properly.
+    SharedDictionaryEntry* entry = (SharedDictionaryEntry*)ent;
+    return entry->is_builtin();
   }
 
-  static void init_shared_dictionary_entry(Klass* k, DictionaryEntry* entry) {}
-  static bool is_builtin(DictionaryEntry* entry) { return true; }
+  // For convenient access to the SharedDictionaryEntry's of the archived classes.
+  static SharedDictionary* shared_dictionary() {
+    assert(!DumpSharedSpaces, "not for dumping");
+    return (SharedDictionary*)SystemDictionary::shared_dictionary();
+  }
+
+  static SharedDictionary* boot_loader_dictionary() {
+    return (SharedDictionary*)ClassLoaderData::the_null_class_loader_data()->dictionary();
+  }
 
-  static InstanceKlass* lookup_from_stream(Symbol* class_name,
+  static void update_shared_entry(Klass* klass, int id) {
+    assert(DumpSharedSpaces, "sanity");
+    assert((SharedDictionary*)(klass->class_loader_data()->dictionary()) != NULL, "sanity");
+    ((SharedDictionary*)(klass->class_loader_data()->dictionary()))->update_entry(klass, id);
+  }
+
+  static void set_shared_class_misc_info(Klass* k, ClassFileStream* cfs);
+
+  static InstanceKlass* lookup_from_stream(const Symbol* class_name,
                                            Handle class_loader,
                                            Handle protection_domain,
                                            const ClassFileStream* st,
-                                           TRAPS) {
-    return NULL;
-  }
-
-  // The (non-application) CDS implementation supports only classes in the boot
-  // class loader, which ensures that the verification constraints are the same
-  // during archive creation time and runtime. Thus we can do the constraint checks
-  // entirely during archive creation time.
+                                           TRAPS);
+  // "verification_constraints" are a set of checks performed by
+  // VerificationType::is_reference_assignable_from when verifying a shared class during
+  // dump time.
+  //
+  // With AppCDS, it is possible to override archived classes by calling
+  // ClassLoader.defineClass() directly. SystemDictionary::load_shared_class() already
+  // ensures that you cannot load a shared class if its super type(s) are changed. However,
+  // we need an additional check to ensure that the verification_constraints did not change
+  // between dump time and runtime.
   static bool add_verification_constraint(Klass* k, Symbol* name,
                   Symbol* from_name, bool from_field_is_protected,
-                  bool from_is_array, bool from_is_object) {return false;}
-  static void finalize_verification_constraints() {}
+                  bool from_is_array, bool from_is_object) NOT_CDS_RETURN_(false);
+  static void finalize_verification_constraints() NOT_CDS_RETURN;
   static void check_verification_constraints(InstanceKlass* klass,
-                                              TRAPS) {}
-};
-
-class SharedDictionaryEntry : public DictionaryEntry {
-public:
-  void metaspace_pointers_do(MetaspaceClosure* it) {}
+                                              TRAPS) NOT_CDS_RETURN;
 };
 
 #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARYSHARED_HPP
--- a/src/hotspot/share/classfile/systemDictionary_ext.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/systemDictionary_ext.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -25,6 +25,17 @@
 #ifndef SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_EXT_HPP
 #define SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_EXT_HPP
 
+#if INCLUDE_CDS
+
+#define WK_KLASSES_DO_EXT(do_klass) \
+  /* well-known classes */                                                                                            \
+  do_klass(jdk_internal_loader_ClassLoaders_klass,         jdk_internal_loader_ClassLoaders,            Pre )         \
+  /*end*/
+
+#else
+
 #define WK_KLASSES_DO_EXT(do_klass)
 
+#endif // INCLUDE_CDS
+
 #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_EXT_HPP
--- a/src/hotspot/share/classfile/vmSymbols.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/classfile/vmSymbols.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -26,7 +26,6 @@
 #define SHARE_VM_CLASSFILE_VMSYMBOLS_HPP
 
 #include "classfile/moduleEntry.hpp"
-#include "classfile/vmSymbols_ext.hpp"
 #include "oops/symbol.hpp"
 #include "memory/iterator.hpp"
 #include "trace/traceMacros.hpp"
@@ -673,8 +672,12 @@
   /* trace signatures */                                                                                          \
   TRACE_TEMPLATES(template)                                                                                       \
                                                                                                                   \
-  /* extensions */                                                                                                \
-  VM_SYMBOLS_DO_EXT(template, do_alias)                                                                           \
+  /* cds */                                                                                                       \
+  template(jdk_internal_loader_ClassLoaders,       "jdk/internal/loader/ClassLoaders")                            \
+  template(jdk_vm_cds_SharedClassInfo,             "jdk/vm/cds/SharedClassInfo")                                  \
+  template(url_void_signature,                     "(Ljava/net/URL;)V")                                           \
+  template(toFileURL_name,                         "toFileURL")                                                   \
+  template(toFileURL_signature,                    "(Ljava/lang/String;)Ljava/net/URL;")                          \
                                                                                                                   \
   /*end*/
 
--- a/src/hotspot/share/classfile/vmSymbols_ext.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 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.
- *
- */
-
-#ifndef SHARE_VM_CLASSFILE_VMSYMBOLS_EXT_HPP
-#define SHARE_VM_CLASSFILE_VMSYMBOLS_EXT_HPP
-
-#define VM_SYMBOLS_DO_EXT(template, do_alias)
-
-#endif // SHARE_VM_CLASSFILE_VMSYMBOLS_EXT_HPP
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/prims/cdsoffsets.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "utilities/macros.hpp"
+#if INCLUDE_CDS
+#include "runtime/os.hpp"
+#include "memory/filemap.hpp"
+#include "memory/allocation.hpp"
+#include "memory/allocation.inline.hpp"
+#include "prims/cdsoffsets.hpp"
+
+CDSOffsets* CDSOffsets::_all = NULL;
+#define ADD_NEXT(list, name, value) \
+  list->add_end(new CDSOffsets(name, value, NULL))
+
+#define CREATE_OFFSET_MAPS                                                                                  \
+    _all = new CDSOffsets("size_t_size", sizeof(size_t), NULL);                                             \
+    ADD_NEXT(_all, "FileMapHeader::_magic", offset_of(FileMapInfo::FileMapHeader, _magic));                 \
+    ADD_NEXT(_all, "FileMapHeader::_crc", offset_of(FileMapInfo::FileMapHeader, _crc));                     \
+    ADD_NEXT(_all, "FileMapHeader::_version", offset_of(FileMapInfo::FileMapHeader, _version));             \
+    ADD_NEXT(_all, "FileMapHeader::_space[0]", offset_of(FileMapInfo::FileMapHeader, _space));              \
+    ADD_NEXT(_all, "space_info::_crc", offset_of(FileMapInfo::FileMapHeader::space_info, _crc));            \
+    ADD_NEXT(_all, "space_info::_used", offset_of(FileMapInfo::FileMapHeader::space_info, _used));          \
+    ADD_NEXT(_all, "FileMapHeader::_paths_misc_info_size", offset_of(FileMapInfo::FileMapHeader, _paths_misc_info_size)); \
+    ADD_NEXT(_all, "file_header_size", sizeof(FileMapInfo::FileMapHeader));                                 \
+    ADD_NEXT(_all, "space_info_size", sizeof(FileMapInfo::FileMapHeader::space_info));
+
+int CDSOffsets::find_offset(const char* name) {
+  if (_all == NULL) {
+    CREATE_OFFSET_MAPS
+  }
+  CDSOffsets* it = _all;
+  while(it) {
+    if (!strcmp(name, it->get_name())) {
+      return it->get_offset();
+    }
+    it = it->next();
+  }
+  return -1; // not found
+}
+
+void CDSOffsets::add_end(CDSOffsets* n) {
+  CDSOffsets* p = this;
+  while(p && p->_next) { p = p->_next; }
+  p->_next = n;
+}
+#endif // INCLUDE_CDS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/prims/cdsoffsets.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ *
+ */
+
+#ifndef SHARE_PRIMS_CDSOFFSETS_HPP
+#define SHARE_PRIMS_CDSOFFSETS_HPP
+class CDSOffsets: public CHeapObj<mtInternal> {
+ private:
+  char* _name;
+  int   _offset;
+  CDSOffsets* _next;
+  static CDSOffsets* _all;  // sole list for cds
+ public:
+  CDSOffsets(const char* name, int offset, CDSOffsets* next) {
+     _name = NEW_C_HEAP_ARRAY(char, strlen(name) + 1, mtInternal);
+     strcpy(_name, name);
+     _offset = offset;
+     _next = next;
+  }
+
+  char* get_name() const { return _name; }
+  int   get_offset() const { return _offset; }
+  CDSOffsets* next() const { return _next; }
+  void add_end(CDSOffsets* n);
+
+  static int find_offset(const char* name);
+};
+#endif // SHARE_PRIMS_CDSOFFSETS_HPP
--- a/src/hotspot/share/prims/whitebox.cpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/prims/whitebox.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -61,6 +61,9 @@
 #include "utilities/debug.hpp"
 #include "utilities/exceptions.hpp"
 #include "utilities/macros.hpp"
+#if INCLUDE_CDS
+#include "prims/cdsoffsets.hpp"
+#endif // INCLUDE_CDS
 #if INCLUDE_ALL_GCS
 #include "gc/g1/concurrentMarkThread.hpp"
 #include "gc/g1/g1CollectedHeap.inline.hpp"
@@ -1730,6 +1733,18 @@
 #endif
 WB_END
 
+
+#if INCLUDE_CDS
+
+WB_ENTRY(jint, WB_GetOffsetForName(JNIEnv* env, jobject o, jstring name))
+  ResourceMark rm;
+  char* c_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
+  int result = CDSOffsets::find_offset(c_name);
+  return (jint)result;
+WB_END
+
+#endif // INCLUDE_CDS
+
 WB_ENTRY(jint, WB_HandshakeWalkStack(JNIEnv* env, jobject wb, jobject thread_handle, jboolean all_threads))
   class TraceSelfClosure : public ThreadClosure {
     jint _num_threads_completed;
@@ -1918,6 +1933,9 @@
   {CC"runMemoryUnitTests", CC"()V",                   (void*)&WB_RunMemoryUnitTests},
   {CC"readFromNoaccessArea",CC"()V",                  (void*)&WB_ReadFromNoaccessArea},
   {CC"stressVirtualSpaceResize",CC"(JJJ)I",           (void*)&WB_StressVirtualSpaceResize},
+#if INCLUDE_CDS
+  {CC"getOffsetForName0", CC"(Ljava/lang/String;)I",  (void*)&WB_GetOffsetForName},
+#endif
 #if INCLUDE_ALL_GCS
   {CC"g1InConcurrentMark", CC"()Z",                   (void*)&WB_G1InConcurrentMark},
   {CC"g1IsHumongous0",      CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous     },
--- a/src/hotspot/share/runtime/arguments.cpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/runtime/arguments.cpp	Mon Nov 27 20:21:34 2017 -0800
@@ -3880,6 +3880,14 @@
       vm_exit(0);
     }
 #endif
+
+    if (match_option(option, "-XX:+UseAppCDS")) {
+      Flag* flag = Flag::find_flag("SharedArchiveFile", 17, true, true);
+      if (flag->is_diagnostic()) {
+        flag->clear_diagnostic();
+      }
+      continue;
+    }
   }
   return JNI_OK;
 }
--- a/src/hotspot/share/runtime/arguments_ext.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/runtime/arguments_ext.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -36,7 +36,6 @@
   // Otherwise returns false.
   static inline bool process_options(const JavaVMOption *option) { return false; }
   static inline void report_unsupported_options() { }
-  static inline bool using_AppCDS() { return false; }
 };
 
 void ArgumentsExt::set_gc_specific_flags() {
--- a/src/hotspot/share/runtime/globals.hpp	Mon Nov 27 20:35:56 2017 -0500
+++ b/src/hotspot/share/runtime/globals.hpp	Mon Nov 27 20:21:34 2017 -0800
@@ -3932,6 +3932,13 @@
           "Address to allocate shared memory region for class data")        \
           range(0, SIZE_MAX)                                                \
                                                                             \
+  product(bool, UseAppCDS, false,                                           \
+          "Enable Application Class Data Sharing when using shared spaces") \
+          writeable(CommandLineOnly)                                        \
+                                                                            \
+  product(ccstr, SharedArchiveConfigFile, NULL,                             \
+          "Data to add to the CDS archive file")                            \
+                                                                            \
   product(uintx, SharedSymbolTableBucketSize, 4,                            \
           "Average number of symbols per bucket in shared table")           \
           range(2, 246)                                                     \
--- a/test/hotspot/jtreg/TEST.groups	Mon Nov 27 20:35:56 2017 -0500
+++ b/test/hotspot/jtreg/TEST.groups	Mon Nov 27 20:21:34 2017 -0800
@@ -189,12 +189,27 @@
  -runtime/Unsafe/RangeCheck.java \
  -runtime/containers/ \
   sanity/ \
-  testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java
+  testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java \
+ -:hotspot_tier1_runtime_appcds_exclude
 
 hotspot_cds = \
   runtime/SharedArchiveFile/ \
   runtime/CompressedOops/
 
+# AppCDS
+# If modifying AppCDS it is also recommended to run the open hotspot_cds group
+hotspot_appcds = \
+  runtime/appcds/
+
+# A subset of AppCDS tests to be run in JPRT push
+hotspot_tier1_runtime_appcds = \
+  runtime/appcds/HelloTest.java \
+  runtime/appcds/sharedStrings/SharedStringsBasic.java \
+  runtime/appcds/ClassLoaderTest.java
+
+hotspot_tier1_runtime_appcds_exclude = \
+  runtime/appcds/ \
+  -:hotspot_tier1_runtime_appcds
 
 hotspot_tier1_serviceability = \
   serviceability/dcmd/compiler \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/AppCDSOptions.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 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;
+
+    // Application classes to be archived
+    public String[] appClasses;
+
+    public AppCDSOptions setAppJar(String appJar) {
+        this.appJar = appJar;
+        return this;
+    }
+
+    public AppCDSOptions setAppClasses(String[] appClasses) {
+        this.appClasses = appClasses;
+        return this;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/AppendClasspath.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,87 @@
+/*
+ * 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
+ * @summary At run time, it is OK to append new elements to the classpath that was used at dump time.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 AppendClasspath
+ */
+
+import java.io.File;
+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
+    OutputAnalyzer output = TestCommon.execCommon(
+        "-cp", appJar + File.pathSeparator + appJar2,
+        "HelloMore");
+    TestCommon.checkExec(output);
+
+    final String errorMessage1 = "Unable to use shared archive";
+    final String errorMessage2 = "shared class paths mismatch";
+    // FAIL: 2) runtime with classpath different from the one used in dump time
+    // (runtime has an extra jar file prepended to the class path)
+    output = TestCommon.execCommon(
+        "-cp", appJar2 + File.pathSeparator + appJar,
+        "HelloMore");
+    output.shouldContain(errorMessage1);
+    output.shouldContain(errorMessage2);
+    output.shouldHaveExitValue(1);
+
+    // FAIL: 3) runtime with classpath part of the one used in dump time
+    TestCommon.testDump(appJar + File.pathSeparator + appJar2,
+                                      TestCommon.list("Hello"));
+    output = TestCommon.execCommon(
+        "-cp", appJar2,
+        "Hello");
+    output.shouldContain(errorMessage1);
+    output.shouldContain(errorMessage2);
+    output.shouldHaveExitValue(1);
+
+    // FAIL: 4) runtime with same set of jar files in the classpath but
+    // with different order
+    output = TestCommon.execCommon(
+        "-cp", appJar2 + File.pathSeparator + appJar,
+        "HelloMore");
+    output.shouldContain(errorMessage1);
+    output.shouldContain(errorMessage2);
+    output.shouldHaveExitValue(1);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/BootClassPathMismatch.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,108 @@
+/*
+ * 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
+ * @summary bootclasspath mismatch test.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main BootClassPathMismatch
+ */
+
+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 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.testBootClassPathMatch();
+    }
+
+    /* Error should be detected if:
+     * dump time: -Xbootclasspath/a:${testdir}/hello.jar
+     * run-time : -Xbootclasspath/a:${testdir}/newdir/hello.jar
+     */
+    public void testBootClassPathMismatch() throws Exception {
+        String appJar = JarBuilder.getOrCreateHelloJar();
+        String appClasses[] = {"Hello"};
+        OutputAnalyzer dumpOutput = TestCommon.dump(
+            appJar, appClasses, "-Xbootclasspath/a:" + appJar);
+        String testDir = TestCommon.getTestDir("newdir");
+        String otherJar = testDir + File.separator + "hello.jar";
+        OutputAnalyzer execOutput = TestCommon.exec(
+            appJar, "-verbose:class", "-Xbootclasspath/a:" + otherJar, "Hello");
+        try {
+            TestCommon.checkExec(execOutput, mismatchMessage);
+        } catch (java.lang.RuntimeException re) {
+          String cause = re.getMessage();
+          if (!mismatchMessage.equals(cause)) {
+              throw re;
+          }
+        }
+    }
+
+    /* 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"};
+        OutputAnalyzer dumpOutput = TestCommon.dump(
+            appJar, appClasses, "-Xbootclasspath/a:" + appJar);
+        OutputAnalyzer execOutput = TestCommon.exec(
+            appJar, "-verbose:class",
+            "-Xbootclasspath/a:" + appJar, "Hello");
+        TestCommon.checkExec(execOutput,
+                "[class,load] Hello source: shared objects file");
+    }
+
+    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) { }
+
+        Files.copy(Paths.get(classDir, "hello.jar"),
+            Paths.get(dstDir, "hello.jar"),
+            StandardCopyOption.REPLACE_EXISTING);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/CaseSensitiveClassPath.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,92 @@
+/*
+ * 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 Test case sensitive aspect of comparing class paths
+ *     between dump time and archive use time
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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);
+        }
+
+        out = TestCommon.exec(appJarUpper, "Hello", "-Xlog:class+path=info",
+                              "-Xlog:cds");
+        if (TestCommon.isUnableToMap(out))
+            return;
+
+        if (Files.isSameFile(jarPath, jarPathUpper)) {
+            TestCommon.checkExec(out, "Hello World");
+        } else {
+            out.shouldContain("shared class paths mismatch")
+                .shouldHaveExitValue(1);
+        }
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ClassLoaderTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,93 @@
+/*
+ * 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
+ * @summary Initiating and defining classloader test.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main 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);
+
+        OutputAnalyzer runtimeOutput = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+            "-cp", appJar, bootClassPath, "-Xlog:class+load", "HelloWB");
+
+        if (!TestCommon.isUnableToMap(runtimeOutput)) {
+            runtimeOutput.shouldNotContain(
+                "[class,load] HelloWB source: shared objects file by jdk/internal/misc/ClassLoaders$AppClassLoader");
+            runtimeOutput.shouldContain("[class,load] HelloWB source: shared objects file");
+        }
+    }
+
+    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;
+
+        TestCommon.dump(helloJar, TestCommon.list("Hello"), bootClassPath);
+
+        TestCommon.execCommon("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+            "-cp", appJar, bootClassPath, "-XX:+TraceClassPaths", "ForNameTest");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ClassPathAttr.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,106 @@
+/*
+ * 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
+ * @summary Class-Path: attribute in MANIFEST file
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @run main 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"));
+
+      OutputAnalyzer output = TestCommon.execCommon(
+          "-cp", cp,
+          "CpAttr1");
+      TestCommon.checkExec(output);
+
+      // Logging test for class+path.
+      output = TestCommon.execCommon(
+          "-Xlog:class+path",
+          "-cp", cp,
+          "CpAttr1");
+      if (!TestCommon.isUnableToMap(output)){
+        output.shouldMatch("checking shared classpath entry: .*cpattr2.jar");
+        output.shouldMatch("checking shared classpath entry: .*cpattr3.jar");
+      }
+      //  Make sure aliased TraceClassPaths still works
+      output = TestCommon.execCommon(
+          "-XX:+TraceClassPaths",
+          "-cp", cp,
+          "CpAttr1");
+      if (!TestCommon.isUnableToMap(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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/CommandLineFlagCombo.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,128 @@
+/*
+ * 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 CommandLineFlagCombo
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.gc=="null") & ((vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true))
+ * @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
+ * @compile test-classes/Hello.java
+ * @run main/timeout=240 CommandLineFlagCombo
+ */
+
+import jdk.test.lib.BuildHelper;
+import jdk.test.lib.Platform;
+import jdk.test.lib.process.OutputAnalyzer;
+
+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;
+
+            if (testEntry.equals("-XX:+FlightRecorder")) {
+                dumpOutput = TestCommon.dump(appJar, classList, "-XX:+UnlockCommercialFeatures", testEntry);
+            } else {
+                dumpOutput = TestCommon.dump(appJar, classList, testEntry);
+            }
+
+            TestCommon.checkDump(dumpOutput, "Loading classes to share");
+
+            OutputAnalyzer execOutput;
+            if (testEntry.equals("-XX:+FlightRecorder")) {
+                execOutput = TestCommon.exec(appJar, "-XX:+UnlockCommercialFeatures", testEntry, "Hello");
+            } else {
+                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 (!BuildHelper.isCommercialBuild() && testEntry.equals("-XX:+FlightRecorder"))
+        {
+            System.out.println("Test case not applicable on non-commercial builds");
+            return true;
+        }
+
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/CommandLineFlagComboNegative.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,101 @@
+/*
+ * 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 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
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main 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<TestVector> testTable = new ArrayList<TestVector>();
+
+    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) );
+            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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/CompilerUtils.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 <source>/**} to
+     * {@code <destination>/**}. 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<Path> 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<String> opts = Arrays.asList(options);
+        JavaCompiler.CompilationTask task
+            = compiler.getTask(null, jfm, null, opts, null,
+                jfm.getJavaFileObjectsFromPaths(sources));
+
+        return task.call();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/DumpClassList.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,103 @@
+/*
+ * 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 DumpLoadedClassList should exclude generated classes, classes in bootclasspath/a and
+ *          --patch-module.
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/ArrayListTest.java
+ * @run main 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,
+                                          "-XX:+UnlockDiagnosticVMOptions",
+                                          "-XX:+PrintSystemDictionaryAtExit",
+                                          "-XX:SharedClassListFile=" + classList);
+        TestCommon.checkDump(output)
+            .shouldNotContain("Preload Warning: Cannot find java/lang/invoke/LambdaForm")
+            .shouldNotContain("Preload Warning: Cannot find boot/append/Foo")
+            .shouldContain("boot.append.Foo, loader <shared, not restored>");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_1.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,11 @@
+VERSION: 1.0
+@SECTION: Symbol
+0 -1:
+41 -1: (Ljava/util/Set<TE;>;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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_2.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,5 @@
+@SECTION: Symbol
+20 -1: isAlphaNumericString
+43 -1: (Ljava/lang/Class<*>;Ljava/lang/Class<*>;)Z
+15 -1: IntCumulateTask
+1 -1: \n
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.invalid_3.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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: <T:Ljava/lang/Object;>(Ljava/lang/ClassValue<TT;>;TT;)V
+20 -1: createAnnotationData
+6 -1: OfLong
+17 -1: getClassSignature
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,89 @@
+/*
+ * 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
+ * @summary Adding extra symbols into CDS archive using -XX:SharedArchiveConfigFile
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main ExtraSymbols
+ */
+
+import java.io.*;
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class ExtraSymbols {
+    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"));
+        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"),
+            "-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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ExtraSymbols.symbols.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;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: <T:Ljava/lang/Object;>(Ljava/lang/ClassValue<TT;>;TT;)V
+20 -1: createAnnotationData
+6 -1: OfLong
+90 -1: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/Map<TK;TV;>;)Ljava/util/Map<TK;TV;>;
+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<Lsun/launcher/LauncherHelper;>;
+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<Ljava/lang/Class<*>;>;
+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: <E:Ljava/lang/Enum<TE;>;>(Ljava/lang/Class<TE;>;)[TE;
+35 -1: java/util/Collections$SingletonList
+7 -1: addYear
+35 -1: Ljava/lang/Class<Ljava/lang/Byte;>;
+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: <E:Ljava/lang/Object;>Ljava/util/AbstractSequentialList<TE;>;Ljava/util/List<TE;>;Ljava/util/Deque<TE;>;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<TT;>;
+27 -1: lambda$comparing$ea9a8b3a$1
+7 -1: ([CI)[C
+6 -1: getenv
+9 -1: newMethod
+52 -1: <T:Ljava/lang/Object;>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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/concurrent/ConcurrentHashMap$CollectionView<TK;TV;Ljava/util/Map$Entry<TK;TV;>;>;Ljava/util/Set<Ljava/util/Map$Entry<TK;TV;>;>;Ljava/io/Serializable;
+78 -1: <T:Ljava/lang/Object;>(Ljava/util/Collection<TT;>;)Ljava/util/Collection<TT;>;
+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<TK;TV;>;)Ljava/util/HashMap$Node<TK;TV;>;
+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: <T:Ljava/lang/Object;>()Ljava/util/Enumeration<TT;>;
+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/Locale$LanguageRange;>;Ljava/util/Collection<Ljava/util/Locale;>;Ljava/util/Locale$FilteringMode;)Ljava/util/List<Ljava/util/Locale;>;
+21 -1: getQualifiedFieldName
+46 -1: Ljava/util/Set<Ljava/util/Map$Entry<TK;TV;>;>;
+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: <T::Lsun/reflect/generics/tree/Tree;>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: <E:Ljava/lang/Object;>Ljava/util/Collections$UnmodifiableList<TE;>;Ljava/util/RandomAccess;
+23 -1: StackOverflowError.java
+13 -1: Launcher.java
+9 -1: Signature
+7 -1: ibm-920
+153 -1: <K:Ljava/lang/Object;V:Ljava/lang/Object;>([Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;ILjava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;)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<TT;>;
+10 -1: wordsInUse
+26 -1: (Ljava/io/ExpiringCache;)I
+53 -1: ()Ljava/util/Iterator<Ljava/util/Map$Entry<TK;TV;>;>;
+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: <T:Ljava/lang/Object;>([TT;TT;Ljava/util/Comparator<-TT;>;)I
+20 -1: (Ljava/nio/Bits$1;)V
+30 -1: ()Ljava/util/Spliterator<TK;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/Dictionary<TK;TV;>;Ljava/util/Map<TK;TV;>;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<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/Class<*>;[Ljava/lang/String;>;
+11 -1: loader_data
+27 -1: (Ljava/util/jar/Manifest;)V
+5 -1: files
+90 -1: Ljava/util/concurrent/ConcurrentMap<Ljava/lang/String;Lsun/util/calendar/CalendarSystem;>;
+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: <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;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<Lsun/launcher/LauncherHelper$StdArg;>;)[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<Ljava/net/URL;>;
+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/Class<+Ljava/lang/annotation/Annotation;>;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/lang/String;Ljava/lang/String;>;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;Ljava/util/Map<Ljava/lang/String;Ljava/nio/charset/Charset;>;)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<Ljava/lang/reflect/Method;>;
+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: <E:Ljava/lang/Object;>(Ljava/util/Collection<TE;>;Ljava/lang/Class<TE;>;)Ljava/util/Collection<TE;>;
+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<TT;>;)V
+21 -1: getBootstrapResources
+95 -1: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;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<Ljava/net/URL;>;
+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: <init>
+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<Ljava/lang/invoke/MemberName;>;
+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: <E:Ljava/lang/Object;>Ljava/util/AbstractList<TE;>;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<Ljava/lang/String;Ljava/net/URLStreamHandler;>;
+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/Class<*>;>;)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<Ljava/lang/String;Ljava/lang/String;>;
+6 -1: charAt
+12 -1: getStringAt0
+10 -1: superClone
+28 -1: Ljava/util/AbstractSet<TK;>;
+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=<URL>
+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<Ljava/lang/invoke/MethodType;>;
+23 -1: primitiveParameterCount
+8 -1: security
+14 -1: aliases_UTF_32
+22 -1: ()Ljava/util/Set<TK;>;
+9 -1: listFiles
+15 -1: insertElementAt
+42 -1: Ljava/util/Comparator<Ljava/lang/String;>;
+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<Ljava/lang/Void;>;
+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<Ljava/lang/String;Ljava/lang/Object;>;
+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;>;)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: <E:Ljava/lang/Object;>(Ljava/util/NavigableSet<TE;>;Ljava/lang/Class<TE;>;)Ljava/util/NavigableSet<TE;>;
+7 -1: advance
+86 -1: Ljava/lang/Object;Ljava/security/PrivilegedExceptionAction<Ljava/lang/reflect/Field;>;
+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/nio/charset/Charset;>;Ljava/util/Map<Ljava/lang/String;Ljava/nio/charset/Charset;>;)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: <U:Ljava/lang/Object;>(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: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;[Ljava/lang/Class<*>;[Ljava/lang/Class<*>;IILjava/lang/String;[B[B)Ljava/lang/reflect/Constructor<TT;>;
+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<Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;>;
+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<Ljava/lang/Class<*>;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/SortedMap<TK;TV;>;Ljava/lang/Class<TK;>;Ljava/lang/Class<TV;>;)Ljava/util/SortedMap<TK;TV;>;
+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: <S:Ljava/lang/Object;>(Ljava/util/function/Supplier<+TS;>;)Ljava/lang/ThreadLocal<TS;>;
+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: <E:Ljava/lang/Object;>(Ljava/util/Queue<TE;>;Ljava/lang/Class<TE;>;)Ljava/util/Queue<TE;>;
+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<Ljava/lang/Boolean;>;
+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<Ljava/util/Map$Entry<TK;TV;>;>;
+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<Ljava/lang/String;Ljava/lang/Object;>;)V
+33 -1: java/lang/CharacterDataPrivateUse
+21 -1: Exception in thread "
+40 -1: ()Ljava/util/Set<Ljava/lang/Character;>;
+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<Ljava/lang/Class<+Ljava/lang/ClassLoader;>;>;
+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: <T:Ljava/lang/Object;>([TT;II)Ljava/util/Spliterator<TT;>;
+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: <T:Ljava/lang/Object;>()Ljava/util/ListIterator<TT;>;
+17 -1: REVERSE_THRESHOLD
+31 -1: Java(TM) SE Runtime Environment
+7 -1: SECONDS
+70 -1: (Ljava/util/function/ToLongFunction<-TT;>;)Ljava/util/Comparator<TT;>;
+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/Class<+Ljava/lang/annotation/Annotation;>;Ljava/lang/annotation/Annotation;>;Ljava/util/Map<Ljava/lang/Class<+Ljava/lang/annotation/Annotation;>;Ljava/lang/annotation/Annotation;>;I)V
+153 -1: (JLjava/util/function/BiFunction<Ljava/util/Map$Entry<TK;TV;>;Ljava/util/Map$Entry<TK;TV;>;+Ljava/util/Map$Entry<TK;TV;>;>;)Ljava/util/Map$Entry<TK;TV;>;
+22 -1: ()Ljava/lang/Class<*>;
+28 -1: Ljava/lang/OutOfMemoryError;
+19 -1: writeFileDescriptor
+39 -1: Ljava/util/LinkedHashMap$Entry<TK;TV;>;
+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<Ljava/util/Map$Entry<TK;TV;>;>;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<TK;TV;>;
+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<TK;TV;>;)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<TE;>;
+57 -1: <T::Ljava/lang/Comparable<-TT;>;>(Ljava/util/List<TT;>;)V
+86 -1: <T:Ljava/lang/Object;>(Ljava/lang/ThreadLocal<Ljava/lang/ref/SoftReference<TT;>;>;)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<Ljava/lang/String;Ljava/util/LinkedList<Ljava/lang/String;>;>;)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: <T:Ljava/lang/Object;>(I)Ljava/util/Iterator<TT;>;
+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: <T:Ljava/lang/Object;>([TT;)Ljava/util/List<TT;>;
+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<TE;Ljava/lang/Boolean;>;)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<TK;TV;>;
+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: <T:Ljava/lang/Object;>([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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/ref/WeakReference<Ljava/lang/Object;>;Ljava/util/Map$Entry<TK;TV;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/function/ToDoubleFunction<-TT;>;)Ljava/util/Comparator<TT;>;
+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<Ljava/util/jar/JarEntry;>;
+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<TK;TV;>;Ljava/util/HashMap$Node<TK;TV;>;)Ljava/util/HashMap$TreeNode<TK;TV;>;
+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<TK;TV;>;[Ljava/util/HashMap$Node<TK;TV;>;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: <E:Ljava/lang/Object;>Ljava/util/AbstractCollection<TE;>;Ljava/util/Set<TE;>;
+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<TK;TV;>;[Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;)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<Ljava/lang/Character;>;
+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/Locale$LanguageRange;>;Ljava/util/Collection<Ljava/util/Locale;>;)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<Ljava/lang/Object;Ljava/lang/Object;>;
+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: <T:Ljava/lang/Object;>(TT;Ljava/util/function/Supplier<Ljava/lang/String;>;)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<Ljava/lang/ClassLoader;>;
+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: <U:Ljava/lang/Object;>(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/lang/String;Ljava/util/List<Ljava/lang/String;>;>;)Ljava/util/Map<Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/Enumeration<TT;>;)Ljava/util/ArrayList<TT;>;
+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: <S:Ljava/lang/Object;>Ljava/lang/ref/ReferenceQueue<TS;>;
+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: <T:Ljava/lang/Object;>(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<Ljava/lang/String;Ljava/lang/String;>;)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<Ljava/lang/String;>;
+12 -1: getEntrySize
+2 -1: ce
+24 -1: guessContentTypeFromName
+2 -1: ch
+14 -1: JulianCalendar
+22 -1: [Ljava/lang/Cloneable;
+122 -1: <E:Ljava/lang/Object;>Ljava/util/AbstractCollection<TE;>;Ljava/util/Deque<TE;>;Ljava/lang/Cloneable;Ljava/io/Serializable;
+34 -1: Lsun/util/locale/BaseLocale$Cache;
+14 -1: LinkedEntrySet
+72 -1: <E:Ljava/lang/Object;>Ljava/util/AbstractSet<TE;>;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: <T:Ljava/lang/Object;>(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<Ljava/lang/String;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/HashMap$TreeNode<TK;TV;>;)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: <T::Ljava/lang/Comparable<-TT;>;>([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: <T:Ljava/lang/Object;>()Ljava/util/Comparator<TT;>;
+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: <T:Ljava/lang/Object;>(Ljava/lang/Class<*>;Ljava/lang/ref/SoftReference<Ljava/lang/Class$ReflectionData<TT;>;>;Ljava/lang/ref/SoftReference<Ljava/lang/Class$ReflectionData<TT;>;>;)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: <NoSuchMemberException:Ljava/lang/ReflectiveOperationException;>(BLjava/lang/invoke/MemberName;Ljava/lang/Class<*>;Ljava/lang/Class<TNoSuchMemberException;>;)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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/Map<TK;TV;>;Ljava/lang/Class<TK;>;Ljava/lang/Class<TV;>;)Ljava/util/Map<TK;TV;>;
+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<TK;TV;>;)Ljava/util/HashMap$Node<TK;TV;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/SortedSet<TT;>;)Ljava/util/SortedSet<TT;>;
+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: <clinit>
+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<Ljava/lang/Class$ReflectionData<TT;>;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/List<TT;>;)Ljava/util/List<TT;>;
+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/Locale$LanguageRange;>;Ljava/util/Collection<Ljava/util/Locale;>;)Ljava/util/List<Ljava/util/Locale;>;
+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<Ljava/lang/invoke/MemberName;>;
+5 -1: clone
+32 -1: ()Ljava/lang/ref/Reference$Lock;
+15 -1: caseIgnoreMatch
+23 -1: (Ljava/util/Set<TE;>;)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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>([Ljava/util/HashMap$Node<TK;TV;>;Ljava/util/HashMap$TreeNode<TK;TV;>;)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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/NavigableMap<TK;TV;>;)Ljava/util/NavigableMap<TK;TV;>;
+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: <T:Ljava/lang/Object;>([TT;IILjava/util/function/BinaryOperator<TT;>;)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: <T:Ljava/lang/Object;>(Ljava/util/Deque<TT;>;)Ljava/util/Queue<TT;>;
+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<TK;TV;>;
+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: <E:Ljava/lang/Object;>(Ljava/util/List<TE;>;Ljava/lang/Class<TE;>;)Ljava/util/List<TE;>;
+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<TT;>;Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry<TT;>;>;
+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<Lsun/reflect/ReflectionFactory;>;
+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<Ljava/lang/Object;>;
+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: <T::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TT;>;)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<Lsun/misc/Signal;Lsun/misc/SignalHandler;>;
+79 -1: ([Ljava/util/WeakHashMap$Entry<TK;TV;>;[Ljava/util/WeakHashMap$Entry<TK;TV;>;)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<Ljava/lang/Object;>;
+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<TK;TV;>;)V
+8 -1: getLongB
+7 -1: vmentry
+21 -1: lookupExtendedCharset
+32 -1: <T:Ljava/lang/Object;>([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<Lsun/misc/Perf;>;
+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: <U:Ljava/lang/Object;>(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<Ljava/lang/String;Ljava/lang/String;>;
+51 -1: java/util/ArraysParallelSortHelpers$FJDouble$Sorter
+26 -1: getAnnotatedParameterTypes
+18 -1: codePointCountImpl
+7 -1: threads
+12 -1: offsetBefore
+29 -1: ()Ljava/util/Collection<TV;>;
+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<Ljava/lang/String;>;
+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<TK;TV;>;
+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<TT;>;
+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<Ljava/lang/String;Ljava/util/LinkedList<Ljava/lang/String;>;>;
+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: <U::Ljava/lang/Comparable<-TU;>;>(Ljava/util/function/Function<-TT;+TU;>;Ljava/util/Comparator<-TU;>;)Ljava/util/Comparator<TT;>;
+17 -1: parseAbsoluteSpec
+37 -1: ([Ljava/util/HashMap$Node<TK;TV;>;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: <E:Ljava/lang/Object;>()Ljava/util/SortedSet<TE;>;
+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<TK;TV;>;I)V
+112 -1: (Ljava/lang/Object;TV;Ljava/lang/ref/ReferenceQueue<Ljava/lang/Object;>;ILjava/util/WeakHashMap$Entry<TK;TV;>;)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<TT;>;[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: <<ALL FILES>>
+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<TE;Ljava/lang/Boolean;>;
+9 -1: offerLast
+31 -1: ()Ljava/lang/invoke/MethodType;
+40 -1: <E:Ljava/lang/Object;>Ljava/lang/Object;
+17 -1: getObjectVolatile
+14 -1: suspendThreads
+55 -1: (Ljava/lang/String;ZLjava/util/Set;)Lsun/misc/Resource;
+75 -1: <T:Ljava/lang/Object;>(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<Lsun/misc/Resource;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/Collection<TT;>;)Ljava/util/Enumeration<TT;>;
+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<Ljava/lang/Throwable;>;)V
+10 -1: Deque.java
+21 -1: Must be volatile type
+7 -1: setForm
+58 -1: Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Byte;>;
+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<TK;TV;>;Ljava/util/LinkedHashMap$Entry<TK;TV;>;)V
+83 -1: Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable<Ljava/lang/Boolean;>;
+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/Class<*>;>;)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<Ljava/security/ProtectionDomain;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/function/ToLongFunction<-TT;>;)Ljava/util/Comparator<TT;>;
+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<TK;TV;>;)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: <T:Ljava/lang/Object;>(Ljava/util/Set<+TT;>;)Ljava/util/Set<TT;>;
+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: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)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<Ljava/util/Map$Entry<TK;TV;>;>;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<Ljava/lang/Void;>;
+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/Class<+Ljava/lang/annotation/Annotation;>;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<TT;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>([Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;I)Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;
+67 -1: <K:Ljava/lang/Object;V:Ljava/lang/Object;>()Ljava/util/Map<TK;TV;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/Comparator<-TT;>;)Ljava/util/Comparator<TT;>;
+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: <U:Ljava/lang/Object;>(JLjava/util/function/Function<Ljava/util/Map$Entry<TK;TV;>;+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<TE;>;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<Ljava/lang/String;Ljava/lang/String;>;
+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: <T:Ljava/lang/Object;>(Ljava/lang/ClassValue<TT;>;)Ljava/lang/ClassValue$Entry<TT;>;
+11 -1: ISO-8859-15
+40 -1: (Ljava/net/URL;)Ljava/net/URLConnection;
+84 -1: <T:Ljava/lang/Object;:Ljava/lang/Comparable<-TT;>;>(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: <E:Ljava/lang/Object;>Ljava/util/AbstractSet<TE;>;Ljava/util/Set<TE;>;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<Lsun/misc/Launcher$AppClassLoader;>;
+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: <E:Ljava/lang/Object;>Ljava/util/AbstractList<TE;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/NavigableSet<TT;>;)Ljava/util/NavigableSet<TT;>;
+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/Class<*>;>;)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: <T:Ljava/lang/Object;>(Ljava/lang/ThreadLocal<Ljava/lang/ref/SoftReference<TT;>;>;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: <T:Ljava/lang/Object;>([TT;Ljava/util/function/BinaryOperator<TT;>;)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<TT;>;
+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<Ljava/io/BufferedInputStream;[B>;
+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: <T::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TT;>;)[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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Map$Entry<TK;TV;>;
+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: <K:Ljava/lang/Object;V::Ljava/lang/Comparable<-TV;>;>()Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
+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<TK;TV;>;>;)Z
+4 -1: JULY
+10 -1: Exceptions
+41 -1: ()Ljava/util/List<Ljava/io/IOException;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/List<TT;>;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: <T:Ljava/lang/Object;>([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: <T:Ljava/lang/Object;>(Ljava/util/Comparator<TT;>;)Ljava/util/Comparator<TT;>;
+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: <T:Ljava/lang/Object;>([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<TK;>;
+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: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)[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<Ljava/lang/Character;>;
+6 -1: (JJB)V
+66 -1: Ljava/util/Hashtable<Ljava/lang/String;Ljava/net/ContentHandler;>;
+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<Ljava/lang/invoke/MemberName;>;
+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<TK;TV;>;
+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<Ljava/lang/ClassValue$Identity;Ljava/lang/ClassValue$Entry<*>;>;
+9 -1: permClass
+37 -1: (Ljava/security/ProtectionDomain$3;)V
+99 -1: <S::Lsun/reflect/generics/tree/Signature;>Lsun/reflect/generics/repository/AbstractRepository<TS;>;
+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<Ljava/lang/Object;>;
+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<Ljava/util/zip/Inflater;>;
+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<Lsun/misc/URLClassPath$Loader;>;
+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: <U:Ljava/lang/Object;>(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;>;)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<TK;>;
+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<TE;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;E:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Collection<TE;>;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/Locale$LanguageRange;>;Ljava/util/Collection<Ljava/lang/String;>;Ljava/util/Locale$FilteringMode;)Ljava/util/List<Ljava/lang/String;>;
+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: <T:Ljava/lang/Object;>(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<Ljava/lang/String;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/concurrent/ConcurrentMap<TK;TV;>;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<TK;TV;>;
+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<TV;>;
+33 -1: Lsun/reflect/ConstructorAccessor;
+61 -1: Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Integer;>;
+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<Ljava/lang/ThreadLocal<*>;>;
+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<Ljava/nio/ByteBuffer;>;
+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<Ljava/nio/charset/Charset;>;
+30 -1: protocol doesn't support input
+17 -1: getExtClassLoader
+14 -1: setProxiedHost
+73 -1: ()Ljava/util/Map<Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;>;
+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<TE;>;
+22 -1: quickCheckMemberAccess
+29 -1: ()Lsun/net/www/MessageHeader;
+19 -1: getAssignedCombiner
+8 -1: ([JIIJ)I
+17 -1: formatUnsignedInt
+68 -1: <V:Ljava/lang/Object;>Ljava/util/AbstractMap<Ljava/lang/String;TV;>;
+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<Ljava/io/File$PathStatus;>;
+17 -1: availableCharsets
+49 -1: java/util/ArraysParallelSortHelpers$FJChar$Sorter
+22 -1: permission=<classname>
+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: <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;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<Ljava/lang/invoke/MemberName;>;
+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<TT;>;
+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<TE;>;
+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<TT;>;
+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: <T:Ljava/lang/Object;U:Ljava/lang/Object;>([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<TE;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/Set<TT;>;)Ljava/util/Set<TT;>;
+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<Ljava/lang/String;Ljava/lang/reflect/Method;>;
+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<TE;>;
+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<TK;TV;>;)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<Ljava/nio/charset/Charset;>;
+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: <T:Ljava/lang/Object;>([TT;IITT;Ljava/util/Comparator<-TT;>;)I
+15 -1: buildEmptyNames
+11 -1: Thread.java
+30 -1: Ljava/lang/ref/Reference<TT;>;
+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<TT;>;
+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: <U:Ljava/lang/Object;>(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: <T:Ljava/lang/Object;>(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<Ljava/lang/Object;>;
+21 -1: unmodifiableSortedMap
+10 -1: jarHandler
+73 -1: (Ljava/lang/Class;[Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method;
+67 -1: ()Ljava/util/Map<Ljava/lang/Thread;[Ljava/lang/StackTraceElement;>;
+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<Ljava/lang/String;Ljava/lang/Package;>;
+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<TE;>;
+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<Ljava/lang/Short;>;
+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<TK;TV;>;)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: <all actions>
+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<Lsun/util/locale/BaseLocale$Key;>;
+62 -1: ()Ljava/util/Iterator<Ljava/nio/charset/spi/CharsetProvider;>;
+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: <T:Ljava/lang/Object;>()Ljava/util/Set<TT;>;
+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<Lsun/util/locale/BaseLocale$Key;Lsun/util/locale/BaseLocale;>;
+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<Lsun/misc/Launcher$ExtClassLoader;>;
+27 -1: java/nio/DirectShortBufferU
+20 -1: ()[Ljava/lang/Class;
+56 -1: ()[Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;
+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<Ljava/lang/Object;>;
+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: <T:Ljava/lang/Object;>(Ljava/util/List<TT;>;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<TK;TV;>;[Ljava/util/HashMap$Node<TK;TV;>;Z)V
+13 -1: MAX_JVM_ARITY
+72 -1: (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/invoke/MethodType;
+11 -1: AsLIFOQueue
+84 -1: <T:Ljava/lang/Object;>(Ljava/util/List<TT;>;Ljava/lang/Object;)Ljava/util/List<TT;>;
+12 -1: mappingCount
+29 -1: (Ljava/io/FileOutputStream;)V
+50 -1: <T:Ljava/lang/Object;>(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<Ljava/lang/Thread;>;
+8 -1: isNative
+59 -1: Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Short;>;
+24 -1: [Ljava/lang/ThreadGroup;
+24 -1: (B)Ljava/nio/ByteBuffer;
+4 -1: READ
+44 -1: (Ljava/io/FilePermission;)Ljava/lang/String;
+93 -1: <E:Ljava/lang/Object;>Ljava/util/Collections$SynchronizedCollection<TE;>;Ljava/util/Set<TE;>;
+12 -1: compileClass
+12 -1: isProxyClass
+20 -1: isSystemDomainLoader
+74 -1: <T:Ljava/lang/Object;>(Ljava/util/List<TT;>;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<Ljava/lang/String;Ljava/lang/Class<*>;>;
+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<Ljava/lang/Class<*>;>;
+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: <U:Ljava/lang/Object;>(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<Ljava/io/File;Lsun/misc/MetaIndex;>;
+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: <T:Ljava/lang/Object;>(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<Ljava/util/Map$Entry<TK;TV;>;>;JLjava/util/function/LongBinaryOperator;)J
+6 -1: UTF_16
+17 -1: <all permissions>
+13 -1: lookupCharset
+28 -1: ConstructorAccessorImpl.java
+62 -1: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask
+30 -1: Ljava/lang/ClassCastException;
+56 -1: ()Ljava/util/Spliterator<Ljava/util/Map$Entry<TK;TV;>;>;
+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<TK;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/Map<+TK;+TV;>;)Ljava/util/Map<TK;TV;>;
+4 -1: tail
+5 -1: (BB)C
+16 -1: isValidSignature
+9 -1: addMillis
+9 -1: peekFirst
+86 -1: <E:Ljava/lang/Object;>(Ljava/util/Set<TE;>;Ljava/lang/Class<TE;>;)Ljava/util/Set<TE;>;
+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<Ljava/lang/ClassLoader$NativeLibrary;>;
+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<Ljava/util/Date;>;
+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;>;TE;Ljava/util/LinkedList$Node<TE;>;)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: <U:Ljava/lang/Object;>(JLjava/util/function/Function<Ljava/util/Map$Entry<TK;TV;>;+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: <E:Ljava/lang/Object;>(TE;)Ljava/util/Iterator<TE;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/concurrent/ConcurrentHashMap$CollectionView<TK;TV;TV;>;Ljava/util/Collection<TV;>;Ljava/io/Serializable;
+94 -1: <E:Ljava/lang/Object;>Ljava/util/Collections$UnmodifiableCollection<TE;>;Ljava/util/List<TE;>;
+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: <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;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<TK;TV;>;)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<TK;TV;>;
+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<Ljava/lang/String;>;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: <E:Ljava/lang/Object;>Ljava/util/Vector<TE;>;
+4 -1: Sync
+12 -1: H_UNRESERVED
+32 -1: (Ljava/util/Map;)Ljava/util/Set;
+32 -1: (Ljava/util/Map$Entry<TK;TV;>;)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<Ljava/nio/LongBuffer;>;
+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<TK;TV;>;
+6 -1: forJar
+52 -1: <T:Ljava/lang/Object;>Ljava/lang/ref/Reference<TT;>;
+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<Ljava/lang/String;>;
+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<TK;TV;>;
+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<Ljava/lang/String;Ljava/lang/Object;>;
+21 -1: AccessibleObject.java
+53 -1: <E:Ljava/lang/Object;>()Ljava/util/NavigableSet<TE;>;
+88 -1: (Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List;
+17 -1: getAnnotationType
+36 -1: Ljava/util/HashMap$TreeNode<TK;TV;>;
+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<TE;>;)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: .<init>
+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<Ljava/lang/String;Ljava/lang/Class<*>;>;
+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<TK;TV;>;Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;)[Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;
+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: <T:Ljava/lang/Object;U::Ljava/lang/Comparable<-TU;>;>(Ljava/util/function/Function<-TT;+TU;>;)Ljava/util/Comparator<TT;>;
+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/Class<*>;>;)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<Ljava/lang/String;Ljava/lang/invoke/LambdaForm;>;
+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<TT;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(TK;TV;)Ljava/util/Map<TK;TV;>;
+15 -1: charset encoder
+17 -1: getDomainCombiner
+9 -1: EmptyList
+15 -1: java.vm.version
+19 -1: getResourceAsStream
+94 -1: Ljava/lang/ThreadLocal<Ljava/lang/ref/SoftReference<Ljava/lang/StringCoding$StringEncoder;>;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>()Ljava/util/NavigableMap<TK;TV;>;
+6 -1:  final
+5 -1: error
+34 -1: java/lang/ApplicationShutdownHooks
+29 -1: Lsun/launcher/LauncherHelper;
+30 -1: ()Ljava/util/Enumeration<TE;>;
+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<Ljava/lang/String;TT;>;
+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: <T:Ljava/lang/Object;>(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<Ljava/util/Map$Entry<TK;TV;>;>;
+34 -1: getConstructorParameterAnnotations
+4 -1: name
+92 -1: <E:Ljava/lang/Enum<TE;>;>Ljava/lang/Object;Ljava/lang/Comparable<TE;>;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<Ljava/lang/Thread;>;
+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: <T:Ljava/lang/Object;>(Ljava/lang/ClassValue<TT;>;Ljava/lang/ClassValue$Entry<TT;>;)Ljava/lang/ClassValue$Entry<TT;>;
+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<TE;>;
+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: <T:Ljava/lang/Object;>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: <E:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Queue<TE;>;
+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: <T:Ljava/lang/Object;>(TT;)Ljava/util/Set<TT;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>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: <K:Ljava/lang/Object;>(I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView<TK;Ljava/lang/Boolean;>;
+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<Ljava/lang/String;Ljava/io/ExpiringCache$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: <T:Ljava/lang/Object;>(Ljava/lang/ClassValue$Entry<TT;>;)Ljava/lang/ClassValue$Entry<TT;>;
+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<TK;TV;>;
+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/Locale$LanguageRange;>;Ljava/util/Collection<Ljava/lang/String;>;)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: <T:Ljava/lang/Object;>(ITT;)Ljava/util/List<TT;>;
+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<Ljava/lang/Object;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/Comparator<-TV;>;)Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
+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: <T:Ljava/lang/Object;>([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: <T:Ljava/lang/Enum<TT;>;>(Ljava/lang/Class<TT;>;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<TT;>;
+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<TK;TV;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/NavigableMap<TK;+TV;>;)Ljava/util/NavigableMap<TK;TV;>;
+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: <E:Ljava/lang/Object;>Ljava/util/AbstractCollection<TE;>;Ljava/util/List<TE;>;
+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<TT;>;Ljava/lang/Class<TV;>;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<TK;TV;>;
+17 -1: registerDirectory
+8 -1: jarFiles
+69 -1: (Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;
+54 -1: [Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;
+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: <T:Ljava/lang/Object;>([TT;II)Ljava/util/stream/Stream<TT;>;
+47 -1: java.lang.invoke.MethodHandle.COMPILE_THRESHOLD
+9 -1: toInstant
+152 -1: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/NavigableMap<TK;TV;>;Ljava/lang/Class<TK;>;Ljava/lang/Class<TV;>;)Ljava/util/NavigableMap<TK;TV;>;
+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<Ljava/lang/String;>;)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: <T:Ljava/lang/Object;>(Ljava/util/Collection<+TT;>;)Ljava/util/Collection<TT;>;
+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<Ljava/security/Permission;>;
+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<Ljava/lang/Integer;>;
+37 -1: Ljava/lang/Class<Ljava/lang/Double;>;
+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: <T:Ljava/lang/Object;U:Ljava/lang/Object;>(Ljava/util/function/Function<-TT;+TU;>;Ljava/util/Comparator<-TU;>;)Ljava/util/Comparator<TT;>;
+8 -1: (TK;)TK;
+4 -1: java
+136 -1: <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;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<Ljava/lang/ref/SoftReference<Ljava/lang/StringCoding$StringDecoder;>;>;
+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<Ljava/lang/Float;>;
+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<Ljava/lang/Long;>;
+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<Ljava/net/URL;>;
+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/lang/Class<*>;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<Ljava/net/URL;>;
+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<TT;>;
+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: <E:Ljava/lang/Object;>(Ljava/util/Map<TE;Ljava/lang/Boolean;>;)Ljava/util/Set<TE;>;
+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<TE;>;
+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: <K::Ljava/lang/Comparable<-TK;>;V:Ljava/lang/Object;>()Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
+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: <T:Ljava/lang/Object;>(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: <T:Ljava/lang/Object;>(Ljava/lang/ClassValue<TT;>;Ljava/lang/ClassValue$Entry<TT;>;)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: <T:Ljava/lang/Object;>(TT;)Ljava/util/List<TT;>;
+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: <T:Ljava/lang/Object;>([TT;)Ljava/util/Spliterator<TT;>;
+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<Ljava/lang/String;[Ljava/security/cert/Certificate;>;
+6 -1: vclass
+35 -1: (Ljava/util/List;Ljava/util/List;)V
+59 -1: Ljava/lang/Number;Ljava/lang/Comparable<Ljava/lang/Float;>;
+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: <T:Ljava/lang/Object;>([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<Ljava/lang/Throwable;>;
+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<Ljava/lang/String;Ljava/lang/Void;>;
+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<Ljava/util/Locale$LocaleKey;Ljava/util/Locale;>;
+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: <E:Ljava/lang/Object;>Ljava/util/AbstractSet<TE;>;Ljava/util/Set<TE;>;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: <K:Ljava/lang/Object;>()Ljava/util/concurrent/ConcurrentHashMap$KeySetView<TK;Ljava/lang/Boolean;>;
+23 -1: java/util/LinkedHashSet
+9 -1: iso8859_1
+9 -1: iso8859_2
+9 -1: iso8859_4
+66 -1: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)[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<Lsun/misc/URLClassPath$Loader;>;
+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<TT;>;
+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<TE;>;
+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/nio/file/Path;>;Ljava/lang/Iterable<Ljava/nio/file/Path;>;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: <T:Ljava/lang/Object;>(Ljava/util/List<+TT;>;)Ljava/util/List<TT;>;
+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<TK;TV;>;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: <E:Ljava/lang/Object;>Ljava/util/AbstractList<TE;>;Ljava/util/List<TE;>;Ljava/util/RandomAccess;Ljava/lang/Cloneable;Ljava/io/Serializable;
+96 -1: <T:Ljava/lang/Object;>(Ljava/lang/reflect/Constructor<TT;>;)Ljava/lang/reflect/Constructor<TT;>;
+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: <T:Ljava/lang/Object;>(Ljava/security/PrivilegedExceptionAction<TT;>;)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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>()Ljava/util/SortedMap<TK;TV;>;
+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: <U:Ljava/lang/Object;>(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<Ljava/lang/String;Ljava/nio/charset/Charset;>;
+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<Ljava/security/CodeSource;Ljava/security/ProtectionDomain;>;
+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: <E:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Collection<TE;>;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<TE;>;)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<Ljava/lang/Void;>;
+15 -1: CLASS_MODIFIERS
+12 -1: checkedQueue
+13 -1: enumConstants
+10 -1: getFactory
+95 -1: Ljava/util/concurrent/ConcurrentMap<TK;Lsun/util/locale/LocaleObjectCache$CacheEntry<TK;TV;>;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/LinkedHashMap$Entry<TK;TV;>;
+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<*>;>;)[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: <T:Ljava/lang/Object;V:Ljava/lang/Object;>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<TE;Ljava/lang/Object;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/HashMap<TK;TV;>;Ljava/util/Map<TK;TV;>;
+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: <T:Ljava/lang/Object;>(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: <U:Ljava/lang/Object;>(Ljava/lang/Class<TU;>;)Ljava/lang/Class<+TU;>;
+4 -1: Form
+103 -1: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/SortedMap<TK;+TV;>;)Ljava/util/SortedMap<TK;TV;>;
+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/Class<*>;[Ljava/lang/String;>;Ljava/lang/Class<*>;[Ljava/lang/String;)Ljava/util/Map<Ljava/lang/Class<*>;[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<TK;TV;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Map<TK;TV;>;
+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: <T:Ljava/lang/Object;>([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: <U:Ljava/lang/Object;>(JLjava/util/function/Function<Ljava/util/Map$Entry<TK;TV;>;+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: <T:Ljava/lang/Object;>(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: <E:Ljava/lang/Object;>(Ljava/util/SortedSet<TE;>;Ljava/lang/Class<TE;>;)Ljava/util/SortedSet<TE;>;
+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<TE;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>([Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;ILjava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;)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<Ljava/lang/String;Ljava/lang/Object;>;
+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/Locale$LanguageRange;>;Ljava/util/Collection<Ljava/lang/String;>;)Ljava/util/List<Ljava/lang/String;>;
+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<Ljava/lang/Integer;Lsun/misc/Signal;>;
+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<Ljava/security/Permission;>;
+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<TK;TV;>;
+14 -1: resolvedHandle
+27 -1: ()Ljava/util/Iterator<TV;>;
+61 -1: Ljava/util/Map<Ljava/lang/String;Ljava/lang/reflect/Method;>;
+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/nio/CharBuffer;>;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/lang/String;>;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<Ljava/nio/charset/Charset;>;
+4 -1: 7bit
+46 -1: (Ljava/lang/Class<+Ljava/lang/ClassLoader;>;)Z
+76 -1: (ILjava/util/List<Ljava/lang/Class<*>;>;)[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<Ljava/io/File;Lsun/misc/MetaIndex;>;
+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<TK;TV;>;)Ljava/util/HashMap$TreeNode<TK;TV;>;
+21 -1: sun/nio/cs/ISO_8859_1
+8 -1: DST_MASK
+21 -1: Ljava/lang/Throwable;
+108 -1: (Ljava/lang/ref/SoftReference<Ljava/lang/Class$ReflectionData<TT;>;>;I)Ljava/lang/Class$ReflectionData<TT;>;
+32 -1: java/util/Arrays$LegacyMergeSort
+59 -1: ()[Ljava/lang/reflect/TypeVariable<Ljava/lang/Class<TT;>;>;
+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<TK;TV;>;
+19 -1: changeParameterType
+61 -1: Ljava/util/Map<Ljava/lang/String;Ljava/security/Permission;>;
+23 -1: (Ljava/lang/Object;IF)V
+32 -1: (I)Ljava/util/ListIterator<TE;>;
+6 -1: unread
+12 -1: isSubclassOf
+6 -1: (JJJ)V
+3 -1: Key
+105 -1: (Ljava/util/HashMap<TK;TV;>;[Ljava/util/HashMap$Node<TK;TV;>;ITK;TV;)Ljava/util/HashMap$TreeNode<TK;TV;>;
+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: <E:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Collection<TE;>;
+95 -1: (Ljava/util/jar/JarFile;[Ljava/security/CodeSource;)Ljava/util/Enumeration<Ljava/lang/String;>;
+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<Ljava/nio/file/Path;>;
+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<TK;TV;>;
+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<TT;>;
+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: <T:Ljava/lang/Object;>()Ljava/util/Iterator<TT;>;
+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<Ljava/util/jar/Manifest;>;
+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<Lsun/reflect/generics/tree/ClassSignature;>;
+53 -1: (Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)V
+53 -1: Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;
+58 -1: <T:Ljava/lang/Object;>([TT;)Ljava/util/stream/Stream<TT;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/HashMap$TreeNode<TK;TV;>;Ljava/util/HashMap$TreeNode<TK;TV;>;)Ljava/util/HashMap$TreeNode<TK;TV;>;
+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<Ljava/lang/String;>;
+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<Ljava/util/Map$Entry<Ljava/lang/String;TV;>;>;
+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<Ljava/lang/String;Lsun/util/calendar/ZoneInfo;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/ref/SoftReference<TV;>;
+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<Ljava/lang/String;>;
+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<Ljava/lang/String;Ljava/lang/Boolean;>;
+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<Ljava/lang/Object;>;
+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/lang/Class<*>;>;Ljava/util/concurrent/ConcurrentMap<+Ljava/lang/ref/WeakReference<Ljava/lang/Class<*>;>;*>;)V
+8 -1: getClass
+8 -1: user.dir
+6 -1: VALUES
+5 -1: raise
+39 -1: (JLjava/util/function/Consumer<-TV;>;)V
+107 -1: <T:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater<TT;TV;>;
+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<Ljava/lang/Double;>;
+102 -1: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/SortedMap<TK;TV;>;)Ljava/util/SortedMap<TK;TV;>;
+23 -1: printModifiersIfNonzero
+14 -1: getterFunction
+15 -1: ISO-10646-UCS-2
+14 -1: canonizeString
+13 -1: getTotalSpace
+24 -1: synchronizedNavigableSet
+100 -1: <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;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<TK;TV;>;>;)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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/HashMap$Node<TK;TV;>;
+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<Ljava/io/Closeable;>;
+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: <T:Ljava/lang/Object;>(Ljava/lang/ClassValue$Entry<TT;>;)V
+8 -1: contents
+11 -1: user.region
+17 -1: RandomAccess.java
+13 -1: singletonList
+13 -1: policy,access
+64 -1: Ljava/util/Map<Ljava/lang/String;Ljava/io/ExpiringCache$Entry;>;
+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<TE;>;)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: <T:Ljava/lang/Object;>(Ljava/util/function/ToIntFunction<-TT;>;)Ljava/util/Comparator<TT;>;
+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<Ljava/io/Closeable;Ljava/lang/Void;>;
+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<TK;TV;>;
+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: <U:Ljava/lang/Object;>([Ljava/lang/reflect/Constructor<TU;>;)[Ljava/lang/reflect/Constructor<TU;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/Map<TK;TV;>;
+11 -1: isSynthetic
+7 -1: lineBuf
+30 -1: java/lang/annotation/Inherited
+65 -1: <E:Ljava/lang/Object;>Ljava/lang/Object;Ljava/lang/Iterable<TE;>;
+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<TK;TV;>;
+18 -1: interfaceModifiers
+34 -1: java/util/LinkedList$LLSpliterator
+7 -1: REF_???
+23 -1: java/net/ContentHandler
+20 -1: <compiledLambdaForm>
+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<Ljava/lang/String;>;
+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<Ljava/lang/Class<*>;>;)[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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/Comparator<-TK;>;)Ljava/util/Comparator<Ljava/util/Map$Entry<TK;TV;>;>;
+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;>;[Ljava/lang/reflect/Field;)V
+53 -1: <T:Ljava/lang/Object;>(I)Ljava/util/Enumeration<TT;>;
+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<TV;>;
+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<TK;TV;>;>;)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: <T:Ljava/lang/Object;>(TT;)Ljava/util/Spliterator<TT;>;
+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: <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Enumeration<TT;>;Ljava/util/Iterator<TT;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;)Ljava/util/concurrent/ConcurrentHashMap$Node<TK;TV;>;
+14 -1:    Inherited: 
+17 -1: fileTimeToWinTime
+7 -1: ([BI)[B
+26 -1: java/io/OutputStreamWriter
+58 -1: <T:Ljava/lang/Object;>(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<Lsun/misc/Resource;>;
+36 -1: newGetDoubleIllegalArgumentException
+63 -1: (Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection;
+30 -1:     Ergonomics Machine Class: 
+40 -1: ()Ljava/util/Map<Ljava/lang/String;TT;>;
+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: <T::Ljava/lang/Comparable<-TT;>;>()Ljava/util/Comparator<TT;>;
+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<Ljava/lang/invoke/MemberName;>;
+13 -1: getMethodType
+21 -1: FileOutputStream.java
+22 -1: ()Ljava/text/Collator;
+64 -1: <T:Ljava/lang/Object;>(Ljava/security/PrivilegedAction<TT;>;)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/Class<*>;>;)[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: <U:Ljava/lang/Object;W:Ljava/lang/Object;>(Ljava/lang/Class<TU;>;Ljava/lang/Class<TW;>;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater<TU;TW;>;
+4 -1: (D)I
+22 -1: Ljava/lang/Class<TT;>;
+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: <T::Ljava/lang/Comparable<-TT;>;>([TT;)V
+8 -1: ([DII)[D
+8 -1: ([SIIS)I
+8 -1: argument
+12 -1: linkCallSite
+56 -1: <T:Ljava/lang/Object;>Ljava/lang/ref/WeakReference<TT;>;
+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: <U:Ljava/lang/Object;>(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<Ljava/lang/Object;>;
+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<Ljava/io/InputStream;Ljava/util/zip/Inflater;>;
+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<TV;>;
+12 -1: getSeparator
+124 -1: (Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object;
+97 -1: Ljava/util/Map<Ljava/lang/Integer;Ljava/lang/ref/WeakReference<Ljava/nio/charset/CoderResult;>;>;
+21 -1: ConstantCallSite.java
+40 -1: sun/util/locale/provider/LocaleResources
+101 -1: <U::Ljava/lang/Comparable<-TU;>;>(Ljava/util/function/Function<-TT;+TU;>;)Ljava/util/Comparator<TT;>;
+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<TK;TV;>;Ljava/util/HashMap$Node<TK;TV;>;)Ljava/util/HashMap$Node<TK;TV;>;
+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<TT;>;
+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<TK;TV;>;
+44 -1: (TK;TV;Ljava/lang/ref/ReferenceQueue<TV;>;)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/Class<+Ljava/lang/annotation/Annotation;>;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: <no principals>
+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<TK;TV;>;)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<Ljava/lang/String;Lsun/misc/URLClassPath$Loader;>;)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<TT;>;
+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: <T:Ljava/lang/Object;U:Ljava/lang/Object;>([TU;ILjava/lang/Class<+[TT;>;)[TT;
+45 -1: <T:Ljava/lang/Object;>()Ljava/util/List<TT;>;
+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<Ljava/util/jar/JarEntry;>;
+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<Ljava/lang/Long;>;
+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<Ljava/nio/charset/CharsetDecoder;>;
+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: <Unknown>
+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: <T:Ljava/lang/Object;>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<Ljava/lang/ClassLoader$NativeLibrary;>;
+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: <U:Ljava/lang/Object;>(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<TK;TV;>;
+29 -1: referenceKindIsConsistentWith
+11 -1: flushBuffer
+8 -1: putField
+27 -1: ()Ljava/security/PublicKey;
+53 -1: ()Ljava/util/stream/Stream<Ljava/util/jar/JarEntry;>;
+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<Ljava/lang/String;>;
+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<Ljava/lang/reflect/Constructor<TT;>;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/Map<TK;TV;>;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: <T:Ljava/lang/Object;>(Ljava/util/Collection<TT;>;Ljava/lang/Object;)Ljava/util/Collection<TT;>;
+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<Ljava/lang/String;Ljava/nio/charset/Charset;>;
+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:  <no signer certificates>
+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<Ljava/lang/Object;>;
+22 -1: (Ljava/lang/Object;J)S
+69 -1: Ljava/util/HashMap<Ljava/lang/String;Lsun/misc/URLClassPath$Loader;>;
+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<TK;TV;>;
+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<Ljava/lang/String;>;
+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: <T:Ljava/lang/Throwable;>(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<TV;>;
+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: <T:Ljava/lang/Object;>([Ljava/lang/ClassValue$Entry<*>;Ljava/lang/ClassValue<TT;>;)Ljava/lang/ClassValue$Entry<TT;>;
+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<Ljava/lang/String;Ljava/io/ExpiringCache$Entry;>;
+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/String;>;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<Ljava/io/File;>;
+17 -1: [Ljava/lang/Enum;
+41 -1: java/util/Collections$CheckedNavigableSet
+8 -1: asSetter
+3 -1: dom
+41 -1: (I)[Ljava/util/WeakHashMap$Entry<TK;TV;>;
+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<TE;>;
+36 -1: ()Ljava/lang/reflect/Constructor<*>;
+66 -1: ()Ljava/util/Map<Ljava/lang/String;Ljava/lang/invoke/LambdaForm;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>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: <T:Ljava/lang/Object;>(Ljava/util/Set<TT;>;Ljava/lang/Object;)Ljava/util/Set<TT;>;
+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;>;)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<Ljava/lang/String;>;
+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<TV;>;
+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: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/concurrent/ConcurrentHashMap$CollectionView<TK;TV;TK;>;Ljava/util/Set<TK;>;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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/FieldAnnotationsTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary Test for field annotations.
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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<Array<unsigned char>*>*,
+// and is handled by the template class PointerArrayRef<T> 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 <typename T> void MetaspaceClosure::push(Array<T*>** 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/FreeUnusedMetadata.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,118 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary Unused metadata created during dump time should be freed from the CDS archive.
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules jdk.jartool/sun.tools.jar
+ * @compile test-classes/MethodNoReturn.jasm test-classes/Hello.java
+ * @run main 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<max; i++) {
+            if (data[i+0] == iconst_1 && data[i+1] == pop &&
+                data[i+2] == iconst_1 && data[i+3] == pop) {
+                boolean match = true;
+                for (int x=4; x<pattern.length; x++) {
+                    if (data[i+x] != pattern[x]) {
+                        match = false;
+                        break;
+                    }
+                }
+
+                if (match) {
+                    throw new RuntimeException("method of unverifiable class should have been " +
+                        "removed from the archive " + archive +
+                        " , but was found at offset " + i);
+                }
+            }
+        }
+        System.out.println("Not found: method from unverifiable class has been removed");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/HelloExtTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,72 @@
+/*
+ * 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 a simple test for loading a class using the ext class loader in AppCDS
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main 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("org/omg/CORBA/ORB", "[Ljava/lang/Comparable;"),
+        bootClassPath, "-verbose:class", "--add-modules", "java.corba");
+
+    OutputAnalyzer output = TestCommon.execCommon("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+        "-cp", appJar, bootClassPath, "-verbose:class", "--add-modules", "java.corba", "HelloExt");
+
+    String prefix = ".class.load. ";
+    String class_pattern = ".*LambdaForm[$]MH[/][0123456789].*";
+    String suffix = ".*source: shared objects file.*";
+    String pattern = prefix + class_pattern + suffix;
+    output.shouldNotMatch(pattern);
+
+    output = TestCommon.execCommon("-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+        "-cp", appJar, bootClassPath, "-verbose:class",
+        "-XX:+PrintSharedArchiveAndExit", "-XX:+PrintSharedDictionary",
+        "--add-modules", "java.corba", "HelloExt");
+    output.shouldNotMatch(class_pattern);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/HelloTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,44 @@
+/*
+ * 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 Hello World test for AppCDS
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main HelloTest
+ */
+
+public class HelloTest {
+
+  public static void main(String[] args) throws Exception {
+      TestCommon.test(JarBuilder.getOrCreateHelloJar(),
+          TestCommon.list("Hello"), "Hello");
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/IgnoreEmptyClassPaths.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,63 @@
+/*
+ * 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
+ * @summary Test the -XX:+IgnoreEmptyClassPaths flag
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 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");
+
+    OutputAnalyzer output = TestCommon.execCommon(
+        "-verbose:class",
+        "-cp", cp_exec,
+        "-XX:+IgnoreEmptyClassPaths", // should affect classpath even if placed after the "-cp" argument
+        "-XX:+TraceClassPaths",
+        "HelloMore");
+    TestCommon.checkExec(output);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/JarBuilder.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,235 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @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.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+import java.io.File;
+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 \
+    //  <path to output jar> <path to the manifest file>\
+    //   -C <path to the base classes> .\
+    //    --release 9 -C <path to the versioned classes> .
+    // 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<String> args = new ArrayList<String>();
+        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<String> args = new ArrayList<String>();
+        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<String> 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<String> args = new ArrayList<String>();
+        args.add("cf");
+        args.add(jarName);
+        addClassArgs(args, jarclassDir, classNames);
+        createJar(args);
+
+        return jarName;
+    }
+
+    private static void addClassArgs(ArrayList<String> args, String jarclassDir,
+        String[] classNames) {
+
+        for (String name : classNames) {
+            args.add("-C");
+            args.add(jarclassDir);
+            args.add(name + ".class");
+        }
+    }
+
+    private static void createJar(ArrayList<String> 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<String> args = new ArrayList<String>();
+        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 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<String> 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/JvmtiAddPath.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,107 @@
+/*
+ * 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
+ * @summary JvmtiEnv::AddToBootstrapClassLoaderSearch and JvmtiEnv::AddToSystemClassLoaderSearch should disable AppCDS
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @bug 8060592
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @compile test-classes/Hello.java
+ * @compile test-classes/JvmtiApp.java
+ * @run main 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);
+        OutputAnalyzer output = TestCommon.execCommon(opts);
+        TestCommon.checkExec(output, 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");
+        run(check_appcds_disabled, 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);
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/MismatchedUseAppCDS.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,81 @@
+/*
+ * 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 Try different combination of mismatched UseAppCDS between dump time and run time.
+ * (Note: AppCDS does not support uncompressed oops.)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/CheckIfShared.java
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main MismatchedUseAppCDS
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class MismatchedUseAppCDS {
+  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("MismatchedUseAppCDS", "CheckIfShared");
+
+    OutputAnalyzer output;
+
+    // (1): dump with -XX:+UseAppCDS, but run with -XX:-UseAppCDS
+    TestCommon.testDump(appJar, TestCommon.list("CheckIfShared"),
+                        // command-line arguments ...
+                        "-XX:+UseAppCDS",
+                        use_whitebox_jar);
+
+    output = TestCommon.exec(appJar,
+                             // command-line arguments ...
+                             use_whitebox_jar,
+                             "-XX:-UseAppCDS",
+                             "-XX:+UnlockDiagnosticVMOptions",
+                             "-XX:+WhiteBoxAPI",
+                             "CheckIfShared", "false");
+    TestCommon.checkExec(output);
+
+    // (2): dump with -XX:-UseAppCDS, but run with -XX:+UseAppCDS
+    TestCommon.testDump(appJar, TestCommon.list("CheckIfShared"),
+                        // command-line arguments ...
+                        "-XX:-UseAppCDS",
+                        use_whitebox_jar);
+
+    output = TestCommon.exec(appJar,
+                             // command-line arguments ...
+                             use_whitebox_jar,
+                             "-XX:+UseAppCDS",
+                             "-XX:+UnlockDiagnosticVMOptions",
+                             "-XX:+WhiteBoxAPI",
+                             "CheckIfShared", "false");
+    TestCommon.checkExec(output);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/MissingSuperTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.
+ *
+ */
+
+/*
+ * @test
+ * @summary When super class is missing during dumping, no crash should happen.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/MissingSuper.java
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/MultiProcessSharing.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,144 @@
+/*
+ * 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 Run multiple processes with the same archive, ensure they share
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @compile test-classes/MultiProcClass.java
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/MultiReleaseJars.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,238 @@
+/*
+ * 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 MultiReleaseJars
+ * @bug 8170105
+ * @summary Test multi-release jar with AppCDS.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          jdk.jartool/sun.tools.jar
+ * @run main/othervm 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(Runtime.version().major());
+
+    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);
+        }
+        FileOutputStream fos = new FileOutputStream(file);
+        PrintStream ps = new PrintStream(fos);
+        for (String str : contents) {
+            ps.println(str);
+        }
+        ps.close();
+        fos.close();
+    }
+
+    /* version.jar entries and files:
+     * META-INF/
+     * META-INF/MANIFEST.MF
+     * version/
+     * version/Main.class
+     * version/Version.class
+     * META-INF/versions/
+     * META-INF/versions/<major-version>/
+     * META-INF/versions/<major-version>/version/
+     * META-INF/versions/<major-version>/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 verboseMode        = "-verbose:class";
+        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, verboseMode, 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, verboseMode, 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, verboseMode, 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, verboseMode, 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, verboseMode, 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, verboseMode, mainClass);
+        checkExecOutput(output, "I am running on version " + MAJOR_VERSION_STRING);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/OldClassTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,167 @@
+/*
+ * 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
+ * @summary classes with major version < JDK_1.5 (48) should not be included in CDS
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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 1.5 compiled classes should be excluded from the dump
+    OutputAnalyzer output = TestCommon.dump(jar, appClasses);
+    TestCommon.checkExecReturn(output, 0, true, "Pre JDK 1.5 class not supported by CDS");
+
+    output = TestCommon.execCommon(
+        "-cp", jar,
+        "-verbose:class",
+        "Hello");
+    TestCommon.checkExecReturn(output, 0, true, "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 1.5 class not supported by CDS");
+
+    output = TestCommon.execCommon(
+        "-cp", classpath,
+        "-verbose:class",
+        "Hello");
+    TestCommon.checkExecReturn(output, 0, true, "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 <<EOF
+public class Hello {
+    public static void main(String args[]) {
+        System.out.println(\u1234());
+    }
+    static String \u1234() {
+        return "Hello Unicode world (Old)";
+    }
+}
+EOF
+javac Hello.java
+java jdk.internal.org.objectweb.asm.util.ASMifier Hello.class
+
+ */
+
+  static byte[] makeOldHello() throws Exception {
+    ClassWriter cw = new ClassWriter(0);
+    FieldVisitor fv;
+    MethodVisitor mv;
+    AnnotationVisitor av0;
+
+//WAS cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "Hello", null, "java/lang/Object", null);
+      cw.visit(V1_4, ACC_PUBLIC + ACC_SUPER, "Hello", null, "java/lang/Object", null);
+
+    {
+      mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+      mv.visitCode();
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/PackageSealing.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,60 @@
+/*
+ * 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
+ * @summary AppCDS handling of package.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ * @compile test-classes/C1.java
+ * @compile test-classes/C2.java
+ * @compile test-classes/PackageSealingTest.java
+ * @run main PackageSealing
+ */
+
+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");
+
+        // test shared package from -cp path
+        TestCommon.testDump(appJar, TestCommon.list(classList));
+        OutputAnalyzer output;
+        output = TestCommon.exec(appJar, "PackageSealingTest");
+        TestCommon.checkExec(output, "OK");
+
+        // test shared package from -Xbootclasspath/a
+        TestCommon.dump(appJar, TestCommon.list(classList),
+                        "-Xbootclasspath/a:" + appJar);
+        output = TestCommon.exec(appJar, "-Xbootclasspath/a:" + appJar, "PackageSealingTest");
+        TestCommon.checkExec(output, "OK");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ParallelLoad2.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,64 @@
+/*
+ * 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
+ * @summary Load app classes from CDS archive in parallel threads. Similar to ParallelLoad.java, but each class in its own JAR
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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<MAX_CLASSES; i++) {
+      JarBuilder.build("parallel_load2_" + i, "ParallelClass" + i);
+    }
+
+    String cp = TestCommon.getTestJar("parallel_load2.jar");
+    for (int i=0; i<MAX_CLASSES; i++) {
+      cp += File.pathSeparator + TestCommon.getTestJar("parallel_load2_" + i + ".jar");
+    }
+
+    String[] class_list = new String[MAX_CLASSES + 2];
+    for (int i=0; i<MAX_CLASSES; i++) {
+      class_list[i] = "ParallelClass" + i;
+    }
+    class_list[class_list.length - 1] = "ParallelLoad";
+    class_list[class_list.length - 2] = "ParallelLoadThread";
+
+    TestCommon.test(cp, class_list,
+                          "ParallelLoad");
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ParallelLoadTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,64 @@
+/*
+ * 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
+ * @summary Load app classes from CDS archive in parallel threads
+ * AppCDS does not support uncompressed oops
+ * @library /test/lib
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/ParallelLoad.java
+ * @compile test-classes/ParallelClasses.java
+ * @run main ParallelLoadTest
+ */
+
+public class ParallelLoadTest {
+    public static final int MAX_CLASSES = 40;
+
+    public static void main(String[] args) throws Exception {
+        JarBuilder.build("parallel_load", getClassList(true));
+        String appJar = TestCommon.getTestJar("parallel_load.jar");
+        TestCommon.test(appJar, getClassList(false), "ParallelLoad");
+    }
+
+    private static String[] getClassList(boolean includeWatchdog) {
+        int extra = includeWatchdog ? 3 : 2;
+        String[] classList = new String[MAX_CLASSES + extra];
+
+        int i;
+        for (i=0; i<MAX_CLASSES; i++) {
+            classList[i] = "ParallelClass" + i;
+        }
+
+        classList[i++] = "ParallelLoad";
+        classList[i++] = "ParallelLoadThread";
+        if (includeWatchdog)
+            classList[i++] = "ParallelLoadWatchdog";
+
+        return classList;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/PrintSharedArchiveAndExit.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,148 @@
+/*
+ * 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
+ * @summary test the -XX:+PrintSharedArchiveAndExit flag
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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"));
+
+    OutputAnalyzer output;
+
+    log("Normal execution -- all the JAR paths should be checked");
+    output = TestCommon.execCommon(
+        "-cp", cp,
+        "-XX:+PrintSharedArchiveAndExit");
+    check(output, 0, true, lastCheckMsg);
+
+    output = TestCommon.execCommon(
+        "-cp", cp,
+        "-XX:+PrintSharedArchiveAndExit",
+        "-XX:+PrintSharedDictionary");  // Test PrintSharedDictionary as well.
+    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().");
+    output = TestCommon.execCommon("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "-version");
+    check(output, 0, true, lastCheckMsg);
+
+    output = TestCommon.execCommon("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "-help");
+    check(output, 0, true, lastCheckMsg);
+
+    output = TestCommon.execCommon("-cp", cp, "-XX:+PrintSharedArchiveAndExit", "Hello");
+    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");
+    output = TestCommon.execCommon(
+        "-cp", cp,
+        "-Xbootclasspath/a:foo.jar",
+        "-XX:+PrintSharedArchiveAndExit");
+    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");
+    output = TestCommon.execCommon(
+        "-cp", ".",
+        "-XX:+PrintSharedArchiveAndExit");
+    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");
+    String invalidCP = "non-existing-dir" + File.pathSeparator + cp;
+    output = TestCommon.execCommon(
+        "-cp", invalidCP,
+        "-XX:+PrintSharedArchiveAndExit");
+    check(output, 1, true, lastCheckMsg, "APP classpath mismatch, actual: -Djava.class.path=" + invalidCP);
+
+    log("Changed modification time of hello.jar -- all the JAR paths should be checked");
+    (new File(appJar)).setLastModified(System.currentTimeMillis() + 2000);
+    output = TestCommon.execCommon(
+        "-cp", cp,
+        "-XX:+PrintSharedArchiveAndExit");
+    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.");
+    output = TestCommon.execCommon(
+        "-cp", cp,
+        "-XX:+PrintSharedArchiveAndExit",
+        "-XX:+PrintSharedDictionary");  // Test PrintSharedDictionary as well.
+    check(output, 1, true, lastCheckMsg, "java.lang.Object");
+
+
+    log("Remove hello.jar -- all the JAR paths should be checked");
+    (new File(appJar)).delete();
+    output = TestCommon.execCommon(
+        "-cp", cp,
+        "-XX:+PrintSharedArchiveAndExit");
+    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.");
+    output = TestCommon.execCommon(
+        "-cp", cp,
+        "-XX:+PrintSharedArchiveAndExit",
+        "-XX:SharedArchiveFile=./no-such-fileappcds.jsa");
+    check(output, 1, false, lastCheckMsg);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ProhibitedPackage.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,101 @@
+/*
+ * 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
+ * @summary AppCDS handling of prohibited package.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/ProhibitedHelper.java test-classes/Prohibited.jasm
+ * @run main ProhibitedPackage
+ */
+
+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");
+
+        // AppCDS for custom loader is only supported on linux-x64 and
+        // Solaris 64-bit platforms.
+        if ((Platform.isLinux() || Platform.isSolaris()) &&
+            Platform.is64bit()) {
+            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,
+                            "-XX:+PrintSystemDictionaryAtExit")
+                .shouldContain("Dumping")
+                .shouldNotContain("java.lang.Prohibited")
+                .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"),
+                        "-XX:+PrintSystemDictionaryAtExit")
+            .shouldContain("Dumping")
+            .shouldNotContain("java.lang.Prohibited")
+            .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
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+            "-cp", appJar, "-Xlog:class+load=info", "ProhibitedHelper");
+        TestCommon.checkExec(output, "Prohibited package name: java.lang");
+
+        // -Xshare:auto
+        output = TestCommon.execAuto(
+            "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+            "-cp", appJar, "-Xlog:class+load=info", "ProhibitedHelper");
+        TestCommon.checkExec(output, "Prohibited package name: java.lang");
+
+        // -Xshare:off
+        output = TestCommon.execOff(
+            "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+            "-cp", appJar, "-Xlog:class+load=info", "ProhibitedHelper");
+        output.shouldContain("Prohibited package name: java.lang");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/ProtectionDomain.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,73 @@
+/*
+ * 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
+ * @summary AppCDS handling of protection domain.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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",
+                         "sun/tools/javac/Main",
+                         "jdk/nio/zipfs/ZipInfo",
+                         "java/net/URL",
+                         "sun/rmi/rmic/Main",
+                         "com/sun/jndi/dns/DnsName"));
+
+    OutputAnalyzer output;
+
+    // First class is loaded from CDS, second class is loaded from JAR
+    output = TestCommon.exec(appJar, "-verbose:class", "ProtDomain");
+    TestCommon.checkExec(output, "Protection Domains match");
+
+    // First class is loaded from JAR, second class is loaded from CDS
+    output = TestCommon.exec(appJar, "-verbose:class", "ProtDomainB");
+    TestCommon.checkExec(output, "Protection Domains match");
+
+    // Test ProtectionDomain for application and extension module classes from the
+    // "modules" jimage
+    output = TestCommon.exec(appJar, "-verbose:class", "JimageClassProtDomain");
+    output.shouldNotContain("Failed: Protection Domains do not match");
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/RewriteBytecodesTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,65 @@
+/*
+ * 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 Use ClassLoader.defineClass() to load a class with rewritten bytecode. Make sure
+ *          the archived class with the same name is not loaded.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,386 @@
+/*
+ * 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
+ *  @summary SharedArchiveConsistency
+ *   AppCDS does not support uncompressed oops
+ *  @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ *  @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 main 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;    // FileMapHeader::_magic
+    public static int sp_offset_crc;   // FileMapHeader::space_info::_crc
+    public static int file_header_size = -1;// total size of header, variant, need calculation
+    public static int space_info_size; // size of space_info
+    public static int sp_offset;       // offset of FileMapHeader::space_info
+    public static int sp_used_offset;  // offset of space_info::_used
+    public static int size_t_size;     // size of size_t
+
+    public static File jsa;        // will be updated during test
+    public static File orgJsaFile; // kept the original file not touched.
+    public static String[] shared_region_name = {"MiscCode", "ReadWrite", "ReadOnly", "MiscData"};
+    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");
+        sp_offset_crc = wb.getOffsetForName("space_info::_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("space_info::_used") - sp_offset_crc;
+        size_t_size = wb.getOffsetForName("size_t_size");
+        space_info_size  = wb.getOffsetForName("space_info_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
+        file_header_size = wb.getOffsetForName("file_header_size");
+        int offset_path_misc_info = wb.getOffsetForName("FileMapHeader::_paths_misc_info_size") -
+            offset_magic;
+        int path_misc_info_size   = (int)readInt(fc, offset_path_misc_info, size_t_size);
+        file_header_size += path_misc_info_size; //readInt(fc, offset_path_misc_info, size_t_size);
+        System.out.println("offset_path_misc_info = " + offset_path_misc_info);
+        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() throws Exception {
+        List<StandardOpenOption> arry = new ArrayList<StandardOpenOption>();
+        arry.add(READ);
+        arry.add(WRITE);
+        return FileChannel.open(jsa.toPath(), new HashSet<StandardOpenOption>(arry));
+    }
+
+    public static void modifyJsaContentRandomly() throws Exception {
+        FileChannel fc = getFileChannel();
+        // corrupt random area in the data areas (MiscCode, ReadWrite, ReadOnly, MiscData)
+        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("%-12s%-12s%-12s%-12s%-12s\n", "Space Name", "Offset", "Used bytes", "Reg Start", "Random Offset");
+        start0 = getFileHeaderSize(fc);
+        for (int i = 0; i < num_regions; i++) {
+            used_offset = sp_offset + space_info_size * i + sp_used_offset;
+            // read 'used'
+            used[i] = readInt(fc, used_offset, size_t_size);
+            start = start0;
+            for (int j = 0; j < i; j++) {
+                start += align_up_page(used[j]);
+            }
+            end = start + used[i];
+            off = getRandomBetween(start, end);
+            System.out.printf("%-12s%-12d%-12d%-12d%-12d\n", shared_region_name[i], used_offset, 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();
+        }
+    }
+
+    public static void modifyJsaContent() throws Exception {
+        FileChannel fc = getFileChannel();
+        byte[] buf = new byte[4096];
+        ByteBuffer bbuf = ByteBuffer.wrap(buf);
+
+        long total = 0L;
+        long used_offset = 0L;
+        long[] used = new long[num_regions];
+        System.out.printf("%-12s%-12s\n", "Space name", "Used bytes");
+        for (int i = 0; i < num_regions; i++) {
+            used_offset = sp_offset + space_info_size* i + sp_used_offset;
+            // read 'used'
+            used[i] = readInt(fc, used_offset, size_t_size);
+            System.out.printf("%-12s%-12d\n", shared_region_name[i], used[i]);
+            total += used[i];
+        }
+        System.out.printf("%-12s%-12d\n", "Total: ", total);
+        long corrupt_used_offset =  getFileHeaderSize(fc);
+        System.out.println("Corrupt RO section, offset = " + corrupt_used_offset);
+        while (used_offset < used[0]) {
+            writeData(fc, corrupt_used_offset, bbuf);
+            bbuf.clear();
+            used_offset += 4096;
+        }
+        fc.force(true);
+        if (fc.isOpen()) {
+            fc.close();
+        }
+    }
+
+    public static void modifyJsaHeader() throws Exception {
+        FileChannel fc = getFileChannel();
+        // screw up header info
+        byte[] buf = new byte[getFileHeaderSize(fc)];
+        ByteBuffer bbuf = ByteBuffer.wrap(buf);
+        writeData(fc, 0L, bbuf);
+        if (fc.isOpen()) {
+            fc.close();
+        }
+    }
+
+    public static void copyFile(File from, File to) throws Exception {
+        if (to.exists()) {
+            if(!to.delete()) {
+                throw new IOException("Could not delete file " + to);
+            }
+        }
+        to.createNewFile();
+        setReadWritePermission(to);
+        Files.copy(from.toPath(), to.toPath(), REPLACE_EXISTING);
+    }
+
+    // Copy file with bytes deleted or inserted
+    // del -- true, deleted, false, inserted
+    public static void copyFile(File from, File to, boolean del) throws Exception {
+        FileChannel inputChannel = null;
+        FileChannel outputChannel = null;
+        try {
+            inputChannel = new FileInputStream(from).getChannel();
+            outputChannel = new FileOutputStream(to).getChannel();
+            long size = inputChannel.size();
+            int init_size = getFileHeaderSize(inputChannel);
+            outputChannel.transferFrom(inputChannel, 0, init_size);
+            int n = (int)getRandomBetween(0, 1024);
+            if (del) {
+                System.out.println("Delete " + n + " bytes at data start section");
+                inputChannel.position(init_size + n);
+                outputChannel.transferFrom(inputChannel, init_size, size - init_size - n);
+            } else {
+                System.out.println("Insert " + n + " bytes at data start section");
+                outputChannel.position(init_size);
+                outputChannel.write(ByteBuffer.wrap(new byte[n]));
+                outputChannel.transferFrom(inputChannel, init_size + n , size - init_size);
+            }
+        } finally {
+            inputChannel.close();
+            outputChannel.close();
+        }
+    }
+
+    public static void restoreJsaFile() throws Exception {
+        Files.copy(orgJsaFile.toPath(), jsa.toPath(), REPLACE_EXISTING);
+    }
+
+    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 void testAndCheck(String[] execArgs) throws Exception {
+        OutputAnalyzer output = TestCommon.execCommon(execArgs);
+        String stdtxt = output.getOutput();
+        System.out.println("Note: this test may fail in very rare occasions due to CRC32 checksum collision");
+        for (String message : matchMessages) {
+            if (stdtxt.contains(message)) {
+                // match any to return
+                return;
+            }
+        }
+        TestCommon.checkExec(output);
+    }
+
+    // dump with hello.jsa, then
+    // read the jsa file
+    //   1) run normal
+    //   2) modify header
+    //   3) keep header correct but modify content
+    //   4) update both header and content, test
+    //   5) delete bytes in data begining
+    //   6) insert bytes in data begining
+    //   7) randomly corrupt data in four areas: RO, RW. MISC DATA, MISC CODE
+    public static void main(String... args) throws Exception {
+        // must call to get offset info first!!!
+        getFileOffsetInfo();
+        Path currentRelativePath = Paths.get("");
+        String currentDir = currentRelativePath.toAbsolutePath().toString();
+        System.out.println("Current relative path is: " + currentDir);
+        // get jar file
+        String jarFile = JarBuilder.getOrCreateHelloJar();
+
+        // dump (appcds.jsa created)
+        TestCommon.testDump(jarFile, null);
+
+        // test, should pass
+        System.out.println("1. Normal, should pass but may fail\n");
+        String[] execArgs = {"-cp", jarFile, "Hello"};
+
+        OutputAnalyzer output = TestCommon.execCommon(execArgs);
+
+        try {
+            TestCommon.checkExecReturn(output, 0, true, "Hello World");
+        } catch (Exception e) {
+            TestCommon.checkExecReturn(output, 1, true, matchMessages[0]);
+        }
+
+        // get current archive name
+        jsa = new File(TestCommon.getCurrentArchiveName());
+        if (!jsa.exists()) {
+            throw new IOException(jsa + " does not exist!");
+        }
+
+        setReadWritePermission(jsa);
+
+        // save as original untouched
+        orgJsaFile = new File(new File(currentDir), "appcds.jsa.bak");
+        copyFile(jsa, orgJsaFile);
+
+
+        // modify jsa header, test should fail
+        System.out.println("\n2. Corrupt header, should fail\n");
+        modifyJsaHeader();
+        output = TestCommon.execCommon(execArgs);
+        output.shouldContain("The shared archive file has the wrong version");
+        output.shouldNotContain("Checksum verification failed");
+
+        // modify content
+        System.out.println("\n3. Corrupt Content, should fail\n");
+        copyFile(orgJsaFile, jsa);
+        modifyJsaContent();
+        testAndCheck(execArgs);
+
+        // modify both header and content, test should fail
+        System.out.println("\n4. Corrupt Header and Content, should fail\n");
+        copyFile(orgJsaFile, jsa);
+        modifyJsaHeader();
+        modifyJsaContent();  // this will not be reached since failed on header change first
+        output = TestCommon.execCommon(execArgs);
+        output.shouldContain("The shared archive file has the wrong version");
+        output.shouldNotContain("Checksum verification failed");
+
+        // delete bytes in data sectoin
+        System.out.println("\n5. Delete bytes at begining of data section, should fail\n");
+        copyFile(orgJsaFile, jsa, true);
+        testAndCheck(execArgs);
+
+        // insert bytes in data sectoin forward
+        System.out.println("\n6. Insert bytes at begining of data section, should fail\n");
+        copyFile(orgJsaFile, jsa, false);
+        testAndCheck(execArgs);
+
+        System.out.println("\n7. modify Content in random areas, should fail\n");
+        copyFile(orgJsaFile, jsa);
+        modifyJsaContentRandomly();
+        testAndCheck(execArgs);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/SharedArchiveFile.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,83 @@
+/*
+ * 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
+ * @summary The diagnostic option, -XX:SharedArchiveFile can be unlocked using -XX:+UseAppCDS
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main SharedArchiveFile
+ */
+
+import jdk.test.lib.Platform;
+import jdk.test.lib.cds.CDSTestUtils;
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+import java.util.Properties;
+
+public class SharedArchiveFile {
+    public static void main(String[] args) throws Exception {
+        boolean isProduct = !Platform.isDebugBuild();
+        String appJar = JarBuilder.getOrCreateHelloJar();
+
+        // 1) Using -XX:SharedArchiveFile without -XX:+UseAppCDS should fail
+        //    on product binary without -XX:+UnlockDiagnosticVMOptions.
+        if (isProduct) {
+            ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
+                "-XX:SharedArchiveFile=./SharedArchiveFile.jsa", "-Xshare:dump");
+            OutputAnalyzer out = CDSTestUtils.executeAndLog(pb, "dump");
+            out.shouldContain("Error: VM option 'SharedArchiveFile' is diagnostic and must be enabled via -XX:+UnlockDiagnosticVMOptions.");
+        }
+
+        // 2) Dumping with -XX:+UnlockDiagnosticVMOptions -XX:SharedArchiveFile
+        //    should always succeed.
+        CDSTestUtils.createArchive("-XX:+UnlockDiagnosticVMOptions")
+            .shouldContain("Dumping");
+
+        // 3) Using -XX:SharedArchiveFile with -XX:+UseAppCDS should work
+        //    on product binary by default.
+        OutputAnalyzer output3 = TestCommon.dump(appJar, TestCommon.list("Hello"));
+        output3.shouldContain("Dumping");
+        output3 = TestCommon.exec(appJar, "Hello");
+        TestCommon.checkExec(output3, "Hello World");
+
+        // 4) Using -XX:+UseAppCDS should not affect other diagnostic flags,
+        //    such as LogEvents
+        OutputAnalyzer output4 = TestCommon.exec(appJar, "-XX:+LogEvents", "Hello");
+        if (isProduct) {
+            output4.shouldContain("Error: VM option 'LogEvents' is diagnostic and must be enabled via -XX:+UnlockDiagnosticVMOptions.");
+        } else {
+            TestCommon.checkExec(output4, "Hello World");
+        }
+
+        // 5) 8066921 - Extra -XX:+UseAppCDS
+        TestCommon.testDump(appJar, TestCommon.list("Hello"), "-XX:+UseAppCDS");
+        OutputAnalyzer output5 = TestCommon.exec(appJar, "-XX:+UseAppCDS", "Hello");
+        TestCommon.checkExec(output5);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/SharedBaseAddress.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/SharedPackages.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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
+ * @summary AppCDS handling of package.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/SignedJar.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,69 @@
+/*
+ * 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
+ * @summary AppCDS handling of signed JAR.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main 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, "Preload Warning: Skipping Hello from 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, "Preload Warning: Skipping Hello from signed JAR");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/SpecifySysLoaderProp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,107 @@
+/*
+ * 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
+ *  @summary If -Djava.system.class.loader=xxx is specified in command-line, disable UseAppCDS
+ *  AppCDS does not support uncompressed oops
+ *  @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ *  @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 main 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: UseAppCDS is 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
+    OutputAnalyzer output = TestCommon.execCommon(
+        "-verbose:class",
+        "-cp", appJar,
+        "ReportMyLoader");
+    TestCommon.checkExec(output,
+                         "[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
+    output = TestCommon.execCommon(
+        "-cp", appJar,
+        "-Djava.system.class.loader=no.such.Klass",
+        "ReportMyLoader");
+    try {
+        output.shouldContain(warning);
+        output.shouldContain("ClassNotFoundException: no.such.Klass");
+    } catch (Exception e) {
+        TestCommon.checkCommonExecExceptions(output, e);
+    }
+
+    // (2) Try to execute the archive with -Djava.system.class.loader=TestClassLoader,
+    //     it should run, but AppCDS should be disabled
+    output = TestCommon.execCommon(
+        "-verbose:class",
+        "-cp", appJar,
+        "-Djava.system.class.loader=TestClassLoader",
+        "ReportMyLoader");
+    TestCommon.checkExec(output,
+                         "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.
+    try {
+        output.shouldMatch(".class,load. TestClassLoader source: file:");
+        output.shouldMatch(".class,load. ReportMyLoader source: file:.*" + jarFileName);
+    } catch (Exception e) {
+        TestCommon.checkCommonExecExceptions(output, e);
+    }
+
+    // (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.
+    output = TestCommon.execCommon(
+        "-verbose:class",
+        "-cp", appJar,
+        "TrySwitchMyLoader");
+    TestCommon.checkExec(output,
+                         "[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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/TestCommon.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,339 @@
+/*
+ * 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 jdk.test.lib.Utils;
+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.process.ProcessTools;
+import jdk.test.lib.process.OutputAnalyzer;
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+/**
+ * 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 + "appcds-";
+
+    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 = JSA_FILE_PREFIX +
+            timeStampFormat.format(new Date()) + ".jsa";
+    }
+
+    // Call this method to get current archive name
+    public static String getCurrentArchiveName() {
+        return currentArchiveName;
+    }
+
+    // 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 appClasses[],
+                                               String... suffix) throws Exception {
+        return createArchive(appJar, appClasses, suffix);
+    }
+
+
+    // Create AppCDS archive using most common args - convenience method
+    public static OutputAnalyzer createArchive(String appJar, String appClasses[],
+                                               String... suffix) throws Exception {
+        AppCDSOptions opts = (new AppCDSOptions()).setAppJar(appJar)
+            .setAppClasses(appClasses);
+        opts.addSuffix(suffix);
+        return createArchive(opts);
+    }
+
+
+    // Create AppCDS archive using appcds options
+    public static OutputAnalyzer createArchive(AppCDSOptions opts)
+        throws Exception {
+
+        ArrayList<String> cmd = new ArrayList<String>();
+        File classList = makeClassList(opts.appClasses);
+        startNewArchiveName();
+
+        for (String p : opts.prefix) cmd.add(p);
+
+        if (opts.appJar != null) {
+            cmd.add("-cp");
+            cmd.add(opts.appJar);
+        } else {
+            cmd.add("-cp");
+            cmd.add("\"\"");
+        }
+
+        cmd.add("-Xshare:dump");
+        cmd.add("-Xlog:cds,cds+hashtables");
+        cmd.add("-XX:+UseAppCDS");
+        cmd.add("-XX:ExtraSharedClassListFile=" + classList.getPath());
+
+        if (opts.archiveName == null)
+            opts.archiveName = getCurrentArchiveName();
+
+        cmd.add("-XX:SharedArchiveFile=" + opts.archiveName);
+
+        for (String s : opts.suffix) cmd.add(s);
+
+        String[] cmdLine = cmd.toArray(new String[cmd.size()]);
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine);
+        return executeAndLog(pb, "dump");
+    }
+
+
+    // Execute JVM using AppCDS archive with specified AppCDSOptions
+    public static OutputAnalyzer runWithArchive(AppCDSOptions opts)
+        throws Exception {
+
+        ArrayList<String> cmd = new ArrayList<String>();
+
+        for (String p : opts.prefix) cmd.add(p);
+
+        cmd.add("-Xshare:" + opts.xShareMode);
+        cmd.add("-XX:+UseAppCDS");
+        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);
+
+        String[] cmdLine = cmd.toArray(new String[cmd.size()]);
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true, cmdLine);
+        return executeAndLog(pb, "exec");
+    }
+
+
+    public static OutputAnalyzer execCommon(String... suffix) throws Exception {
+        AppCDSOptions opts = (new AppCDSOptions());
+        opts.addSuffix(suffix);
+        return 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 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);
+    }
+
+    public static OutputAnalyzer execModule(String prefix[], String upgrademodulepath, String modulepath,
+                                            String mid, String... testClassArgs)
+        throws Exception {
+
+        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 runWithArchive(opts);
+    }
+
+
+    // A common operation: dump, then check results
+    public static OutputAnalyzer testDump(String appJar, String appClasses[],
+                                          String... suffix) throws Exception {
+        OutputAnalyzer output = dump(appJar, appClasses, suffix);
+        output.shouldContain("Loading classes to share");
+        output.shouldHaveExitValue(0);
+        return output;
+    }
+
+
+    /**
+     * Simple test -- dump and execute appJar with the given appClasses in classlist.
+     */
+    public static OutputAnalyzer test(String appJar, String appClasses[], String... args)
+        throws Exception {
+        testDump(appJar, appClasses);
+
+        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<String> stringList = new ArrayList<String>();
+        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<String> list = new ArrayList<String>();
+        for (String s : prefix) {
+            list.add(s);
+        }
+        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();
+    }
+
+
+    // Returns true if custom loader is supported, based on a platform.
+    // Custom loader AppCDS is only supported for Linux-x64 and Solaris.
+    public static boolean isCustomLoaderSupported() {
+        boolean isLinux = Platform.isLinux();
+        boolean isX64 = Platform.isX64();
+        boolean isSolaris = Platform.isSolaris();
+
+        System.out.println("isCustomLoaderSupported: isX64 = " + isX64);
+        System.out.println("isCustomLoaderSupported: isLinux = " + isLinux);
+        System.out.println("isCustomLoaderSupported: isSolaris = " + isSolaris);
+
+        return ((isX64 && isLinux) || isSolaris);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/TraceLongClasspath.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,105 @@
+/*
+ * 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
+ * @summary ensure -XX:+TraceClassPaths showing entire expecting app classpath
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main 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 longClassPath =
+            "/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";
+
+        longClassPath += ps + appJar;
+        // Dump an archive with a specified JAR file in -classpath
+        TestCommon.testDump(longClassPath, 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.
+        OutputAnalyzer output = TestCommon.execCommon(
+            "-XX:+TraceClassPaths",
+            "-cp", appJar,
+            "Hello");
+        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(longClassPath);
+        output.shouldHaveExitValue(1);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/UseAppCDS.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,228 @@
+/*
+ * 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
+ * @summary Testing use of UseAppCDS flag
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @build UseAppCDS_Test
+ * @run main UseAppCDS
+ */
+
+import jdk.test.lib.JDKToolLauncher;
+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 UseAppCDS {
+
+    // 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 CLASSES_DIR = System.getProperty("test.classes", ".");
+    private static final String CLASSLIST_FILE = "./UseAppCDS.classlist";
+    private static final String ARCHIVE_FILE = "./shared.jsa";
+    private static final String BOOTCLASS = "java.lang.Class";
+
+    public static void main(String[] args) throws Exception {
+
+        // First create a jar file for the application "test" class
+        JDKToolLauncher jar = JDKToolLauncher.create("jar")
+            .addToolArg("-cf")
+            .addToolArg(TESTJAR)
+            .addToolArg("-C")
+            .addToolArg(CLASSES_DIR)
+            .addToolArg(TESTCLASS);
+
+        ProcessBuilder pb = new ProcessBuilder(jar.getCommand());
+        TestCommon.executeAndLog(pb, "jar01").shouldHaveExitValue(0);
+
+        pb = new ProcessBuilder(jar.getCommand());
+        TestCommon.executeAndLog(pb, "jar02").shouldHaveExitValue(0);
+
+        // In all tests the BOOTCLASS should be loaded/dumped/used
+
+        // Test 1: No AppCDS - dumping loaded classes excludes the "test" classes
+        dumpLoadedClasses(false, new String[] { BOOTCLASS },
+                          new String[] { TESTNAME });
+
+        // Test 2:    AppCDS - dumping loaded classes includes "test" classes
+        dumpLoadedClasses(true, new String[] { BOOTCLASS, TESTNAME },
+                          new String[0]);
+
+        // Next tests rely on the classlist we just dumped
+
+        // Test 3: No AppCDS - "test" classes in classlist ignored when dumping
+        dumpArchive(false, new String[] { BOOTCLASS },
+                    new String[] { TESTNAME});
+
+        // Test 4:    AppCDS - "test" classes in classlist are dumped
+        dumpArchive(true, new String[] { BOOTCLASS, TESTNAME },
+                    new String[0]);
+
+        // Next tests rely on the archive we just dumped
+
+        // Test 5: No AppCDS - Using archive containing "test" classes ignores them
+        useArchive(false, new String[] { BOOTCLASS },
+                   new String[] { TESTNAME });
+
+        // Test 6:    AppCDS - Using archive containing "test" classes loads them
+        useArchive(true, new String[] { BOOTCLASS, TESTNAME },
+                   new String[0]);
+    }
+
+    public static List<String> toClassNames(String filename) throws IOException {
+        ArrayList<String> classes = new ArrayList<>();
+        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(boolean useAppCDS, String[] expectedClasses,
+                                  String[] unexpectedClasses) throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+            true,
+            "-XX:DumpLoadedClassList=" + CLASSLIST_FILE,
+            "-cp",
+            TESTJAR,
+            useAppCDS ? "-XX:+UseAppCDS" : "-XX:-UseAppCDS",
+            TESTNAME,
+            TEST_OUT);
+
+        OutputAnalyzer output = TestCommon.executeAndLog(pb, "dump-loaded-classes")
+            .shouldHaveExitValue(0).shouldContain(TEST_OUT);
+
+        List<String> dumpedClasses = toClassNames(CLASSLIST_FILE);
+
+        for (String clazz : expectedClasses) {
+            if (!dumpedClasses.contains(clazz)) {
+                throw new RuntimeException(clazz + " missing in " +
+                                           CLASSLIST_FILE);
+            }
+        }
+        for (String clazz : unexpectedClasses) {
+            if (dumpedClasses.contains(clazz)) {
+                throw new RuntimeException("Unexpectedly found " + clazz +
+                                           " in " + CLASSLIST_FILE);
+            }
+        }
+    }
+
+    static void dumpArchive(boolean useAppCDS, String[] expectedClasses,
+                            String[] unexpectedClasses) throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+            true,
+            useAppCDS ? "-XX:-UnlockDiagnosticVMOptions" :
+                        "-XX:+UnlockDiagnosticVMOptions",
+            "-cp",
+            TESTJAR,
+            useAppCDS ? "-XX:+UseAppCDS" : "-XX:-UseAppCDS",
+            "-XX:SharedClassListFile=" + CLASSLIST_FILE,
+            "-XX:SharedArchiveFile=" + ARCHIVE_FILE,
+            "-Xlog:cds",
+            "-Xshare:dump");
+
+        OutputAnalyzer output = TestCommon.executeAndLog(pb, "dump-archive")
+            .shouldHaveExitValue(0);
+
+        for (String clazz : expectedClasses) {
+            String failed = "Preload Warning: Cannot find " + clazz;
+            output.shouldNotContain(failed);
+        }
+        for (String clazz : unexpectedClasses) {
+            String failed = "Preload Warning: Cannot find " + clazz;
+            output.shouldContain(failed);
+        }
+    }
+
+    static void useArchive(boolean useAppCDS, String[] expectedClasses,
+                           String[] unexpectedClasses) throws Exception {
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+            true,
+            useAppCDS ? "-XX:-UnlockDiagnosticVMOptions" :
+                        "-XX:+UnlockDiagnosticVMOptions",
+            "-cp",
+            TESTJAR,
+            useAppCDS ? "-XX:+UseAppCDS" : "-XX:-UseAppCDS",
+            "-XX:SharedArchiveFile=" + ARCHIVE_FILE,
+            "-verbose:class",
+            "-Xshare:on",
+            TESTNAME,
+            TEST_OUT );
+
+        OutputAnalyzer output = TestCommon.executeAndLog(pb, "use-archive");
+        if (CDSTestUtils.isUnableToMap(output))
+            System.out.println("Unable to map: test case skipped");
+        else
+            output.shouldHaveExitValue(0).shouldContain(TEST_OUT);
+
+        // Quote the class name in the regex as it may contain $
+        String prefix = ".class,load. ";
+        String archive_suffix = ".*source: shared objects file.*";
+        String jar_suffix = ".*source: .*\\.jar";
+
+        for (String clazz : expectedClasses) {
+            String pattern = prefix + clazz + archive_suffix;
+            try {
+                output.shouldMatch(pattern);
+            } catch (Exception e) {
+                TestCommon.checkCommonExecExceptions(output, e);
+            }
+        }
+
+        for (String clazz : unexpectedClasses) {
+            String pattern = prefix + clazz + archive_suffix;
+            try {
+                output.shouldNotMatch(pattern);
+            } catch (Exception e) {
+                TestCommon.checkCommonExecExceptions(output, e);
+            }
+            pattern = prefix + clazz + jar_suffix;
+            try {
+                output.shouldMatch(pattern);
+            } catch (Exception e) {
+                TestCommon.checkCommonExecExceptions(output, e);
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/UseAppCDS_Test.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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]);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,343 @@
+/*
+ * 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.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 = "-Xverify:none";
+
+    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";
+
+    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 {
+        // Dumping should fail if the IgnoreUnverifiableClassesDuringDump
+        // option is not enabled.
+        OutputAnalyzer output = TestCommon.dump(jar, appClasses,
+                            "-XX:+UnlockDiagnosticVMOptions",
+                            "-XX:-IgnoreUnverifiableClassesDuringDump");
+        output.shouldContain("Please remove the unverifiable classes");
+        output.shouldHaveExitValue(1);
+
+        // By default, bad classes should be ignored during dumping.
+        TestCommon.testDump(jar, appClasses);
+    }
+
+    static void testset_1(String jar, String[] noAppClasses, String[] appClasses, Testset1Part part)
+        throws Exception
+    {
+        String config[][] = {
+            // {dump_list, dumptime_verification_setting,
+            //  runtime_verification_setting, runtime_output},
+
+            // 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 -Xverify:none
+            {"app",   VFY_NONE,   VFY_REMOTE, MAP_FAIL},
+            {"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 -Xverify:none
+            {"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 runtime_output = 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)) {
+                OutputAnalyzer dumpOutput = TestCommon.dump(
+                                                            jar, dump_list, dump_setting,
+                                                            // FIXME: the following options are for working around a GC
+                                                            // issue - assert failure when dumping archive with the -Xverify:all
+                                                            "-Xms256m",
+                                                            "-Xmx256m");
+            }
+            OutputAnalyzer runtimeOutput = TestCommon.execCommon(
+                                                                 "-cp", jar,
+                                                                 runtime_setting,
+                                                                 "VerifierTest0");
+            try {
+                runtimeOutput.shouldContain(runtime_output);
+            } catch (RuntimeException re) {
+                // Check if the failure is due to archive mapping failure.
+                // If not, a RuntimeException will be thrown.
+                runtimeOutput.shouldContain("Unable to use shared archive");
+            }
+            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");
+        final String PASS_RESULT = "Hi, how are you?";
+        String config2[][] = {
+            // {dump_list, dumptime_verification_setting,
+            //  runtime_verification_setting, runtime_output},
+
+            // 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 -Xverify:none
+            {"app",   VFY_NONE,   VFY_REMOTE, MAP_FAIL},
+            {"app",   VFY_NONE,   VFY_ALL,    MAP_FAIL},
+            {"app",   VFY_NONE,   VFY_NONE,   PASS_RESULT },
+        };
+        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 runtime_output = config2[i][3];
+            System.out.println("Test case [" + i + "]: dumping " + config2[i][0] +
+                               " with " + dump_setting +
+                               ", run with " + runtime_setting);
+            OutputAnalyzer dumpOutput = TestCommon.dump(
+                                                        jar, appClasses, dump_setting,
+                                                        "-XX:+UnlockDiagnosticVMOptions",
+                                                        // FIXME: the following options are for working around a GC
+                                                        // issue - assert failure when dumping archive with the -Xverify:all
+                                                        "-Xms256m",
+                                                        "-Xmx256m");
+            OutputAnalyzer runtimeOutput = TestCommon.execCommon(
+                                                                 "-cp", jar,
+                                                                 runtime_setting,
+                                                                 "Hi");
+            try {
+                runtimeOutput.shouldContain(runtime_output);
+            } catch (RuntimeException re) {
+                // Check if the failure is due to archive mapping failure.
+                // If not, a RuntimeException will be thrown.
+                runtimeOutput.shouldContain("Unable to use shared archive");
+            }
+        }
+
+    }
+
+    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_6, 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, "<init>", "()V", null, null);
+            mv.visitCode();
+            mv.visitVarInsn(ALOAD, 0);
+            mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+            mv.visitInsn(RETURN);
+            mv.visitMaxs(1, 1);
+            mv.visitEnd();
+        }
+        {
+            mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
+            mv.visitCode();
+            //WAS mv.visitTypeInsn(NEW, "VerifierTest");
+            mv.visitTypeInsn(NEW, "java/lang/Object");
+            mv.visitInsn(DUP);
+            mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "<init>", "()V", false);
+            mv.visitFieldInsn(PUTSTATIC, "UnverifiableBase", "x", "LVerifierTest;");
+            mv.visitInsn(RETURN);
+            mv.visitMaxs(2, 0);
+            mv.visitEnd();
+        }
+        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_6, 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, "<clinit>", "()V", null, null);
+            mv.visitCode();
+            //WAS mv.visitTypeInsn(NEW, "VerifierTest");
+            mv.visitTypeInsn(NEW, "java/lang/Object");
+            mv.visitInsn(DUP);
+            mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", "<init>", "()V", false);
+            mv.visitFieldInsn(PUTSTATIC, "UnverifiableIntf", "x", "LVerifierTest0;");
+            mv.visitInsn(RETURN);
+            mv.visitMaxs(2, 0);
+            mv.visitEnd();
+        }
+        cw.visitEnd();
+
+        return cw.toByteArray();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_0.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_1A.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_1B.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/VerifierTest_2.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/WideIloadTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,50 @@
+/*
+ * 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 Test 'iload_w' bytecode in shared class
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/WrongClasspath.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.
+ *
+ */
+
+/*
+ * @test
+ * @summary classpath mismatch between dump time and execution time
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main 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
+    OutputAnalyzer output = TestCommon.execCommon(
+        /* "-cp", appJar, */ // <- uncomment this and the execution should succeed
+        "Hello");
+    output.shouldContain("Unable to use shared archive");
+    output.shouldContain("shared class paths mismatch");
+    output.shouldHaveExitValue(1);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/XShareAutoWithChangedJar.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,55 @@
+/*
+ * 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 Test -Xshare:auto for AppCDS
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/Hello.java
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferences.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary Test resolved_references
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @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
+ * @build sun.hotspot.WhiteBox
+ * @compile CheckCachedResolvedReferencesApp.java
+ * @compile ../test-classes/Hello.java
+ * @run main ClassFileInstaller -jar app.jar CheckCachedResolvedReferencesApp
+ * @run main ClassFileInstaller -jar hello.jar Hello
+ * @run main ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox
+ * @run main 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",
+            "java/lang/Object id: 1",
+            "Hello id: 2 super: 1 source: " + helloJarPath
+        };
+
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/CheckCachedResolvedReferencesApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.config.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,3 @@
+VERSION: 1.0
+@SECTION: String
+26: shared_string_from_MyInner
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/DumpTimeVerifyFailure.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary Dump time should not crash if any class with shared strings fails verification due to missing dependencies.
+ * @bug 8186789
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @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 MyOuter.java MyException.java
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStress.config.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,3 @@
+VERSION: 1.0
+@SECTION: String
+25: GCStressApp_shared_string
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/GCStressTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @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
+ * @build sun.hotspot.WhiteBox
+ * @compile GCStressApp.java
+ * @run main ClassFileInstaller -jar gcstress.jar GCStressApp
+ * @run main ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/InstrumentationAgent.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Premain-Class: InstrumentationRegisterClassFileTransformer
+Agent-Class: InstrumentationRegisterClassFileTransformer
+Can-Retransform-Classes: true
+Can-Redefine-Classes: true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/MyException.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/MyOuter.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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");
+       }
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/OpenArchiveRegion.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary Test open archive heap regions
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/RangeNotWithinHeap.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary Shared classes can still be used when archived heap regions cannot be
+ *          mapped due to out of range, and -Xshare:on should not fail. Test on
+ *          linux 64-bit only since the HeapBaseMinAddress value is platform specific.
+ *          The value used in the test may cause different behavior on other platforms.
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (os.family == "linux") & (os.arch == "amd64") & (sun.arch.data.model == "64")
+ * @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 main RangeNotWithinHeap
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class RangeNotWithinHeap {
+    public static void main(String[] args) throws Exception {
+        JarBuilder.getOrCreateHelloJar();
+        String appJar = TestCommon.getTestJar("hello.jar");
+        String appClasses[] = TestCommon.list("Hello");
+
+        OutputAnalyzer output = TestCommon.dump(appJar, appClasses,
+                    "-XX:HeapBaseMinAddress=0x600000000", "-Xmx6G", "-Xlog:gc+heap=trace");
+        TestCommon.checkDump(output, "oa0 space:");
+
+        // Force archive region out of runtime java heap
+        output = TestCommon.exec(appJar, "Hello");
+        TestCommon.checkExec(output, "Hello World");
+        output = TestCommon.exec(appJar,
+                    "-XX:HeapBaseMinAddress=0x600000000", "-Xmx2G", "-Xlog:gc+heap=trace,cds", "Hello");
+        TestCommon.checkExec(output, "Hello World");
+        try {
+            output.shouldContain(
+                "UseSharedSpaces: Unable to allocate region, range is not within java heap.");
+        } catch (Exception e) {
+            // In rare case the heap data is not used.
+            if (output.getOutput().contains("Cached heap data from the CDS archive is being ignored")) {
+                return;
+            }
+            // Check for common shared class data mapping failures.
+            TestCommon.checkCommonExecExceptions(output, e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,149 @@
+/*
+ * 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.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 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("++++++++++++++++++++++++++");
+
+        // 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();
+
+        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++ (done)\n\n");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/cacheObject/RedefineClassTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,105 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @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.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @requires vm.flavor != "minimal"
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @modules java.base/jdk.internal.misc
+ *          jdk.jartool/sun.tools.jar
+ *          java.management
+ * @build sun.hotspot.WhiteBox
+ *        RedefineClassApp
+ *        InstrumentationClassFileTransformer
+ *        InstrumentationRegisterClassFileTransformer
+ * @run main/othervm RedefineClassTest
+ */
+
+import com.sun.tools.attach.VirtualMachine;
+import com.sun.tools.attach.VirtualMachineDescriptor;
+import java.io.File;
+import java.io.FileOutputStream;
+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:gc+region=trace,cds=info",
+                agentCmdArg,
+               "RedefineClassApp", bootJar, appJar);
+        out.reportDiagnosticSummary();
+
+        CDSOptions opts = (new CDSOptions()).setXShareMode("auto");
+        TestCommon.checkExec(out, opts);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatA.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,138 @@
+/*
+ * 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 Tests the format checking of class list format.
+ *
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatB.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,74 @@
+/*
+ * 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 Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
+ *
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatBase.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,82 @@
+/*
+ * 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;
+
+/**
+ * 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);
+            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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatC.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,76 @@
+/*
+ * 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 Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
+ *
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatD.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,85 @@
+/*
+ * 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 Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
+ *
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ClassListFormatE.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,111 @@
+/*
+ * 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 Tests the format checking of hotspot/src/closed/share/vm/classfile/classListParser.cpp.
+ *
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/CustomLoaderApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/HelloCustom.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,75 @@
+/*
+ * 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 Hello World test for AppCDS custom loader support
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ * @compile test-classes/Hello.java test-classes/CustomLoadee.java
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller -jar hello.jar Hello
+ * @run main ClassFileInstaller -jar hello_custom.jar CustomLoadee
+ * @run main ClassFileInstaller -jar WhiteBox.jar sun.hotspot.WhiteBox
+ * @run main HelloCustom
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import sun.hotspot.WhiteBox;
+
+public class HelloCustom {
+    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("hello.jar");
+        String customJarPath = ClassFileInstaller.getJarPath("hello_custom.jar");
+
+        // Dump the archive
+        String classlist[] = new String[] {
+            "Hello",
+            "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,
+                                 // command-line arguments ...
+                                 use_whitebox_jar,
+                                 "-XX:+UnlockDiagnosticVMOptions",
+                                 "-XX:+WhiteBoxAPI",
+                                 "Hello", customJarPath);
+        TestCommon.checkExec(output);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/LoaderSegregationTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,125 @@
+/*
+ * 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 Check that during dumping, the classes for BOOT/EXT/APP loaders are segregated from the
+ *          custom loader classes.
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @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 main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestBase.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,99 @@
+/*
+ * 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<MAX_CLASSES; i++) {
+            cust_classes[i] = "ParallelClass" + i;
+        }
+        String customJarPath = JarBuilder.build("ParallelTestBase", cust_classes);
+
+        for (int i = 0, n=0; i<MAX_CLASSES; i++) {
+            int super_id = 1;
+            if (mode == FINGERPRINT_MODE) {
+                // fingerprint mode -- no need to use the "loader:" option.
+                int id = i + 2;
+                cust_list[i] = cust_classes[i] + " id: " + id + " super: " + super_id + " source: " + customJarPath;
+            } else {
+                throw new RuntimeException("Only FINGERPRINT_MODE is supported");
+            }
+        }
+
+        String app_list[];
+        String mainClass;
+        String appJar;
+
+        if (mode == FINGERPRINT_MODE) {
+            appJar = JarBuilder.build("parallel_fp",
+                                      "ParallelLoad",
+                                      "ParallelLoadThread",
+                                      "ParallelLoadWatchdog");
+            app_list = new String[] {
+                "java/lang/Object id: 1",
+                "ParallelLoad",
+                "ParallelLoadThread",
+                "ParallelLoadWatchdog"
+            };
+            mainClass = "ParallelLoad";
+        } else {
+            throw new RuntimeException("Currently only FINGERPRINT_MODE is supported");
+        }
+
+        OutputAnalyzer output;
+        TestCommon.testDump(appJar, TestCommon.concat(app_list, cust_list));
+
+        String loaderTypeArg = (loaderType == SINGLE_CUSTOM_LOADER) ? "SINGLE_CUSTOM_LOADER" : "MULTI_CUSTOM_LOADER";
+        String modeArg = "FINGERPRINT_MODE";
+
+        output = TestCommon.exec(appJar,
+                                 // command-line arguments ...
+                                 "--add-opens=java.base/java.security=ALL-UNNAMED",
+                                 mainClass, loaderTypeArg, modeArg, customJarPath);
+        TestCommon.checkExec(output);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestMultiFP.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,44 @@
+/*
+ * 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 Load classes from CDS archive into multiple custom loader using parallel threads
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile ../test-classes/ParallelLoad.java ../test-classes/ParallelClasses.java
+ * @run main ParallelTestMultiFP
+ */
+
+public class ParallelTestMultiFP extends ParallelTestBase {
+    public static void main(String[] args) throws Exception {
+        ParallelTestBase.run(args, MULTI_CUSTOM_LOADER, FINGERPRINT_MODE);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ParallelTestSingleFP.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,44 @@
+/*
+ * 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 Load classes from CDS archive into a single custom loader using parallel threads (finger print)
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile ../test-classes/ParallelLoad.java ../test-classes/ParallelClasses.java
+ * @run main ParallelTestSingleFP
+ */
+
+public class ParallelTestSingleFP extends ParallelTestBase {
+    public static void main(String[] args) throws Exception {
+        ParallelTestBase.run(args, SINGLE_CUSTOM_LOADER, FINGERPRINT_MODE);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ProhibitedPackageNamesTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,60 @@
+/*
+ * 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 Make sure prohibited packages cannot be stored into archive for custom loaders.
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile ClassListFormatBase.java test-classes/Hello.java test-classes/InProhibitedPkg.java
+ * @run main ProhibitedPackageNamesTest
+ */
+
+public class ProhibitedPackageNamesTest extends ClassListFormatBase {
+    static {
+        // Uncomment the following line to run only one of the test cases
+        // ClassListFormatBase.RUN_ONLY_TEST = "TESTCASE PPN1";
+    }
+
+    public static void main(String[] args) throws Throwable {
+        String appJar = JarBuilder.getOrCreateHelloJar();
+        String customJarPath = JarBuilder.build("ProhibitedPackageNames_custom", "java/InProhibitedPkg");
+
+        dumpShouldPass(
+            "TESTCASE PPN1: prohibited package name without loader:",
+            appJar, classlist(
+                "Hello",
+                "java/lang/Object id: 1",
+                // Without "loader:" keyword.
+                "java/InProhibitedPkg id: 2 super: 1 source: " + customJarPath
+            ),
+            "Prohibited package for non-bootstrap classes: java/InProhibitedPkg.class");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/ProtectionDomain.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,61 @@
+/*
+ * 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 AppCDS handling of protection domain in custom loaders.
+ *
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ *
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/ProtDomain.java
+ * @run main ProtectionDomain
+ */
+
+public class ProtectionDomain {
+    public static void main(String[] args) throws Exception {
+        String appJar = JarBuilder.build("ProtectionDomain-app", "ProtDomain");
+
+        String customJar = JarBuilder.build("ProtectionDomain-custom",
+            "ProtDomainClassForArchive", "ProtDomainNotForArchive");
+        String[] classlist = new String[] {
+            "java/lang/Object id: 1",
+            "ProtDomain id: 2 super: 1 source: " + appJar,
+            "ProtDomainClassForArchive id: 3 super: 1 source: " + customJar
+        };
+
+        TestCommon.testDump(appJar, classlist);
+
+        // First class is loaded from CDS, second class is loaded from JAR
+        TestCommon.checkExec(TestCommon.exec(appJar, "-verbose:class", "ProtDomain", customJar),
+            "[class,load] ProtDomainClassForArchive source: shared objects file",
+            "[class,load] ProtDomainNotForArchive source: file");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/SameNameInTwoLoadersTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,94 @@
+/*
+ * 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 Testing the loading of a class with the same name in two different class loaders.
+ *
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ *
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/CustomLoadee.java
+ *     test-classes/CustomLoadee3.java
+ *     test-classes/SameNameUnrelatedLoaders.java
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main SameNameInTwoLoadersTest
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import sun.hotspot.WhiteBox;
+
+
+public class SameNameInTwoLoadersTest {
+    private static String appJar;
+    private static String customJar;
+    private static String useWbParam;
+
+    public static void main(String[] args) throws Exception {
+        appJar = JarBuilder.build("SameNameInTwoLoadersTest",
+            "SameNameUnrelatedLoaders");
+
+        customJar = JarBuilder.build("SameNameInTwoLoadersTest_custom", "CustomLoadee", "CustomLoadee3");
+
+        useWbParam = "-Xbootclasspath/a:" +
+            JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox");;
+
+        // ====== unrelated loaders
+        executeTestCase(getClassList_FP(),
+            "SameNameUnrelatedLoaders", "FpBoth");
+    }
+
+    private static void executeTestCase(String[] classlist,
+        String testClass, String testCaseId) throws Exception {
+        classlist[0] = testClass;
+
+        TestCommon.testDump(appJar, classlist, useWbParam);
+
+        OutputAnalyzer output = TestCommon.exec(appJar,
+                                 // command-line arguments ...
+                                 "--add-opens=java.base/java.security=ALL-UNNAMED",
+                                 useWbParam,
+                                 "-XX:+UnlockDiagnosticVMOptions",
+                                 "-XX:+WhiteBoxAPI",
+                                 testClass,
+                                 customJar, testCaseId);
+        TestCommon.checkExec(output);
+    }
+
+    // Single entry, no loader specified (FP method)
+    private static String[] getClassList_FP() {
+        return new String[] {
+            "SameNameUnrelatedLoaders",
+            "java/lang/Object id: 1",
+            "CustomLoadee id: 10 super: 1 source: " + customJar,
+        };
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/UnintendedLoadersTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,76 @@
+/*
+ * 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 Make sure classes intended for custom loaders cannot be loaded by BOOT/EXT/APP loaders
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/UnintendedLoaders.java test-classes/CustomLoadee.java
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main UnintendedLoadersTest
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import sun.hotspot.WhiteBox;
+
+public class UnintendedLoadersTest {
+    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("UnintendedLoaders_app", "UnintendedLoaders");
+        String customJarPath = JarBuilder.build("UnintendedLoaders_custom", "CustomLoadee");
+
+        // Dump the archive
+        String classlist[] = new String[] {
+            "UnintendedLoadersTest",
+            "java/lang/Object id: 1",
+
+            // Without "loader:" keyword.
+            "CustomLoadee id: 2 super: 1 source: " + customJarPath,
+        };
+
+        OutputAnalyzer output;
+        TestCommon.testDump(appJar, classlist,
+                            // command-line arguments ...
+                            use_whitebox_jar);
+
+        output = TestCommon.exec(appJar,
+                                 // command-line arguments ...
+                                 use_whitebox_jar,
+                                 "-XX:+UnlockDiagnosticVMOptions",
+                                 "-XX:+WhiteBoxAPI",
+                                 "UnintendedLoaders");
+        TestCommon.checkExec(output);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/UnloadUnregisteredLoaderTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,82 @@
+/*
+ * 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 Test the behavior when shared classes loaded by custom loaders are
+ *          unloaded.
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model == "64")
+ * @requires ((os.family == "linux") & (os.arch=="amd64")) | (os.family == "solaris")
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/testlibrary
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @build sun.hotspot.WhiteBox ClassUnloadCommon
+ * @compile test-classes/UnloadUnregisteredLoader.java test-classes/CustomLoadee.java
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller ClassUnloadCommon
+ * @run main ClassFileInstaller ClassUnloadCommon$1
+ * @run main ClassFileInstaller ClassUnloadCommon$TestFailure
+ * @run main UnloadUnregisteredLoaderTest
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import sun.hotspot.WhiteBox;
+
+public class UnloadUnregisteredLoaderTest {
+    public static void main(String[] args) throws Exception {
+        String appJar1 = JarBuilder.build("UnloadUnregisteredLoader_app1", "UnloadUnregisteredLoader");
+        String appJar2 = JarBuilder.build(true, "UnloadUnregisteredLoader_app2",
+                                          "ClassUnloadCommon", "ClassUnloadCommon$1", "ClassUnloadCommon$TestFailure");
+        String customJarPath = JarBuilder.build("UnloadUnregisteredLoader_custom", "CustomLoadee");
+        String wbJar = JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox");
+        String use_whitebox_jar = "-Xbootclasspath/a:" + wbJar;
+
+        String classpath = TestCommon.concatPaths(appJar1, appJar2);
+        String classlist[] = new String[] {
+            "UnloadUnregisteredLoader",
+            "ClassUnloadCommon",
+            "ClassUnloadCommon$1",
+            "ClassUnloadCommon$TestFailure",
+            "java/lang/Object id: 1",
+            "CustomLoadee id: 2 super: 1 source: " + customJarPath,
+        };
+
+        OutputAnalyzer output;
+        TestCommon.testDump(classpath, classlist,
+                            // command-line arguments ...
+                            use_whitebox_jar);
+
+        output = TestCommon.exec(classpath,
+                                 // command-line arguments ...
+                                 use_whitebox_jar,
+                                 "-XX:+UnlockDiagnosticVMOptions",
+                                 "-XX:+WhiteBoxAPI",
+                                 "UnloadUnregisteredLoader",
+                                 customJarPath);
+        TestCommon.checkExec(output);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/UnsupportedPlatforms.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,67 @@
+/*
+ * 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 Ensure that support for AppCDS custom class loaders are not enabled on unsupported platforms.
+ * The only supported platforms are Linux/AMD64 and 64-bit Solaris.
+ * (NOTE: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile test-classes/SimpleHello.java
+ * @run main UnsupportedPlatforms
+ */
+
+import jdk.test.lib.Platform;
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class UnsupportedPlatforms {
+    public static String PLATFORM_NOT_SUPPORTED_WARNING =
+        "AppCDS custom class loaders not supported on this platform";
+
+    public static void main(String[] args) throws Exception {
+        String appJar = JarBuilder.build("UnsupportedPlatforms", "SimpleHello");
+
+        // Dump the archive
+        String classlist[] = new String[] {
+            "SimpleHello",
+            "java/lang/Object id: 1",
+            "CustomLoadee id: 2 super: 1 source: " + appJar
+        };
+
+        OutputAnalyzer out = TestCommon.dump(appJar, classlist);
+
+        if ((Platform.isSolaris() && Platform.is64bit()) ||
+            (Platform.isLinux() && Platform.isX64())) {
+            out.shouldNotContain(PLATFORM_NOT_SUPPORTED_WARNING);
+            out.shouldHaveExitValue(0);
+        } else {
+            out.shouldContain(PLATFORM_NOT_SUPPORTED_WARNING);
+            out.shouldHaveExitValue(1);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomInterface2_ia.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.
+ *
+ */
+
+interface CustomInterface2_ia {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomInterface2_ib.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.
+ *
+ */
+
+interface CustomInterface2_ib {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,29 @@
+/*
+ * 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 CustomLoadee {
+    public String toString() {
+        return "this is CustomLoadee";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee2.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,29 @@
+/*
+ * 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 CustomLoadee2 implements CustomInterface2_ia, CustomInterface2_ib {
+    public String toString() {
+        return "this is CustomLoadee";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee3.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,29 @@
+/*
+ * 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 CustomLoadee3 {
+    public String toString() {
+        return "this is CustomLoadee3";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/CustomLoadee3Child.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,29 @@
+/*
+ * 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 CustomLoadee3Child extends CustomLoadee3 {
+    public String toString() {
+        return "this is CustomLoadee3Child";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/Hello.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,56 @@
+/*
+ * 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.net.*;
+import sun.hotspot.WhiteBox;
+
+public class Hello {
+    public static void main(String args[]) throws Exception {
+        String path = args[0];
+        URL url = new File(path).toURI().toURL();
+        URL[] urls = new URL[] {url};
+        System.out.println(path);
+        System.out.println(url);
+
+        URLClassLoader urlClassLoader = new URLClassLoader(urls);
+        Class c = urlClassLoader.loadClass("CustomLoadee");
+        System.out.println(c);
+        System.out.println(c.getClassLoader());
+
+        // [1] Check that CustomLoadee is defined by the correct loader
+        if (c.getClassLoader() != urlClassLoader) {
+            throw new RuntimeException("c.getClassLoader() == " + c.getClassLoader() +
+                                       ", expected == " + urlClassLoader);
+        }
+
+        // [2] Check that CustomLoadee is loaded from shared archive.
+        WhiteBox wb = WhiteBox.getWhiteBox();
+        if (wb.isSharedClass(Hello.class)) {
+            if (!wb.isSharedClass(c)) {
+                throw new RuntimeException("wb.isSharedClass(c) should be true");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/InProhibitedPkg.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,33 @@
+/*
+ * 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 java;
+
+public class InProhibitedPkg {
+    static {
+        if (true) {
+            throw new RuntimeException("This class shouldn't be loaded by any loader other than BOOT");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/LoaderAPI.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Created-By: 1.9.0-internal (Oracle Corporation)
+Specification-Title: My Specification Title
+Specification-Version: 1.0
+Specification-Vendor: My Specification Vendor
+Implementation-Title: My Implementation Title
+Implementation-Version: 1.0
+Implementation-Vendor: My Implementation Vendor
+
+Name: pkg1/
+Implementation-Version: 2.0
+Sealed: true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/LoaderSegregation.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,99 @@
+/*
+ * 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.net.*;
+import sun.hotspot.WhiteBox;
+
+public class LoaderSegregation {
+    // Use these definitions instead of literal strings, to avoid typos.
+    static final String ONLY_BUILTIN      = "OnlyBuiltin";
+    static final String ONLY_UNREGISTERED = "OnlyUnregistered";
+
+    public static void main(String args[]) throws Exception {
+        WhiteBox wb = WhiteBox.getWhiteBox();
+
+        // [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.
+        if (wb.isSharedClass(LoaderSegregation.class)) {
+            // [1] check that CustomLoadee is loadable from archive
+            if (!wb.isSharedClass(CustomLoadee.class)) {
+                throw new RuntimeException("wb.isSharedClass(CustomLoadee.class) should be true");
+            }
+
+            // [2] CustomInterface2_ia should be archived, even though it was not specified in the classlist.
+            //     It was successfully dumped as a side effect of attempting to load CustomLoadee2
+            //     during dump time. Note that CustomLoadee2 failed to dump because one of its interfaces,
+            //     CustomInterface2_ib, was not loadable from the BOOT/EXT/APP classpath. during dump time.
+            if (!wb.isSharedClass(CustomInterface2_ia.class)) {
+                throw new RuntimeException("wb.isSharedClass(CustomInterface2_ia.class) should be true");
+            }
+
+            // [3] Check that the BUILTIN versions of CustomLoadee2 and CustomLoadee3Child are loadable
+            //     at run time (since we have append LoaderSegregation_app2.jar the classpath),
+            //     but these classes must be loaded from the JAR file.
+            if (wb.isSharedClass(CustomLoadee2.class)) {
+                throw new RuntimeException("wb.isSharedClass(CustomLoadee2.class) should be false");
+            }
+            if (wb.isSharedClass(CustomLoadee3.class)) {
+                throw new RuntimeException("wb.isSharedClass(CustomLoadee3.class) should be false");
+            }
+            if (wb.isSharedClass(CustomLoadee3Child.class)) {
+                throw new RuntimeException("wb.isSharedClass(CustomLoadee3Child.class) should be false");
+            }
+        }
+
+        // [C] BUILTIN and UNREGISTERED classes can be loaded only by their corresponding
+        //     type of loaders.
+
+        String path = args[0];
+        File jarFile = new File(path);
+        URL url = new File(path).toURI().toURL();
+        URL[] urls = new URL[] {url};
+        ClassLoader appLoader = LoaderSegregation.class.getClassLoader();
+
+        { // BUILTIN LOADER
+            try {
+                appLoader.loadClass(ONLY_UNREGISTERED);
+                throw new RuntimeException("BUILTIN loader cannot load archived UNREGISTERED class");
+            } catch (ClassNotFoundException expected) {}
+        }
+
+        { // UNREGISTERED LOADER
+            URLClassLoader urlClassLoader = new URLClassLoader(urls);
+            Class c2 = Util.defineClassFromJAR(urlClassLoader, jarFile, ONLY_BUILTIN);
+
+            if (c2.getClassLoader() != urlClassLoader) {
+                throw new RuntimeException("Error in test");
+            }
+
+            if (wb.isSharedClass(LoaderSegregation.class)) {
+                if (wb.isSharedClass(c2)) {
+                    throw new RuntimeException("wb.isSharedClass(c2) should be false - " +
+                                               "unregistered loader cannot load an archived BUILTIN class");
+                }
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/OnlyBuiltin.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.
+ *
+ */
+
+// See ../LoaderSegregationTest.java for details.
+//
+// This class is archived only as a BUILTIN class.
+public class OnlyBuiltin {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/OnlyUnregistered.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.
+ *
+ */
+
+// See ../LoaderSegregationTest.java for details.
+//
+// This class is archived only as a UNREGISTERED class.
+public class OnlyUnregistered {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/ProtDomain.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,55 @@
+/*
+ * 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.security.ProtectionDomain;
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.io.File;
+
+// Intended to be called from test ProtectionDomain.java
+//
+// ProtDomainClassForArchive is     stored in CDS archive.
+// ProtDomainNotForArchive   is NOT stored in CDS archive.
+//
+// However, they should have the same ProtectionDomain instance.
+public class ProtDomain {
+    public static void main(String args[]) throws Exception {
+        String customLdrPath = args[0];
+
+        URL[] urls = new URL[] {new File(customLdrPath).toURI().toURL()};
+        URLClassLoader ldr = new URLClassLoader(urls);
+        ProtectionDomain domain1 = ldr.loadClass("ProtDomainClassForArchive").getProtectionDomain();
+        ProtectionDomain domain2 = ldr.loadClass("ProtDomainNotForArchive").getProtectionDomain();
+
+        System.out.println("domain1 = " + domain1);
+        System.out.println("domain2  = " + domain2);
+
+        if (domain1 != domain2)
+            throw new RuntimeException("Protection Domains do not match!");
+    }
+}
+
+class ProtDomainClassForArchive {}
+
+class ProtDomainNotForArchive {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/SameNameUnrelatedLoaders.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,101 @@
+/*
+ * 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.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import sun.hotspot.WhiteBox;
+
+public class SameNameUnrelatedLoaders {
+    public static void main(String args[]) throws Exception {
+        String path = args[0];
+        String testCase = args[1];
+        URL url = new File(path).toURI().toURL();
+        URL[] urls = new URL[] {url};
+
+        ClassLoader appLoader = SameNameUnrelatedLoaders.class.getClassLoader();
+        URLClassLoader ldr01 = null;
+        URLClassLoader ldr02 = null;
+
+        switch (testCase) {
+            case "FpBoth":
+                ldr01 = new URLClassLoader(urls);
+                ldr02 = new URLClassLoader(urls);
+            break;
+
+            default:
+                throw new IllegalArgumentException("Invalid testCase ID");
+        }
+
+
+        Class class01 = ldr01.loadClass("CustomLoadee");
+        Class class02  = ldr02.loadClass("CustomLoadee");
+
+        System.out.println("class01 = " + class01);
+        System.out.println("class02 = " + class02);
+
+        if (class01.getClassLoader() != ldr01) {
+            throw new RuntimeException("class01 loaded by wrong loader");
+        }
+        if (class02.getClassLoader() != ldr02) {
+            throw new RuntimeException("class02 loaded by wrong loader");
+        }
+
+        if (true) {
+            if (class01.isAssignableFrom(class02)) {
+                throw new RuntimeException("assignable condition failed");
+            }
+
+            Object obj01 = class01.newInstance();
+            Object obj02 = class02.newInstance();
+
+            if (class01.isInstance(obj02)) {
+                throw new RuntimeException("instance relationship condition 01 failed");
+            }
+            if (class02.isInstance(obj01)) {
+                throw new RuntimeException("instance relationship condition 02 failed");
+            }
+        }
+
+        WhiteBox wb = WhiteBox.getWhiteBox();
+        if (wb.isSharedClass(SameNameUnrelatedLoaders.class)) {
+            boolean class1Shared = wb.isSharedClass(class01);
+            boolean class2Shared = wb.isSharedClass(class02);
+
+            if (testCase.equals("FpBoth")) {
+                if (!class1Shared) {
+                    throw new RuntimeException("first class is not shared");
+                }
+
+                if (class2Shared) {
+                    throw new RuntimeException("second class is shared, " +
+                    "and it should not be - first come first serve violation");
+                }
+            } else {
+                if (! (class1Shared && class2Shared) )
+                    throw new RuntimeException("both classes expected to be shared, but are not");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/SimpleHello.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,29 @@
+/*
+ * 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 SimpleHello {
+    public static void main(String[] args) {
+        System.out.println("Simple Hello");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/UnintendedLoaders.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,54 @@
+/*
+ * 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 UnintendedLoaders {
+    public static void main(String[] args) throws Exception {
+        ClassLoader loaders[] = new ClassLoader[2];
+        loaders[0] = UnintendedLoaders.class.getClassLoader(); // app loader
+        loaders[1] = loaders[0].getParent();                   // platform loader
+
+        String[] names = {
+            "CustomLoadee",
+        };
+
+
+        for (int i=0; i<3; i++) {
+            for (String s : names) {
+                try {
+                    if (i <= 1) {
+                        System.out.println(loaders[i].loadClass(s));
+                    } else {
+                        System.out.println(Class.forName(s));
+                    }
+                } catch (ClassNotFoundException e) {
+                    System.out.println("Expected exception:" + e);
+                    continue;
+                }
+                throw new RuntimeException("The class \"" + s + "\" should not be resolved by the application or platform class loader");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/customLoader/test-classes/UnloadUnregisteredLoader.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import sun.hotspot.WhiteBox;
+
+public class UnloadUnregisteredLoader {
+    public static void main(String args[]) throws Exception {
+        String path = args[0];
+        URL url = new File(path).toURI().toURL();
+        URL[] urls = new URL[] {url};
+        WhiteBox wb = WhiteBox.getWhiteBox();
+        String className = "CustomLoadee";
+
+        for (int i=0; i<5; i++) {
+            doit(urls, className, (i == 0));
+
+            ClassUnloadCommon.triggerUnloading();
+            ClassUnloadCommon.failIf(wb.isClassAlive(className), "should have been unloaded");
+        }
+    }
+
+  public static void doit(URL urls[], String className, boolean isFirstTime) throws Exception {
+        ClassLoader appLoader = UnloadUnregisteredLoader.class.getClassLoader();
+        URLClassLoader custLoader = new URLClassLoader(urls, appLoader);
+
+        Class klass = custLoader.loadClass(className);
+        WhiteBox wb = WhiteBox.getWhiteBox();
+        if (wb.isSharedClass(UnloadUnregisteredLoader.class)) {
+            if (isFirstTime) {
+                // First time: we should be able to load the class from the CDS archive
+                if (!wb.isSharedClass(klass)) {
+                    throw new RuntimeException("wb.isSharedClass(klass) should be true for first time");
+                }
+            } else {
+                // Second time:  the class in the CDS archive is not available, because it has not been cleaned
+                // up (see bug 8140287), so we must load the class dynamically.
+                //
+                // FIXME: after 8140287 is fixed, class should be shard regardless of isFirstTime.
+                if (wb.isSharedClass(klass)) {
+                    throw new RuntimeException("wb.isSharedClass(klass) should be false for second time");
+                }
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary test the ability to archive array classes and load them from the archive
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules jdk.jartool/sun.tools.jar
+ * @compile ArrayTestHelper.java
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main 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"
+    };
+
+    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
+        TestCommon.dump(appJar, TestCommon.list(arrayClasses), bootClassPath, "-verbose:class");
+
+        List<String> argsList = new ArrayList<String>();
+        argsList.add("-XX:+UnlockDiagnosticVMOptions");
+        argsList.add("-XX:+WhiteBoxAPI");
+        argsList.add("-cp");
+        argsList.add(appJar);
+        argsList.add(bootClassPath);
+        argsList.add("-verbose:class");
+        argsList.add("ArrayTestHelper");
+        // the following are input args to the ArrayTestHelper.
+        for (int i = 0; i < arrayClasses.length; i++) {
+            argsList.add(arrayClasses[i]);
+        }
+        String[] opts = new String[argsList.size()];
+        opts = argsList.toArray(opts);
+        OutputAnalyzer output = TestCommon.execCommon(opts);
+        TestCommon.checkExec(output);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/ArrayTestHelper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+            }
+        }
+   }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/CheckAnonymousClass.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary ensure no anonymous class is being dumped into the CDS archive
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules jdk.jartool/sun.tools.jar
+ * @compile ../test-classes/Hello.java
+ * @run main CheckAnonymousClass
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class CheckAnonymousClass {
+
+  public static void main(String[] args) throws Exception {
+    JarBuilder.build("hello", "Hello");
+
+    String appJar = TestCommon.getTestJar("hello.jar");
+
+    TestCommon.dump(appJar, TestCommon.list("Hello", "org/omg/CORBA/ORB"),
+        "--add-modules", "java.corba", "-Xlog:class+load=info");
+
+    OutputAnalyzer output = TestCommon.execCommon("-XX:+UnlockDiagnosticVMOptions",
+        "-cp", appJar, "-Xlog:class+load=info", "--add-modules", "java.corba", "Hello");
+
+    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
+    try {
+        output.shouldNotMatch(pattern);
+    } catch (Exception e) {
+        TestCommon.checkCommonExecExceptions(output, e);
+    }
+
+    // inspect the archive and make sure no anonymous class is in there
+    output = TestCommon.execCommon("-XX:+UnlockDiagnosticVMOptions",
+        "-cp", appJar, "-Xlog:class+load=info", "-XX:+PrintSharedArchiveAndExit",
+        "-XX:+PrintSharedDictionary", "--add-modules", "java.corba", "Hello");
+    try {
+        output.shouldNotMatch(class_pattern);
+    } catch (Exception e) {
+        TestCommon.checkCommonExecExceptions(output, e);
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDump.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @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.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 = "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug";
+
+        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;
+
+            TestCommon.testDump(appJar, TestCommon.list("Hello"),
+                                extraArg, "-Xmx32m", gcLog);
+
+            OutputAnalyzer output = TestCommon.execCommon(
+                "-cp", appJar,
+                "-Xmx32m",
+                "-XX:+PrintSharedSpaces",
+                gcLog,
+                "Hello");
+            TestCommon.checkExec(output);
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDumpTransformer.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,72 @@
+/*
+ * 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.instrument.ClassFileTransformer;
+import java.lang.instrument.Instrumentation;
+import java.lang.instrument.IllegalClassFormatException;
+import java.security.ProtectionDomain;
+
+public class GCDuringDumpTransformer implements ClassFileTransformer {
+    static int n = 0;
+    public byte[] transform(ClassLoader loader, String name, Class<?> classBeingRedefined,
+                            ProtectionDomain pd, byte[] buffer) throws IllegalClassFormatException {
+        n++;
+
+        System.out.println("dump time loading: " + name + " in loader: " + loader);
+        System.out.println("making garbage: " + n);
+        try {
+            makeGarbage();
+        } catch (Throwable t) {
+            t.printStackTrace();
+            try {
+                Thread.sleep(200); // let GC to have a chance to run
+            } catch (Throwable t2) {}
+        }
+        System.out.println("making garbage: done");
+
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/GCDuringDumpTransformer.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Premain-Class: GCDuringDumpTransformer
+Agent-Class: GCDuringDumpTransformer
+Can-Retransform-Classes: true
+Can-Redefine-Classes: true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDump.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,131 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @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 (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.flavor != "minimal"
+ * @requires vm.gc.G1
+ * @modules java.base/jdk.internal.misc
+ *          jdk.jartool/sun.tools.jar
+ *          java.management
+ * @build sun.hotspot.WhiteBox GCDuringDumpTransformer GCSharedStringsDuringDumpWb
+ * @run main 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 = "-Xlog:gc*=info,gc+region=trace,gc+alloc+region=debug";
+
+        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;
+
+            OutputAnalyzer output = TestCommon.dump(
+                                appJar, TestCommon.list("GCSharedStringsDuringDumpWb"),
+                                bootClassPath, extraArg, "-Xmx32m", gcLog,
+                                "-XX:+UseCompressedOops", "-XX:+UseG1GC",
+                                "-XX:SharedReadOnlySize=30m",
+                                "-XX:SharedArchiveConfigFile=" + sharedArchiveCfgFile);
+
+            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.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:+UseCompressedOops", "-XX:+UseG1GC",
+                    "-XX:SharedReadOnlySize=30m",
+                    "-XX:SharedArchiveConfigFile=" + sharedArchiveCfgFile);
+            }
+
+            output = TestCommon.execCommon(
+                "-cp", appJar,
+                bootClassPath,
+                "-Xmx32m",
+                "-XX:+PrintSharedSpaces",
+                "-XX:+UseCompressedOops",
+                "-XX:+UseG1GC",
+                "-XX:+UnlockDiagnosticVMOptions",
+                "-XX:+WhiteBoxAPI",
+                "-XX:SharedReadOnlySize=30m",
+                gcLog,
+                "GCSharedStringsDuringDumpWb");
+            TestCommon.checkExec(output);
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/javaldr/GCSharedStringsDuringDumpWb.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/CheckUnsupportedDumpingOptions.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,102 @@
+/*
+ * 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 Abort dumping if any of the new jigsaw vm options is specified.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main CheckUnsupportedDumpingOptions
+ */
+
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
+import jdk.test.lib.process.OutputAnalyzer;
+
+public class CheckUnsupportedDumpingOptions {
+    private static final String[] jigsawOptions = {
+        "-m",
+        "--limit-modules",
+        "--module-path",
+        "--upgrade-module-path",
+        "--patch-module"
+    };
+    private static final String[] optionValues = {
+        "mymod",
+        "mymod",
+        "mydir",
+        ".",
+        "java.naming=javax.naming.spi.NamingManger"
+    };
+    private static final int infoIdx = 1;
+
+    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;
+            if (i == 5) {
+                // --patch-module
+                output = TestCommon.dump(appJar, appClasses, "-Xlog:cds,cds+hashtables",
+                                         jigsawOptions[i] + optionValues[i] + appJar);
+            } else {
+                output = TestCommon.dump(appJar, appClasses, "-Xlog:cds,cds+hashtables",
+                                         jigsawOptions[i], optionValues[i]);
+            }
+            if (i < infoIdx) {
+                output.shouldContain("Cannot use the following option " +
+                    "when dumping the shared archive: " + jigsawOptions[i])
+                      .shouldHaveExitValue(1);
+            } else {
+                output.shouldContain("Info: the " + jigsawOptions[i] +
+                    " option is ignored when dumping the shared archive");
+                if (optionValues[i].equals("mymod")) {
+                      // java will throw FindException for a module
+                      // which cannot be found during init_phase2() of vm init
+                      output.shouldHaveExitValue(1)
+                            .shouldContain("java.lang.module.FindException: Module mymod not found");
+                } else {
+                      output.shouldHaveExitValue(0);
+                }
+            }
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/JigsawOptionsCombo.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,216 @@
+/*
+ * 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 Test combinations of jigsaw options that affect the use of AppCDS
+ *
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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<TestCase> testCaseTable = new ArrayList<TestCase>();
+
+    public static String infoDuringDump(String option) {
+        return "Info: the " + option +
+            " option is ignored when dumping the shared archive";
+    }
+
+    public void runTests() throws Exception {
+
+        testCaseTable.add(new TestCase(
+            "basic: Basic dump and execute, to verify the test plumbing works",
+            "", "", 0,
+            "", "", 0) );
+
+        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) );
+
+        testCaseTable.add(new TestCase(
+            "module-path-01: --module-path is ignored for dump time",
+            "--module-path mods",
+            infoDuringDump("--module-path"), 0,
+            null, null, 0) );
+
+        testCaseTable.add(new TestCase(
+            "module-path-02: --module-path is ok for run time",
+            "", "", 0,
+            "--module-path mods", "", 0) );
+
+        testCaseTable.add(new TestCase(
+            "add-modules-01: --add-modules is ok at dump time",
+            "--add-modules java.management",
+            "", 0,
+            null, null, 0) );
+
+        testCaseTable.add(new TestCase(
+            "add-modules-02: --add-modules is ok at run time",
+            "", "", 0,
+            "--add-modules java.management", "", 0) );
+
+        testCaseTable.add(new TestCase(
+            "limit-modules-01: --limit-modules is ignored at dump time",
+            "--limit-modules java.base",
+            infoDuringDump("--limit-modules"), 0,
+            null, null, 0) );
+
+        testCaseTable.add(new TestCase(
+            "limit-modules-02: --limit-modules is ok at run time",
+            "", "", 0,
+            "--limit-modules java.base", "", 0) );
+
+        testCaseTable.add(new TestCase(
+            "upgrade-module-path-01: --upgrade-module-path is ignored at dump time",
+            "--upgrade-module-path mods",
+            infoDuringDump("--upgrade-module-path"), 0,
+            null, null, 0) );
+
+        testCaseTable.add(new TestCase(
+            "-upgrade-module-path-module-path-02: --upgrade-module-path is ok at run time",
+            "", "", 0,
+            "--upgrade-module-path mods", "", 0) );
+
+        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;
+
+        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) {
+
+            this.description = description;
+            this.dumpTimeArgs = dumpTimeArgs;
+            this.dumpTimeExpectedOutput = dumpTimeExpectedOutput;
+            this.dumpTimeExpectedExitValue = dumpTimeExpectedExitValue;
+            this.runTimeArgs = runTimeArgs;
+            this.runTimeExpectedOutput = runTimeExpectedOutput;
+            this.runTimeExpectedExitValue = runTimeExpectedExitValue;
+        }
+
+
+        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) {
+                    TestCommon.checkExec(execOutput, runTimeExpectedOutput, "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<String> 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/AppClassInCP.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,104 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        String classPath = appJar + File.pathSeparator + classDir;
+        System.out.println("classPath: " + classPath);
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "-cp", classPath,
+            "--patch-module=java.naming=" + moduleJar,
+            "-Xlog:class+load",
+            "PatchMain", "javax.naming.spi.NamingManager", "mypackage.Hello");
+        TestCommon.checkExec(output,
+            "I pass!",
+            "Hello!",
+            "Hello source: shared objects file");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/CustomPackage.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,83 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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");
+        TestCommon.checkDump(output, "Preload Warning: Cannot find javax/naming/myspi/NamingManager");
+
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "--patch-module=java.naming=" + moduleJar,
+            "-Xlog:class+load",
+            "-Xlog:class+path=info",
+            "PatchMain", "javax.naming.myspi.NamingManager");
+        TestCommon.checkExec(output, "I pass!");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/MismatchedPatchModule.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,132 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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 and run 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");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        // javax.naming.spi.NamingManager is not patched at runtime
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "--patch-module=java.naming2=" + moduleJar,
+            "-Xlog:class+path=info",
+            "PatchMain", "javax.naming.spi.NamingManager");
+        output.shouldNotContain("I pass!");
+
+        // Case 2: --patch-module specified for dump time but not for run time
+        System.out.println("Case 2: --patch-module specified for dump time but not for run time");
+        output =
+            TestCommon.dump(null,
+                TestCommon.list("javax/naming/spi/NamingManager"),
+                "--patch-module=java.naming=" + moduleJar,
+                "PatchMain", "javax.naming.spi.NamingManager");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        // javax.naming.spi.NamingManager is not patched at runtime
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "-Xlog:class+path=info",
+            "PatchMain", "javax.naming.spi.NamingManager");
+        output.shouldNotContain("I pass!");
+
+        // Case 3: --patch-module specified for run time but not for dump time
+        System.out.println("Case 3: --patch-module specified for run time but not for dump time");
+        output =
+            TestCommon.dump(null,
+                TestCommon.list("javax/naming/spi/NamingManager"),
+                "PatchMain", "javax.naming.spi.NamingManager");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        // javax.naming.spi.NamingManager is patched at runtime
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "--patch-module=java.naming=" + moduleJar,
+            "-Xlog:class+path=info",
+            "PatchMain", "javax.naming.spi.NamingManager");
+        TestCommon.checkExec(output, "I pass!");
+
+        // Case 4: mismatched --patch-module entry counts between dump time and run time
+        System.out.println("Case 4: mismatched --patch-module entry counts between dump time and run time");
+        output =
+            TestCommon.dump(null,
+                TestCommon.list("javax/naming/spi/NamingManager"),
+                "--patch-module=java.naming=" + moduleJar,
+                "PatchMain", "javax.naming.spi.NamingManager");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        // javax.naming.spi.NamingManager is patched at runtime
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "--patch-module=java.naming=" + moduleJar,
+            "--patch-module=java.naming2=" + moduleJar,
+            "-Xlog:class+path=info",
+            "PatchMain", "javax.naming.spi.NamingManager");
+        TestCommon.checkExec(output, "I pass!");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchDir.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,73 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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("Loading classes to share")
+            .shouldHaveExitValue(0);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchJavaBase.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,73 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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");
+        OutputAnalyzer output =
+            TestCommon.dump(null, null,
+                "--patch-module=java.base=" + moduleJar,
+                "PatchMain", "java.lang.NewClass");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "--patch-module=java.base=" + moduleJar,
+            "PatchMain", "java.lang.NewClass");
+        output.shouldContain("CDS is disabled when java.base module is patched");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/PatchMain.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,33 @@
+/*
+ * 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 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++) {
+            Class.forName(args[i]);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/Simple.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,81 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "--patch-module=java.naming=" + moduleJar,
+            "-Xlog:class+load",
+            "-Xlog:class+path=info",
+            "PatchMain", "javax.naming.spi.NamingManager");
+        TestCommon.checkExec(output, "I pass!");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/SubClassOfPatchedClass.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,105 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        String classPath = appJar + File.pathSeparator + classDir;
+        System.out.println("classPath: " + classPath);
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "-cp", classPath,
+            "--patch-module=java.naming=" + moduleJar,
+            "-Xlog:class+load",
+            "PatchMain", "javax.naming.Reference", "mypackage.MyReference");
+        TestCommon.checkExec(output,
+            "I pass!",
+            "MyReference source: file:");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/PatchModule/TwoJars.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,100 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 main 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");
+        TestCommon.checkDump(output, "Loading classes to share");
+
+        output = TestCommon.execCommon(
+            "-XX:+UnlockDiagnosticVMOptions",
+            "--patch-module=java.naming=" + moduleJar2 + File.pathSeparator + moduleJar,
+            "-Xlog:class+load",
+            "-Xlog:class+path=info",
+            "PatchMain", "javax.naming.spi.NamingManager");
+        TestCommon.checkExec(output, "I pass");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/BootAppendTests.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,256 @@
+/*
+ * 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 AppCDS tests for testing -Xbootclasspath/a
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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/Main2.jasm
+ * @compile src/sun/nio/cs/ext/MyClass.java
+ * @compile src/sun/nio/cs/ext1/MyClass.java
+ * @run main 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/Main2";
+    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 {
+        CDSOptions opts = (new CDSOptions())
+            .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar,
+                       "--limit-modules", "java.base")
+            .setArchiveName(testArchiveName)
+            .addSuffix(MAIN_CLASS, "Test #3", BOOT_APPEND_MODULE_CLASS, "true", "BOOT");
+
+        CDSTestUtils.runWithArchiveAndCheck(opts);
+    }
+
+    // Test #4: A shared class in excluded package that's archived from
+    //          -Xbootclasspath/a
+    //     - should be loaded from the archive by the bootstrap classloader
+    public static void testBootAppendExcludedModuleClassWithAppCDS() throws Exception {
+        OutputAnalyzer output = TestCommon.exec(
+            appJar,
+            "-Xbootclasspath/a:" + bootAppendJar,
+            "--limit-modules", "java.base",
+            "-XX:+TraceClassLoading",
+            MAIN_CLASS,
+            "Test #4", BOOT_APPEND_MODULE_CLASS, "true", "BOOT");
+        TestCommon.checkExec(output);
+        if (!TestCommon.isUnableToMap(output))
+            output.shouldContain("[class,load] sun.nio.cs.ext.MyClass source: shared objects file");
+    }
+
+
+    // 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 {
+
+        CDSOptions opts = (new CDSOptions())
+            .addPrefix("-Xbootclasspath/a:" + bootAppendJar, "-cp", appJar,
+                       "--limit-modules", "java.base")
+            .setArchiveName(testArchiveName)
+            .addSuffix(MAIN_CLASS, "Test #9", APP_MODULE_CLASS, "true", "BOOT");
+
+        CDSTestUtils.runWithArchiveAndCheck(opts);
+    }
+
+    // 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 {
+        OutputAnalyzer output = TestCommon.exec(
+            appJar,
+            "-Xbootclasspath/a:" + bootAppendJar,
+            "-XX:+TraceClassLoading",
+            "--limit-modules", "java.base",
+            MAIN_CLASS,
+            "Test #10", APP_MODULE_CLASS, "true", "BOOT");
+        TestCommon.checkExec(output);
+
+        if (!TestCommon.isUnableToMap(output))
+            output.shouldContain("[class,load] com.sun.tools.javac.Main2 source: shared objects file");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/ClassPathTests.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,240 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library ../..
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @modules 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/Main2.jasm
+ * @compile src/javax/activation/UnsupportedDataTypeException2.jasm
+ * @run main 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.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;
+
+
+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/Main2";
+    private static final String PLATFORM_ARCHIVE_CLASS = "javax/activation/UnsupportedDataTypeException2";
+    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 Exception {
+        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());
+                m.invoke(tests);
+                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);
+        // Only a class that belongs to a module which is not defined by default
+        // can be found. In this case the PLATFORM_ARCHIVE_CLASS belongs
+        // to the java.activation which is not defined by default; it is the only
+        // class can be found during dumping.
+        for (String archiveClass : ARCHIVE_CLASSES) {
+            if (archiveClass.equals(PLATFORM_ARCHIVE_CLASS)) {
+                output1.shouldNotContain("Preload Warning: Cannot find " + archiveClass);
+            } else {
+                output1.shouldContain("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);
+    }
+
+    // For tests #3 and #4, we need to "--add-modules java.activation" since the
+    // java.activation module won't be defined by default.
+
+    // #3: Archived classpath class in same package as jimage ext class. With AppCDS.
+    // Should fail to load.
+    public void testExtClassWithAppCDS() throws Exception {
+        OutputAnalyzer output = TestCommon.exec(
+            appJar, "--add-modules", "java.activation", MAIN_CLASS,
+            "Test #3", PLATFORM_ARCHIVE_CLASS, "false"); // last 3 args passed to test
+        TestCommon.checkExec(output);
+    }
+
+    // #4: Archived classpath class in same package as jimage ext class. Without AppCDS.
+    // Should fail to load.
+    public void testExtClassWithoutAppCDS() throws Exception {
+        CDSOptions opts = (new CDSOptions())
+            .addPrefix("-cp", appJar, "--add-modules", "java.activation")
+            .setArchiveName(testArchiveName)
+            .addSuffix(MAIN_CLASS, "Test #4", PLATFORM_ARCHIVE_CLASS, "false");
+
+        CDSTestUtils.runWithArchiveAndCheck(opts);
+    }
+
+    // #5: Archived classpath class in same package as jimage app class. With AppCDS.
+    // Should load because --limit-modules is used.
+    public void testAppClassWithLimitModsWithAppCDS() throws Exception {
+        OutputAnalyzer output = TestCommon.exec(
+            appJar,
+            "--limit-modules", "java.base",
+            MAIN_CLASS,
+            "Test #5", APP_ARCHIVE_CLASS, "true"); // last 3 args passed to test
+        TestCommon.checkExec(output);
+    }
+
+    // #6: Archived classpath class in same package as jimage app class. Without AppCDS.
+    // Should load 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.runWithArchiveAndCheck(opts);
+    }
+
+    // #7: Archived classpath class in same package as jimage ext class. With AppCDS.
+    // Should load because --limit-modules is used.
+    public void testExtClassWithLimitModsWithAppCDS() throws Exception {
+        OutputAnalyzer output = TestCommon.exec(
+            appJar,
+            "--limit-modules", "java.base",
+            MAIN_CLASS,
+            "Test #7", PLATFORM_ARCHIVE_CLASS, "true"); // last 3 args passed to test
+        TestCommon.checkExec(output);
+    }
+
+    // #8: Archived classpath class in same package as jimage ext class. Without AppCDS.
+    // Should load 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.runWithArchiveAndCheck(opts);
+    }
+
+    // #9: Archived classpath class with same name as jimage app class. With AppCDS.
+    // Should load because --limit-modules is used.
+    public void testReplacingJImageClassWithAppCDS() throws Exception {
+        OutputAnalyzer output = TestCommon.exec(
+            appJar,
+            "--limit-modules", "java.base", "-XX:+TraceClassLoading",
+            MAIN_CLASS,
+            "Test #9", JIMAGE_CLASS, "true"); // last 3 args passed to test
+        TestCommon.checkExec(output);
+    }
+
+    // #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.runWithArchiveAndCheck(opts);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/DummyClassesInBootClassPath.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,88 @@
+/*
+ * 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 Ensure that classes found in jimage takes precedence over classes found in -Xbootclasspath/a.
+ * AppCDS does not support uncompressed oops
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.activation
+ *          jdk.jartool/sun.tools.jar
+ * @compile ../../test-classes/DummyClassHelper.java
+ * @compile ../../test-classes/java/net/HttpCookie.jasm
+ * @compile ../../test-classes/javax/activation/MimeType.jasm
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main 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()";
+
+    public static void main(String[] args) throws Exception {
+        String classNames[] = { "java/net/HttpCookie",
+                                "javax/activation/MimeType"};
+        JarBuilder.build("dummyClasses", classNames[0], classNames[1]);
+
+        String appJar = TestCommon.getTestJar("dummyClasses.jar");
+        OutputAnalyzer dumpOutput = TestCommon.dump(
+            appJar, classNames, "-Xbootclasspath/a:" + appJar);
+
+        List<String> argsList = new ArrayList<String>();
+        for (int i = 0; i < classNames.length; i++) {
+            argsList.add(classNames[i].replace('/', '.'));
+        }
+        String[] arguments = new String[argsList.size()];
+        arguments = argsList.toArray(arguments);
+        OutputAnalyzer execOutput = TestCommon.execCommon(
+            "-cp", TestCommon.getTestDir("."), "-verbose:class",
+            "--add-modules", "java.activation",
+            "-Xbootclasspath/a:" + appJar, "DummyClassHelper",
+            arguments[0], arguments[1]);
+        for (int i = 0; i < arguments.length; i++) {
+            TestCommon.checkExec(execOutput,
+                "java.lang.NoSuchMethodException: " + arguments[i] + "." +
+                METHOD_NAME);
+        }
+
+        JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox");
+        String whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar");
+        String bootClassPath = "-Xbootclasspath/a:" + appJar +
+            File.pathSeparator + whiteBoxJar;
+        argsList.add("testWithWhiteBox");
+        arguments = new String[argsList.size()];
+        arguments = argsList.toArray(arguments);
+        String[] opts = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
+            bootClassPath, "-XX:+TraceClassPaths", "DummyClassHelper",
+            arguments[0], arguments[1], arguments[2]};
+        OutputAnalyzer output = TestCommon.execCommon(opts);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/EmptyClassInBootClassPath.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,106 @@
+/*
+ * 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 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.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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 ../../test-classes/EmptyClassHelper.java
+ * @compile ../../test-classes/com/sun/tools/javac/Main.jasm
+ * @run main 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<String> argsList = new ArrayList<String>();
+        argsList.add(classPath);
+        argsList.add(bootclasspath);
+        argsList.add("--add-exports=java.base/jdk.internal.misc=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);
+        OutputAnalyzer runOutput = TestCommon.execCommon(opts);
+        TestCommon.checkExec(runOutput, "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);
+        runOutput = TestCommon.execCommon(opts);
+        TestCommon.checkExec(runOutput, 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);
+        runOutput = TestCommon.execCommon(opts);
+        TestCommon.checkExec(runOutput, 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);
+        runOutput = TestCommon.execCommon(opts);
+        TestCommon.checkExec(runOutput, EXPECTED_EXCEPTION);
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/com/sun/tools/javac/Main.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -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 "<init>":"()V"
+    stack 1 locals 1
+{
+    aload_0;
+    invokespecial   Method java/lang/Object."<init>":"()V";
+    return;
+}
+
+public Method toString:"()Ljava/lang/String;"
+    stack 1 locals 1
+{
+    ldc String "hi";
+    areturn;
+}
+
+} // end class Main
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/com/sun/tools/javac/Main2.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -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 Main2
+    version 51:0
+{
+
+public Method "<init>":"()V"
+    stack 1 locals 1
+{
+    aload_0;
+    invokespecial   Method java/lang/Object."<init>":"()V";
+    return;
+}
+
+public Method toString:"()Ljava/lang/String;"
+    stack 1 locals 1
+{
+    ldc String "hi";
+    areturn;
+}
+
+} // end class Main2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/javax/activation/UnsupportedDataTypeException2.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -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 javax/activation;
+
+public class UnsupportedDataTypeException2
+    version 51:0
+{
+
+public Method "<init>":"()V"
+    stack 1 locals 1
+{
+    aload_0;
+    invokespecial   Method java/lang/Object."<init>":"()V";
+    return;
+}
+
+public Method toString:"()Ljava/lang/String;"
+    stack 1 locals 1
+{
+    ldc String "hi";
+    areturn;
+}
+
+} // end class UnsupportedDataTypeException2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/jdk/test/Main.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,122 @@
+/*
+ * 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.
+ *
+ */
+
+/**
+ * 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".
+                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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/sun/nio/cs/ext/MyClass.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/classpathtests/src/sun/nio/cs/ext1/MyClass.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/limitmods/LimitModsHelper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ *
+ */
+
+/**
+ * Used with -p or --upgrade-module-path to exercise the replacement
+ * of classes in modules that are linked into the runtime image.
+ */
+
+import java.lang.*;
+import java.lang.reflect.*;
+import sun.hotspot.WhiteBox;
+
+
+public class LimitModsHelper {
+    static final ClassLoader PLATFORM_LOADER = ClassLoader.getPlatformClassLoader();
+    static final ClassLoader SYS_LOADER      = ClassLoader.getSystemClassLoader();
+
+    public static void main(String[] args) throws Exception {
+        assertTrue(args.length == 4);
+        String[] classNames = new String[3];
+        for (int i = 0; i < 3; i++) {
+            classNames[i] = args[i].replace('/', '.');
+        }
+        int excludeModIdx = Integer.parseInt(args[3]);
+
+        ClassLoader expectedLoaders[] = {null, PLATFORM_LOADER, SYS_LOADER};
+
+        WhiteBox wb = WhiteBox.getWhiteBox();
+
+        Class<?> clazz = null;
+        for (int i = 0; i < 3; i++) {
+            try {
+                // Load the class with the default ClassLoader.
+                clazz = Class.forName(classNames[i]);
+            } catch (Exception e) {
+                if (i == excludeModIdx) {
+                    System.out.println(classNames[i] + " not found as expected because the module isn't in the --limit-modules - PASSED");
+                } else {
+                    throw(e);
+                }
+            }
+
+            if (clazz != null && i != excludeModIdx) {
+                // Make sure we got the expected defining ClassLoader
+                testLoader(clazz, expectedLoaders[i]);
+
+                // Make sure the class is in the shared space
+                if (!wb.isSharedClass(clazz)) {
+                    throw new RuntimeException(clazz.getName() +
+                        ".class should be in the shared space. " +
+                         "loader=" + clazz.getClassLoader() + " module=" + clazz.getModule().getName());
+                }
+            }
+            clazz = null;
+        }
+    }
+
+    /**
+     * 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) {
+        if (!expr)
+            throw new RuntimeException("assertion failed");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/limitmods/LimitModsTests.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,164 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library ../..
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @modules jdk.jartool/sun.tools.jar
+ *          jdk.internal.jvmstat/sun.jvmstat.monitor
+ * @compile LimitModsHelper.java
+ * @compile ../../test-classes/java/net/HttpCookie.jasm
+ * @compile ../../test-classes/jdk/dynalink/DynamicLinker.jasm
+ * @compile ../../test-classes/com/sun/tools/javac/Main.jasm
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main LimitModsTests
+ * @summary AppCDS tests for excluding class in module by using --limit-modules.
+ */
+
+/**
+ * This is for testing the --limit-modules option with AppCDS.
+ * This test assumes the following defining class loader, module, class relations:
+ * class loader    module            class
+ * -----------------------------------------------------
+ * boot            java.base         java/net/HttpCookie
+ * platform        jdk.dynalink      jdk/dynalink/DynamicLinker
+ * app             jdk.compiler      com/sun/tools/javac/Main
+ *
+ * This test dumps the above 3 classes into a shared archive.
+ * Then it will run the following 4 -limit-modules scenarios:
+ * 1. without --limit-modules
+ *    All 3 classes should be loaded successfully.
+ *    All 3 classes should be loaded by the appropriate class loader.
+ *    All 3 classes should be found in the shared archive.
+ * 2. --limit-modules java.base,jdk.dynalink
+ *    The loading of the com/sun/tools/javac/Main class should fail.
+ *    The other 2 classes should be loaded successfully and by the appropriate class loader.
+ *    The other 2 classes should be found in the shared archive.
+ * 3. --limit-modules java.base,jdk.compiler
+ *    The loading of the jdk/nio/dynalink/DynamicLinker class should fail.
+ *    The other 2 classes should be loaded successfully and by the appropriate class loader.
+ *    The other 2 classes should be found in the shared archive.
+ * 4. --limit-modules jdk.dynalink,jdk.compiler
+ *    The java.base module can't be excluded.
+ *    The results for this case is the same as for case #1.
+ */
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import jdk.test.lib.process.ProcessTools;
+import jdk.test.lib.process.OutputAnalyzer;
+
+
+public class LimitModsTests {
+
+    // the module that is limited
+    private static final String[] LIMIT_MODULES = {"java.base", "jdk.dynalink", "jdk.compiler"};
+
+    // test classes to archive.
+    private static final String BOOT_ARCHIVE_CLASS = "java/net/HttpCookie";
+    private static final String PLATFORM_ARCHIVE_CLASS = "jdk/dynalink/DynamicLinker";
+    private static final String APP_ARCHIVE_CLASS = "com/sun/tools/javac/Main";
+    private static final String[] ARCHIVE_CLASSES = {
+        BOOT_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, APP_ARCHIVE_CLASS};
+    private String bootClassPath = null;
+    private String whiteBoxJar = null;
+    private String helperJar = null;
+    private String appJar = null;
+    private OutputAnalyzer output = null;
+
+    public static void main(String[] args) throws Exception {
+        LimitModsTests tests = new LimitModsTests();
+        tests.dumpArchive();
+        tests.runTestNoLimitMods();
+        tests.runTestLimitMods();
+    }
+
+    void dumpArchive() throws Exception {
+        JarBuilder.build("limitModsTest", BOOT_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, APP_ARCHIVE_CLASS);
+        JarBuilder.build(true, "WhiteBox", "sun/hotspot/WhiteBox");
+        JarBuilder.build("limitModsHelper", "LimitModsHelper");
+
+        appJar = TestCommon.getTestJar("limitModsTest.jar");
+        whiteBoxJar = TestCommon.getTestJar("WhiteBox.jar");
+        helperJar = TestCommon.getTestJar("limitModsHelper.jar");
+        bootClassPath = "-Xbootclasspath/a:" + whiteBoxJar;
+        // Dump the test classes into the archive
+        OutputAnalyzer output1  = TestCommon.dump(appJar, TestCommon.list(ARCHIVE_CLASSES), bootClassPath);
+        TestCommon.checkDump(output1);
+        // Make sure all the classes where successfully archived.
+        for (String archiveClass : ARCHIVE_CLASSES) {
+            output1.shouldNotContain("Preload Warning: Cannot find " + archiveClass);
+        }
+    }
+
+    // run the test without --limit-modules
+    public void runTestNoLimitMods() throws Exception {
+        output = TestCommon.exec(
+            appJar + File.pathSeparator + helperJar,
+            "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", bootClassPath,
+            "LimitModsHelper",
+            BOOT_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, APP_ARCHIVE_CLASS, "-1"); // last 4 args passed to test
+        TestCommon.checkExec(output);
+    }
+
+    // run the test with --limit-modules
+    //
+    // --limit-modules jdk.dynalink,jdk.compiler
+    // It seems we can't exclude the java.base module. For this case,
+    // although the java.base module isn't in --limit-modules, the class
+    // in the java.base module (java.net.HttpCookie) can also be found.
+    //
+    // --limit-modules java.base,jdk.dynalink
+    // --limit-modules java.base,jdk.compiler
+    public void runTestLimitMods() throws Exception {
+        String limitMods = null;
+        for (int excludeModIdx = 0; excludeModIdx < 3; excludeModIdx++) {
+            for (int includeModIdx = 0; includeModIdx < 3; includeModIdx++) {
+                if (includeModIdx != excludeModIdx) {
+                    if (limitMods != null) {
+                        limitMods += ",";
+                        limitMods += LIMIT_MODULES[includeModIdx];
+                    } else {
+                        limitMods = LIMIT_MODULES[includeModIdx];
+                    }
+                }
+            }
+            output = TestCommon.exec(
+                appJar + File.pathSeparator + helperJar,
+                "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI", bootClassPath,
+                "--limit-modules", limitMods,
+                "LimitModsHelper",
+                BOOT_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS, APP_ARCHIVE_CLASS,
+                Integer.toString(excludeModIdx)); // last 4 args passed to test
+            TestCommon.checkExec(output);
+            limitMods = null;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/OverrideTests.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,238 @@
+/*
+ * 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
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @modules java.base/jdk.internal.misc
+ * @library ../..
+ * @library /test/lib
+ * @run main 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");
+
+    // the module that is upgraded
+    private static final String[] UPGRADED_MODULES = {"jdk.compiler", "java.activation"};
+    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 = "javax/activation/UnsupportedDataTypeException";
+    private static final String[] ARCHIVE_CLASSES = {APP_ARCHIVE_CLASS, PLATFORM_ARCHIVE_CLASS};
+    private static String testArchiveName;
+
+
+    public static void main(String[] args) throws Exception {
+        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(upgradedMod),
+                UPGRADEDMODS_DIR[i].resolve(upgradedMod)
+            );
+            Asserts.assertTrue(compiled, upgradedMod + " 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");
+
+        // the java.activation module is not defined by default; --add-modules is required.
+        // dumping without "--add-modules java.activation"
+        // the class in the javax.activation package cannot be found
+        OutputAnalyzer output1  = TestCommon.dump(null /* appJar*/, TestCommon.list(ARCHIVE_CLASSES));
+        TestCommon.checkDump(output1);
+        output1.shouldContain(
+            "Preload Warning: Cannot find javax/activation/UnsupportedDataTypeException");
+
+        // dump the archive with jdk.comiler and java.activation classes in the class list
+        // with "--add-modules java.activation"
+        output1  = TestCommon.dump(null /* appJar*/, TestCommon.list(ARCHIVE_CLASSES),
+            "--add-modules", "java.activation");
+        TestCommon.checkDump(output1);
+        // Make sure all the classes where successfully archived.
+        for (String archiveClass : ARCHIVE_CLASSES) {
+            output1.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 javax.activation.UnsupportedDataTypeException from module jdk.activation.
+     *  -At run time, upgrade module jdk.activation using --upgrade-module-path.
+     *   Class.forname(UnsupportedDataTypeException) MUST NOT load the archived UnsupportedDataTypeException.
+     *  -At run time, module jdk.activation also exists in --module-path.
+     *   Class.forname(UnsupportedDataTypeException) MUST load the archived UnsupportedDataTypeException.
+     */
+    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[4];
+        prefix[0] = "-cp";
+        prefix[1] = "\"\"";
+        prefix[2] = "--add-modules";
+        prefix[3] = "java.activation";
+
+        // Run the test with --upgrade-module-path set to alternate location of archiveClass
+        // The alternate version of archiveClass SHOULD be found.
+        output = TestCommon.execModule(
+            prefix,
+            UPGRADEDMODS_DIR[upgradeModIdx].toString(),
+            MODS_DIR.toString(),
+            mid,
+            archiveClass, loaderName, "true"); // last 3 args passed to test
+        if (isAppLoader) {
+            try {
+                output.shouldContain(expectedException);
+            } catch (Exception e) {
+                TestCommon.checkCommonExecExceptions(output, e);
+            }
+        } else {
+            TestCommon.checkExec(output);
+        }
+
+        // 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);
+
+        if (isAppLoader) {
+            try {
+                output.shouldContain(expectedException);
+            } catch (Exception e) {
+                TestCommon.checkCommonExecExceptions(output, e);
+            }
+        } else {
+            if (!CDSTestUtils.isUnableToMap(output))
+                output.shouldHaveExitValue(0);
+        }
+
+        // Run the test with -p set to alternate location of archiveClass.
+        // The alternate version of archiveClass SHOULD NOT be found.
+        output = TestCommon.execModule(
+            prefix,
+            null,
+            UPGRADEDMODS_DIR[upgradeModIdx].toString() + java.io.File.pathSeparator + MODS_DIR.toString(),
+            mid,
+            archiveClass, loaderName, "false"); // last 3 args passed to test
+        TestCommon.checkExec(output);
+
+        // 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/java.activation/javax/activation/UnsupportedDataTypeException.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,36 @@
+/*
+ * 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 javax.activation;
+
+import java.io.IOException;
+
+public class UnsupportedDataTypeException extends IOException {
+    public UnsupportedDataTypeException() {
+    }
+
+    public String toString() {
+        return "hi";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/java.activation/module-info.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.activation {
+    exports javax.activation;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/jdk.compiler/com/sun/tools/javac/Main.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/jdk.compiler/module-info.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/test/jdk/test/Main.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,101 @@
+/*
+ * 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.
+ *
+ */
+
+/**
+ * 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);
+        // Create an instance and see what toString() returns
+        String s = 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(s.equals("hi") == 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jigsaw/overridetests/src/test/module-info.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 test {
+    requires jdk.compiler;
+    requires java.activation;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHook.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,93 @@
+/*
+ * 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;
+
+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[]) {
+        TestCaseId testCase = TestCaseId.valueOf(args[0]);
+        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");
+
+        }
+    }
+
+    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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/ClassFileLoadHookTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,100 @@
+/*
+ * 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 Test jvmti class file loader hook interaction with AppCDS
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @modules java.base/jdk.internal.misc
+ *          jdk.jartool/sun.tools.jar
+ *          java.management
+ * @build ClassFileLoadHook
+ * @run main/othervm/native ClassFileLoadHookTest
+ */
+
+
+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 ClassFileLoadHookTest {
+    public static String sharedClasses[] = {
+        "ClassFileLoadHook",
+        "ClassFileLoadHook$TestCaseId",
+        "ClassFileLoadHook$1",
+        "LoadMe"
+    };
+
+    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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationAgent.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Premain-Class: InstrumentationRegisterClassFileTransformer
+Agent-Class: InstrumentationRegisterClassFileTransformer
+Can-Retransform-Classes: true
+Can-Redefine-Classes: true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,220 @@
+/*
+ * 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.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 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"));
+
+        File bootJar = new File(args[0]);
+        File appJar  = new File(args[1]);
+        File custJar = new File(args[2]);
+        String flagFile = 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 {
+        if (!flagFile.equals("noattach")) {
+            File f = new File(flagFile);
+            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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationClassFileTransformer.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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/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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationRegisterClassFileTransformer.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/InstrumentationTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,278 @@
+/*
+ * 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
+ * @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.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.flavor != "minimal"
+ * @modules java.base/jdk.internal.misc
+ *          jdk.jartool/sun.tools.jar
+ *          java.management
+ * @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 com.sun.tools.attach.VirtualMachineDescriptor;
+import java.io.File;
+import java.io.FileOutputStream;
+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 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", bootJar, appJar, custJar, flagFile);
+        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", bootJar, appJar, custJar, flagFile);
+
+        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;
+        }
+
+        // We use the flagFile to prevent the child process to make progress, until we have
+        // attached to it.
+        File f = new File(flagFile);
+        FileOutputStream o = new FileOutputStream(f);
+        o.write(1);
+        o.close();
+        if (!f.exists()) {
+            throw new RuntimeException("Failed to create " + 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 system
+        // until the child process is launched, and then do the attachment.
+        // The child process is uniquely identified by having flagFile in its
+        // command-line -- see AgentAttachThread.getPid().
+        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);
+                List<VirtualMachineDescriptor> vmds = VirtualMachine.list();
+                for (VirtualMachineDescriptor vmd : vmds) {
+                    if (vmd.displayName().contains(flagFile) && vmd.displayName().contains("InstrumentationApp")) {
+                        // We use flagFile (which has the PID of this process) as a unique identifier
+                        // to ident the child process, which we want to attach to.
+                        System.out.println("Process found: " + vmd.id() + " " + vmd.displayName());
+                        return vmd.id();
+                    }
+                }
+            }
+        }
+
+        public void run() {
+            try {
+                String pid = getPid(flagFile);
+                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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelClassesTransform.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/parallelLoad/ParallelLoadAndTransformTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,88 @@
+/*
+ * 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 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.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @modules java.base/jdk.internal.misc
+ *          java.management
+ *          jdk.jartool/sun.tools.jar
+ *          java.instrument
+ * @build TransformUtil TransformerAgent ParallelLoad
+ * @run main 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<String> 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformInterfaceImplementorAppCDS.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,43 @@
+/*
+ * 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.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.flavor != "minimal"
+ * @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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformRelatedClassesAppCDS.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,204 @@
+/*
+ * 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.
+ *
+ */
+
+// 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.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<TestEntry> 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<TestEntry> 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);
+            out = TestCommon.execCommon("-Xlog:class+load=info", "-cp", appJar,
+                                        agentParam, child);
+
+            TransformTestCommon.checkResults(entry, out, 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<TestEntry> testTable) throws Exception {
+        if (!TestCommon.isCustomLoaderSupported()) {
+            log("custom loader not supported for this platform" +
+                " - 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);
+
+        out = TestCommon.execCommon("-Xlog:class+load=info",
+                                    "-cp", appJar,
+                                    "--add-opens=java.base/java.security=ALL-UNNAMED",
+                                    agentParam,
+                                    "CustomLoaderApp",
+                                    customJar, loaderType, child);
+        TransformTestCommon.checkResults(entry, out, 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/jvmti/transformRelatedClasses/TransformSuperSubAppCDS.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,43 @@
+/*
+ * 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.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.flavor != "minimal"
+ * @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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasic.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,105 @@
+/*
+ * 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;
+
+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 B {
+        public static void okToCallBeforeRedefine() {
+            System.out.println("okToCallBeforeRedefine");
+        }
+        public static void okToCallAfterRedefine() {
+            throw new RuntimeException(
+            "okToCallAfterRedefine is called before redefinition, test failed");
+        }
+    }
+
+    static class SubclassOfB extends B {
+        public static void testAfterRedefine() {
+            B.okToCallAfterRedefine();
+        }
+    }
+
+    class Subclass2OfB extends 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, 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
+        B.okToCallBeforeRedefine();
+        RedefineClassHelper.redefineClass(B.class, newB);
+        verifyClassIsShared(wb, B.class);
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineBasicTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,76 @@
+/*
+ * 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 Run /runtime/RedefineTests/RedefineRunningMethods in AppCDS mode to
+ *          make sure class redefinition works with CDS.
+ *          (Note: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib /test/hotspot/jtreg/runtime/RedefineTests /test/hotspot/jtreg/runtime/appcds
+ * @modules java.compiler
+ *          java.instrument
+ *          jdk.jartool/sun.tools.jar
+ *          java.base/jdk.internal.misc
+ *          java.management
+ * @run main RedefineClassHelper
+ * @build sun.hotspot.WhiteBox RedefineBasic
+ * @run main 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 main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_Shared.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,82 @@
+/*
+ * 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 Run /runtime/RedefineTests/RedefineRunningMethods in AppCDS mode to
+ *          make sure class redefinition works with CDS.
+ *          (Note: AppCDS does not support uncompressed oops)
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @library /test/lib /test/hotspot/jtreg/runtime/RedefineTests /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ * @modules java.compiler
+ *          java.instrument
+ *          jdk.jartool/sun.tools.jar
+ * @run main RedefineClassHelper
+ * @build sun.hotspot.WhiteBox RedefineRunningMethods_SharedHelper
+ * @run main 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/redefineClass/RedefineRunningMethods_SharedHelper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/ExerciseGC.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,49 @@
+/*
+ * 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 Exercise GC with shared strings
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @library /test/hotspot/jtreg/runtime/appcds /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @modules java.management
+ *          jdk.jartool/sun.tools.jar
+ * @build HelloStringGC sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main ExerciseGC
+ */
+public class ExerciseGC {
+    public static void main(String[] args) throws Exception {
+        SharedStringsUtils.buildJarAndWhiteBox("HelloStringGC");
+
+        SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("HelloStringGC"),
+            "SharedStringsBasic.txt");
+
+        SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringGC",
+            "-XX:+UnlockDiagnosticVMOptions", "-XX:+VerifyBeforeGC");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/ExtraSharedInput.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,7 @@
+VERSION: 1.0
+@SECTION: Symbol
+0 -1: 
+41 -1: (Ljava/util/Set<TE;>;Ljava/lang/Object;)V
+11 -1: linkMethod 
+18 -1: type can't be null
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/FlagCombo.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,58 @@
+/*
+ * 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 Test relevant combinations of command line flags with shared strings
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @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
+ * @build HelloString
+ * @run main FlagCombo
+ */
+
+import jdk.test.lib.BuildHelper;
+
+public class FlagCombo {
+    public static void main(String[] args) throws Exception {
+        SharedStringsUtils.buildJar("HelloString");
+
+        SharedStringsUtils.dump(TestCommon.list("HelloString"),
+            "SharedStringsBasic.txt");
+
+        SharedStringsUtils.runWithArchive("HelloString", "-XX:+UseG1GC");
+
+        if (BuildHelper.isCommercialBuild()) {
+            SharedStringsUtils.runWithArchiveAuto("HelloString", "-XX:+UnlockCommercialFeatures",
+                "-XX:StartFlightRecording=dumponexit=true");
+        }
+
+        SharedStringsUtils.runWithArchive("HelloString", "-XX:+UnlockDiagnosticVMOptions",
+           "-XX:NativeMemoryTracking=detail", "-XX:+PrintNMTStatistics");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloString.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloStringGC.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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) {
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/HelloStringPlus.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,76 @@
+/*
+ * 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.
+ *
+ */
+
+// 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 not be shared");
+        }
+        if (empty_interned != empty) {
+            throw new RuntimeException("Different string is returned from intern() for empty string");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/IncompatibleOptions.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,145 @@
+/*
+ * 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 Test options that are incompatible with use of shared strings
+ *          Also test mismatch in oops encoding between dump time and run time
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @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
+ * @build HelloString
+ * @run main IncompatibleOptions
+ */
+
+import jdk.test.lib.Asserts;
+import jdk.test.lib.process.OutputAnalyzer;
+
+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;
+
+    public static void main(String[] args) throws Exception {
+        appJar = JarBuilder.build("IncompatibleOptions", "HelloString");
+
+        // Uncompressed OOPs
+        testDump(1, "-XX:+UseG1GC", "-XX:-UseCompressedOops", COOPS_DUMP_WARNING, true);
+
+        // incompatible GCs
+        testDump(2, "-XX:+UseParallelGC", "", GC_WARNING, false);
+        testDump(3, "-XX:+UseSerialGC", "", GC_WARNING, false);
+        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);
+        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"),
+            "-XX:+UseCompressedOops",
+            collectorOption,
+            "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("SharedStringsBasic.txt"),
+            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, "-XX:+UseCompressedOops",
+                collectorOption, extraOption, "HelloString");
+        } else {
+            output = TestCommon.exec(appJar, "-XX:+UseCompressedOops",
+                collectorOption, "HelloString");
+        }
+
+        if (expectedWarning != null)
+            output.shouldMatch(expectedWarning);
+
+        if (expectedToFail)
+            Asserts.assertNE(output.getExitValue(), 0);
+        else
+            SharedStringsUtils.checkExec(output);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/InternSharedString.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,56 @@
+/*
+ * 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 Test shared strings together with string intern operation
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @library /test/hotspot/jtreg/runtime/appcds /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @modules java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile InternStringTest.java
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main InternSharedString
+ */
+
+public class InternSharedString {
+    public static void main(String[] args) throws Exception {
+        SharedStringsUtils.buildJarAndWhiteBox("InternStringTest");
+
+        SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("InternStringTest"),
+            "ExtraSharedInput.txt");
+
+        String[] extraMatches = new String[]   {
+            InternStringTest.passed_output1,
+            InternStringTest.passed_output2,
+            InternStringTest.passed_output3  };
+
+        SharedStringsUtils.runWithArchiveAndWhiteBox(extraMatches, "InternStringTest");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/InternStringTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/InvalidFileFormat.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,73 @@
+/*
+ * 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 Check most common errors in file format
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @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 main InvalidFileFormat
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import java.io.File;
+
+// 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.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");
+    }
+
+    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);
+
+        if (!TestCommon.isUnableToMap(out))
+            out.shouldContain(expectedWarning).shouldHaveExitValue(1);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/LargePages.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,53 @@
+/*
+ * 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 Basic shared string test with large pages
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @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 main LargePages
+ */
+public class LargePages {
+    public static void main(String[] args) throws Exception {
+        SharedStringsUtils.buildJar("HelloString");
+
+        SharedStringsUtils.dump(TestCommon.list("HelloString"),
+            "SharedStringsBasic.txt", "-XX:+UseLargePages");
+        SharedStringsUtils.runWithArchive("HelloString", "-XX:+UseLargePages");
+
+        SharedStringsUtils.dump(TestCommon.list("HelloString"),
+            "SharedStringsBasic.txt",
+            "-XX:+UseLargePages", "-XX:+UseLargePagesInMetaspace");
+        SharedStringsUtils.runWithArchive("HelloString",
+            "-XX:+UseLargePages", "-XX:+UseLargePagesInMetaspace");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockSharedStrings.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,57 @@
+/*
+ * 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 Test locking on shared strings
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @library /test/hotspot/jtreg/runtime/appcds /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @modules java.management
+ *          jdk.jartool/sun.tools.jar
+ * @compile LockStringTest.java LockStringValueTest.java
+ * @build sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main LockSharedStrings
+ */
+
+public class LockSharedStrings {
+    public static void main(String[] args) throws Exception {
+        SharedStringsUtils.buildJarAndWhiteBox("LockStringTest", "LockStringValueTest");
+
+        SharedStringsUtils.dumpWithWhiteBox(
+            TestCommon.list("LockStringTest", "LockStringValueTest"),
+            "ExtraSharedInput.txt");
+
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockStringTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,68 @@
+/*
+ * 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 LockStringTest extends Thread {
+    static String lock = "StringLock";
+    static boolean done = false;
+
+    public static void main(String[] args) throws Exception {
+        WhiteBox wb = WhiteBox.getWhiteBox();
+        if (wb.areSharedStringsIgnored()) {
+            System.out.println("The shared strings are ignored");
+            System.out.println("LockStringTest: PASS");
+            return;
+        }
+
+        if (!wb.isShared(lock)) {
+            throw new RuntimeException("Failed: String is not shared.");
+        }
+
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/LockStringValueTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,78 @@
+/*
+ * 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 Basic test for shared strings
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @library /test/hotspot/jtreg/runtime/appcds /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @modules java.management
+ *          jdk.jartool/sun.tools.jar
+ * @build HelloString
+ * @run main SharedStringsBasic
+ */
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+
+// This test does not use SharedStringsUtils 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 {
+        String appJar = JarBuilder.build("SharedStringsBasic", "HelloString");
+
+        String sharedArchiveConfigFile =
+            TestCommon.getSourceFile("SharedStringsBasic.txt").toString();
+
+        ProcessBuilder dumpPb = ProcessTools.createJavaProcessBuilder(true,
+            "-XX:+UseAppCDS",
+            "-XX:+UseCompressedOops",
+            "-XX:+UseG1GC",
+            "-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,
+            "-XX:+UseAppCDS",
+            "-XX:+UseCompressedOops",
+            "-XX:+UseG1GC",
+            "-cp", appJar,
+            "-XX:SharedArchiveFile=./SharedStringsBasic.jsa",
+            "-Xshare:auto",
+            "-showversion",
+            "HelloString");
+
+        TestCommon.executeAndLog(runPb, "run").shouldHaveExitValue(0);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasic.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsBasicPlus.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,50 @@
+/*
+ * 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 Basic plus test for shared strings
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @library /test/hotspot/jtreg/runtime/appcds /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @modules java.management
+ *          jdk.jartool/sun.tools.jar
+ * @build HelloStringPlus sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main SharedStringsBasicPlus
+ */
+
+public class SharedStringsBasicPlus {
+    public static void main(String[] args) throws Exception {
+        SharedStringsUtils.buildJarAndWhiteBox("HelloStringPlus");
+
+        SharedStringsUtils.dumpWithWhiteBox( TestCommon.list("HelloStringPlus"),
+            "SharedStringsBasic.txt");
+
+        SharedStringsUtils.runWithArchiveAndWhiteBox("HelloStringPlus");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsStress.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * @test
+ * @summary Write a lots of shared strings.
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @library /test/hotspot/jtreg/runtime/appcds /test/lib
+ * @modules jdk.jartool/sun.tools.jar
+ * @build HelloString
+ * @run main 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 {
+    public static void main(String[] args) throws Exception {
+        String appJar = JarBuilder.build("SharedStringsStress", "HelloString");
+
+        String sharedArchiveConfigFile = System.getProperty("user.dir") + File.separator + "SharedStringsStress_gen.txt";
+        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<100000; i++) {
+                String s = "generated_string " + i;
+                out.println(s.length() + ": " + s);
+            }
+            out.close();
+        }
+
+        // Set NewSize to 8m due to dumping could fail in hs-tier6 testing with
+        // the vm options: -XX:+UnlockCommercialFeatures -XX:+UseDeterministicG1GC
+        // resulting in vm initialization error:
+        // "GC triggered before VM initialization completed. Try increasing NewSize, current value 1331K."
+        OutputAnalyzer dumpOutput = TestCommon.dump(appJar, TestCommon.list("HelloString"), "-XX:NewSize=8m",
+                                                    "-XX:SharedArchiveConfigFile=" + sharedArchiveConfigFile);
+        TestCommon.checkDump(dumpOutput);
+        OutputAnalyzer execOutput = TestCommon.exec(appJar, "HelloString");
+        TestCommon.checkExec(execOutput);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsUtils.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,143 @@
+/*
+ * 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.cds.CDSOptions;
+import jdk.test.lib.process.OutputAnalyzer;
+
+// 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 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));
+
+        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);
+
+        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);
+
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWb.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+        }
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SharedStringsWbTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,53 @@
+/*
+ * 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 White box test for shared strings
+ * Feature support: G1GC only, compressed oops/kptrs, 64-bit os, not on windows
+ * @requires (sun.arch.data.model != "32") & (os.family != "windows")
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @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 SharedStringsWb
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main SharedStringsWbTest
+ */
+
+import java.io.*;
+import sun.hotspot.WhiteBox;
+
+public class SharedStringsWbTest {
+    public static void main(String[] args) throws Exception {
+        SharedStringsUtils.buildJarAndWhiteBox("SharedStringsWb");
+
+        SharedStringsUtils.dumpWithWhiteBox(TestCommon.list("SharedStringsWb"),
+            "SharedStringsBasic.txt");
+
+        SharedStringsUtils.runWithArchiveAndWhiteBox("SharedStringsWb");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/SysDictCrash.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,63 @@
+/*
+ * 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 Regression test for JDK-8098821
+ * @bug 8098821
+ * @requires (vm.opt.UseCompressedOops == null) | (vm.opt.UseCompressedOops == true)
+ * @requires vm.gc.G1
+ * @library /test/lib /test/hotspot/jtreg/runtime/appcds
+ * @modules java.base/jdk.internal.misc
+ * @modules java.management
+ * @run main SysDictCrash
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import jdk.test.lib.process.ProcessTools;
+
+public class SysDictCrash {
+    public static void main(String[] args) throws Exception {
+        // SharedBaseAddress=0 puts the archive at a very high address on solaris,
+        // which provokes the crash.
+        ProcessBuilder dumpPb = ProcessTools.createJavaProcessBuilder(true,
+            "-XX:+UseG1GC", "-XX:MaxRAMPercentage=12.5",
+            "-XX:+UseAppCDS",
+            "-cp", ".",
+            "-XX:SharedBaseAddress=0", "-XX:SharedArchiveFile=./SysDictCrash.jsa",
+            "-Xshare:dump",
+            "-showversion", "-Xlog:cds,cds+hashtables");
+
+        TestCommon.checkDump(TestCommon.executeAndLog(dumpPb, "dump"));
+
+        ProcessBuilder runPb = ProcessTools.createJavaProcessBuilder(true,
+            "-XX:+UseG1GC", "-XX:MaxRAMPercentage=12.5",
+            "-XX:+UseAppCDS",
+            "-XX:SharedArchiveFile=./SysDictCrash.jsa",
+            "-Xshare:on",
+            "-version");
+
+        TestCommon.checkExec(TestCommon.executeAndLog(runPb, "exec"));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/CorruptDataLine.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidDataType.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidHeader.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidString.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,6 @@
+VERSION: 1.0
+@SECTION: String
+31: shred_test_string_unique_14325
+31: shared_test_string_intern_12345
+7: test123
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidStringFormat.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidSymbol.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMet%%%hod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidSymbolFormat.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/InvalidVersion.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/OverflowPrefix.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/TruncatedString.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/sharedStrings/invalidFormat/UnrecognizedPrefix.txt	Mon Nov 27 20:21:34 2017 -0800
@@ -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<TE;>;Ljava/lang/Object;)V
+10 -1: linkMethod
+20 -1: isAlphaNumericString
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ArrayListTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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<String> 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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/BootClassPathAppendHelper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/C1.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/C2.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 {
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/CheckIfShared.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 CheckIfShared {
+  public static void main(String args[]) throws Exception {
+    WhiteBox wb = WhiteBox.getWhiteBox();
+    if ("true".equals(args[0])) {
+      if (!wb.isSharedClass(CheckIfShared.class)) {
+        throw new RuntimeException("wb.isSharedClass(CheckIfShared.class) should be true");
+      }
+    } else {
+      if (wb.isSharedClass(CheckIfShared.class)) {
+        throw new RuntimeException("wb.isSharedClass(CheckIfShared.class) should be false");
+      }
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Child.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr1.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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("");} }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr2.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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() {} }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr3.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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() {} }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr4.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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("");} }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/CpAttr5.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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() {} }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/DummyClassHelper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,58 @@
+/*
+ * 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.*;
+import java.lang.reflect.*;
+import sun.hotspot.WhiteBox;
+
+public class DummyClassHelper {
+    public static void main(String[] args) throws Exception {
+        String[] classNames = {args[0], args[1]};
+        Class cls = null;
+        if (args.length == 2) {
+            for (int i = 0; i < classNames.length; i++) {
+                Method m = null;
+                cls = Class.forName(classNames[i]);
+                try {
+                    m = cls.getMethod("thisClassIsDummy");
+                    throw new java.lang.RuntimeException(classNames[i] +
+                        " should be loaded from the jimage and should not have the thisClassIsDummy() method.");
+                } catch(NoSuchMethodException ex) {
+                    System.out.println(ex.toString());
+                }
+            }
+        } else {
+            WhiteBox wb = WhiteBox.getWhiteBox();
+            for (int i = 0; i < classNames.length; i++) {
+                cls = Class.forName(classNames[i]);
+                if (!wb.isSharedClass(cls)) {
+                    System.out.println(classNames[i] + ".class" + " is not in shared space as expected.");
+                } else {
+                    throw new java.lang.RuntimeException(classNames[i] +
+                        ".class shouldn't be in shared space.");
+                }
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/EmptyClassHelper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,59 @@
+/*
+ * 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.*;
+import java.lang.reflect.*;
+import jdk.internal.misc.JavaLangAccess;
+import jdk.internal.misc.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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/FieldAnnotationsApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ForNameTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,45 @@
+/*
+ * 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 ForNameTest {
+    public static void main(String[] args) throws Throwable {
+        // Hello is on the bootclasspath. The defining classloader is
+        // the NULL classloader. See AppCDSClassLoaderTest.
+        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 not in shared space.");
+        } else {
+            throw new java.lang.RuntimeException("Hello.class shouldn't be in shared space.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Greet.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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?");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Hello.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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");
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/HelloExt.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,59 @@
+/*
+ * 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 HelloExt {
+   public static void main(String[] args) throws Throwable {
+
+       String className = "org.omg.CORBA.ORB";
+       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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/HelloExtApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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());
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/HelloExtExt.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 {
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/HelloMore.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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");
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/HelloWB.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.
+ *
+ */
+
+import sun.hotspot.WhiteBox;
+
+public class HelloWB {
+    public static void main(String[] args) throws Throwable {
+
+        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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Hi.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Iloadw.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -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;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/IloadwMain.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassPackage.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/JimageClassProtDomain.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,74 @@
+/*
+ * 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 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",
+              "sun.tools.javac.Main", "sun.tools.javac.BatchParser"},
+
+             {"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",
+              "sun.rmi.rmic.RMIGenerator", "sun.rmi.rmic.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("Failed: Protection Domains do not match!");
+            System.out.println(c1.getProtectionDomain());
+            System.out.println(c1.getProtectionDomain().getCodeSource());
+            System.out.println(c2.getProtectionDomain());
+            System.out.println(c2.getProtectionDomain().getCodeSource());
+            System.exit(1);
+        } else {
+            System.out.println("Passed: Protection Domains match.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/JvmtiApp.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,105 @@
+/*
+ * 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 sun.hotspot.WhiteBox;
+
+public class JvmtiApp {
+    static Class forname() {
+        try {
+            return Class.forName("Hello");
+        } 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[]) {
+        if (args[0].equals("noadd")) {
+            if (forname() != null) {
+                failed("Hello 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();
+            if (cls == null) {
+                failed("Cannot find Hello 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();
+            if (cls == null) {
+                failed("Cannot find Hello class");
+            }
+            if (cls.getClassLoader() != JvmtiApp.class.getClassLoader()) {
+                failed("Hello class not loaded by app classloader");
+            }
+        } else if (args[0].equals("noadd-appcds")) {
+            Class cls = forname();
+            if (cls == null) {
+                failed("Cannot find Hello class");
+            }
+            if (cls.getClassLoader() != JvmtiApp.class.getClassLoader()) {
+                failed("Hello class not loaded by app classloader");
+            }
+        } else if (args[0].equals("appandboot")) {
+            wb.addToBootstrapClassLoaderSearch(args[1]);
+            wb.addToSystemClassLoaderSearch(args[2]);
+            Class cls = forname();
+            if (cls == null) {
+                failed("Cannot find Hello class");
+            }
+            if (cls.getClassLoader() != null) {
+                failed("Hello 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() {}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/MethodNoReturn.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -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 "<init>":"()V"
+	stack 1 locals 1
+{
+		aload_0;
+		invokespecial	Method java/lang/Object."<init>":"()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	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/MissingSuper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/MultiProcClass.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/MyAnnotation.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/PackageSealingTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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());
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/PackageTest.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ParallelClasses.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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 {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ParallelLoad.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,220 @@
+/*
+ * 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<NUM_THREADS; i++) {
+                    URL url = new File(customJar).toURI().toURL();
+                    URL[] urls = new URL[] {url};
+                    classLoaders[i] = new URLClassLoader(urls);
+                }
+            } else {
+                // Loaders must be supplied by caller of the run() method
+                mode = API_MODE;
+                classLoaders = loaders;
+            }
+        }
+
+        System.out.println("Start Parallel Load ...");
+
+        Thread thread[] = new Thread[NUM_THREADS];
+        for (int i=0; i<NUM_THREADS; i++) {
+            Thread t = new ParallelLoadThread(i);
+            t.start();
+            thread[i] = t;
+        }
+
+        Thread watchdog = new ParallelLoadWatchdog();
+        watchdog.setDaemon(true);
+        watchdog.start();
+
+        for (int i=0; i<NUM_THREADS; i++) {
+            thread[i].join();
+        }
+        System.out.println("Parallel Load ... done");
+        System.exit(0);
+    }
+}
+
+
+class ParallelLoadWatchdog extends Thread {
+    public void run() {
+        try {
+            long timeout = (long) (20 * 1000 * ParallelLoad.timeoutFactor);
+            Thread.sleep(timeout);
+            System.out.println("ParallelLoadWatchdog: Timeout reached: timeout(ms) = " + timeout);
+            System.exit(1);
+        } catch (Throwable t) {
+            t.printStackTrace();
+            System.exit(1);
+        }
+    }
+};
+
+
+class ParallelLoadThread extends Thread {
+    static int num_ready[] = new int[ParallelLoad.MAX_CLASSES];
+    static Object lock = new Object();
+    static String transformMode =
+        System.getProperty("appcds.parallel.transform.mode", "none");
+
+    int thread_id;
+    ParallelLoadThread(int thread_id) {
+        this.thread_id = thread_id;
+    }
+
+    public void run() {
+        try {
+            run0();
+        } catch (Throwable t) {
+            t.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void log(String msg, Object... args) {
+        String msg0 = "ParallelLoadThread: " + String.format(msg, args);
+        System.out.println(msg0);
+    }
+
+    private void run0() throws Throwable {
+        for (int i=0; i<ParallelLoad.MAX_CLASSES; i++) {
+            synchronized(lock) {
+                num_ready[i] ++;
+                while (num_ready[i] < ParallelLoad.NUM_THREADS) {
+                    lock.wait();
+                }
+                lock.notifyAll();
+            }
+            log("this = %s %d", this, i);
+            String className = "ParallelClass" + i;
+            if (transformMode.equals("cflh"))
+                className = "ParallelClassTr" + i;
+
+            Class clazz = null;
+
+            switch (ParallelLoad.loaderType) {
+            case ParallelLoad.SYSTEM_LOADER:
+                clazz = Class.forName(className);
+                break;
+            case ParallelLoad.SINGLE_CUSTOM_LOADER:
+                clazz = ParallelLoad.classLoaders[0].loadClass(className);
+                break;
+            case ParallelLoad.MULTI_CUSTOM_LOADER:
+                clazz = ParallelLoad.classLoaders[thread_id].loadClass(className);
+                break;
+            }
+
+            log("clazz = %s", clazz);
+            testTransformation(clazz);
+        }
+    }
+
+    private void testTransformation(Class c) throws Exception {
+        if (transformMode.equals("none"))
+            return;
+
+        // currently only cflh transform mode is supported
+        if (!transformMode.equals("cflh")) {
+            String msg = "wrong transform mode: " + transformMode;
+            throw new IllegalArgumentException(msg);
+        }
+
+        Field[] fields = c.getFields();
+        boolean fieldFound = false;
+        for (Field f : fields) {
+            if (f.getName().equals("testString")) {
+                checkTransformationString(c, (String) f.get(null));
+                fieldFound = true;
+            }
+        }
+
+        if (!fieldFound)
+            throw new RuntimeException ("Expected field 'testString' not found");
+    }
+
+    private void checkTransformationString(Class c, String actual) throws Exception {
+        String expected = "class-transform-check: this-has-been--transformed";
+        if (!actual.equals(expected)) {
+            String msg1 = "Transformation failed for class" + c.getName();
+            String msg2 = String.format("Expected: %s, actual: %s", expected, actual);
+            throw new RuntimeException(msg1 + "\n" + msg2);
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Prohibited.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,30 @@
+/*
+ * 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 java/lang;
+
+public class Prohibited
+    version 51:0
+{
+} // end class Prohibited
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ProhibitedHelper.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,57 @@
+/*
+ * 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 ProhibitedHelper {
+    public static void main(String[] args) throws Throwable {
+
+        String className = "java.lang.Prohibited";
+        ClassLoader sysLoader = ClassLoader.getSystemClassLoader();
+        try {
+            Module unnamedModule = sysLoader.getUnnamedModule();
+            Class cls = Class.forName(unnamedModule, className);
+            System.out.println("cls " + cls);
+            throw new java.lang.RuntimeException(className +
+                "in a prohibited package shouldn't be loaded");
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (!(e instanceof java.lang.SecurityException)) {
+                throw new java.lang.RuntimeException(
+                    "SecurityException is expected to be thrown while loading " + className);
+            }
+        }
+
+        try {
+            Class cls = Class.forName(className, false, sysLoader);
+            System.out.println("cls " + cls);
+            throw new java.lang.RuntimeException(className +
+                "in a prohibited package shouldn't be loaded");
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (!(e instanceof java.lang.ClassNotFoundException)) {
+                throw new java.lang.RuntimeException(
+                    "ClassNotFoundException is expected to be thrown while loading " + className);
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomain.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,53 @@
+/*
+ * 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.security.ProtectionDomain;
+
+// See ../AppCDSProtectionDomain.java
+//
+// ProtDomain      is     stored in CDS archive.
+// ProtDomainOther is NOT stored in CDS archive.
+//
+// However, they should have the same ProtectionDomain instance.
+public class ProtDomain {
+  public static void main(String args[]) {
+    System.out.println("Testing ProtDomain");
+    ProtectionDomain mine = ProtDomain.class.getProtectionDomain();
+    ProtectionDomain his  = ProtDomainOther.class.getProtectionDomain();
+
+    System.out.println("mine = " + mine);
+    System.out.println("his  = " + his);
+
+    if (mine == his) {
+      System.out.println("Protection Domains match");
+    } else {
+      System.out.println("Protection Domains do not match!");
+      System.exit(1);
+    }
+  }
+}
+
+class ProtDomainOther {
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ProtDomainB.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,53 @@
+/*
+ * 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.security.ProtectionDomain;
+
+// See ../AppCDSProtectionDomain.java
+//
+// ProtDomainB      is NOT stored in CDS archive.
+// ProtDomainBOther is     stored in CDS archive.
+//
+// However, they should have the same ProtectionDomain instance.
+public class ProtDomainB {
+  public static void main(String args[]) {
+    System.out.println("Testing ProtDomainB");
+    ProtectionDomain mine = ProtDomainB.class.getProtectionDomain();
+    ProtectionDomain his  = ProtDomainBOther.class.getProtectionDomain();
+
+    System.out.println("mine = " + mine);
+    System.out.println("his  = " + his);
+
+    if (mine == his) {
+      System.out.println("Protection Domains match");
+    } else {
+      System.out.println("Protection Domains do not match!");
+      System.exit(1);
+    }
+  }
+}
+
+class ProtDomainBOther {
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/ReportMyLoader.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,31 @@
+/*
+ * 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 ReportMyLoader {
+    public static void main(String args[]) {
+        System.out.println("ReportMyLoader's loader = " + ReportMyLoader.class.getClassLoader());
+        System.out.println("TestClassLoader.called = " + TestClassLoader.called);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/RewriteBytecodes.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,55 @@
+/*
+ * 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.File;
+import sun.hotspot.WhiteBox;
+
+public class RewriteBytecodes {
+  public static void main(String args[]) throws Throwable {
+    String from = "___xxx___";
+    String to   = "___yyy___";
+    File clsFile = new File(args[0]);
+    Class superClass = Util.defineModifiedClass(RewriteBytecodes.class.getClassLoader(), clsFile, from, to);
+
+    Child child = new Child();
+
+    if (child.getClass().getSuperclass() != superClass) {
+      throw new RuntimeException("Mismatched super class");
+    }
+    // Even if the Super class is not loaded from the CDS archive, make sure the Child class
+    // can still be loaded successfully, and properly inherits from the rewritten version
+    // of Super.
+    if (!child.toString().equals(to)) {
+      throw new RuntimeException("Wrong output, expected: " + to + ", but got: " + child.toString());
+    }
+
+    WhiteBox wb = WhiteBox.getWhiteBox();
+    if (wb.isSharedClass(superClass)) {
+      throw new RuntimeException("wb.isSharedClass(superClass) should be false");
+    }
+    if (wb.isSharedClass(child.getClass())) {
+      throw new RuntimeException("wb.isSharedClass(child.getClass()) should be false");
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Super.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,29 @@
+/*
+ * 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 Super {
+  public String toString() {
+    return "___xxx___";
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/TestClassLoader.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/TrySwitchMyLoader.java	Mon Nov 27 20:21:34 2017 -0800
@@ -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);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/Util.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,156 @@
+/*
+ * 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:
+     * <ul>
+     *  <li> 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.
+     * </ul>
+     */
+    public static Class defineModifiedClass(ClassLoader loader, File clsFile, String fromString, String toString)
+        throws FileNotFoundException, IOException, NoSuchMethodException, IllegalAccessException,
+               InvocationTargetException
+    {
+        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 <code>from</code> 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<max; ) {
+            if (buff[i] == f0 && replace(buff, f, t, i)) {
+                i += f.length;
+                numReplaced ++;
+            } else {
+                i++;
+            }
+        }
+        return numReplaced;
+    }
+
+    public static boolean replace(byte buff[], byte f[], byte t[], int i) {
+        for (int x=0; x<f.length; x++) {
+            if (buff[x+i] != f[x]) {
+                return false;
+            }
+        }
+        for (int x=0; x<f.length; x++) {
+            buff[x+i] = t[x];
+        }
+        return true;
+    }
+
+    static byte[] asciibytes(String s) {
+        byte b[] = new byte[s.length()];
+        for (int i=0; i<b.length; i++) {
+            b[i] = (byte)s.charAt(i);
+        }
+        return b;
+    }
+
+    public static Class defineClassFromJAR(ClassLoader loader, File jarFile, String className)
+        throws FileNotFoundException, IOException, NoSuchMethodException, IllegalAccessException,
+               InvocationTargetException {
+        return defineClassFromJAR(loader, jarFile, className, null, null);
+    }
+
+    /**
+     * Invoke the loader.defineClass() class method to define the named class stored in a JAR file.
+     *
+     * If a class exists both in the classpath, as well as in the list of URLs of a URLClassLoader,
+     * by default, the URLClassLoader will not define the class, and instead will delegate to the
+     * app loader. This method is an easy way to force the class to be defined by the URLClassLoader.
+     *
+     * Optionally, you can modify the contents of the classfile buffer. See comments in
+     * defineModifiedClass.
+     */
+    public static Class defineClassFromJAR(ClassLoader loader, File jarFile, String className,
+                                           String fromString, String toString)
+        throws FileNotFoundException, IOException, NoSuchMethodException, IllegalAccessException,
+               InvocationTargetException
+    {
+        byte[] buff = getClassFileFromJar(jarFile, className);
+
+        if (fromString != null) {
+            replace(buff, fromString, toString);
+        }
+
+        //System.out.println("Loading from: " + ent + " (" + buff.length + " bytes)");
+
+        Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass",
+                                                                 buff.getClass(), int.class, int.class);
+        defineClass.setAccessible(true);
+        Class cls = (Class)defineClass.invoke(loader, buff, new Integer(0), new Integer(buff.length));
+
+        //System.out.println("Loaded : " + cls);
+        return cls;
+    }
+
+    public static byte[] getClassFileFromJar(File jarFile, String className) throws FileNotFoundException, IOException {
+        JarFile jf = new JarFile(jarFile);
+        JarEntry ent = jf.getJarEntry(className.replace('.', '/') + ".class");
+
+        DataInputStream dis = new DataInputStream(jf.getInputStream(ent));
+        byte[] buff = new byte[(int)ent.getSize()];
+        dis.readFully(buff);
+        dis.close();
+
+        return buff;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/VerifierTest0.java	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ *
+ */
+
+/*
+ * Note: verifier_test_tmp.jar will be processed by ../AppCDSVerifierTest.java to
+ * create verifier_test.jar, which contains invalid versions of UnverifiableBase
+ * and UnverifiableIntf.
+ */
+
+public class VerifierTest0 {
+  public static void main(String args[]) {
+    boolean good = true;
+    good &= mustBeInvalid("VerifierTestA");
+    good &= mustBeInvalid("VerifierTestB");
+    good &= mustBeInvalid("VerifierTestC");
+    good &= mustBeInvalid("VerifierTestD");
+    good &= mustBeInvalid("VerifierTestE");
+    if (!good) {
+      System.out.println("VerifierTest0 failed");
+      System.exit(1);
+    }
+  }
+
+  /** @return false means error */
+  static boolean mustBeInvalid(String className) {
+    System.out.println("Testing: " + className);
+    try {
+      Class.forName(className);
+      System.out.println("ERROR: class " + className + " was loaded unexpectedly.");
+      return false;
+    } catch (Throwable t) {
+      System.out.println("Expected exception:");
+      t.printStackTrace();
+      return true;
+    }
+  }
+}
+
+class UnverifiableBase {
+  static final VerifierTest0 x = new VerifierTest0(); // <- this static initializer will be made unverifiable by type mismatch
+}
+
+interface UnverifiableIntf {
+  static final VerifierTest0 x = new VerifierTest0(); // <- this static initializer will be made unverifiable by type mismatch
+}
+
+interface UnverifiableIntfSub extends UnverifiableIntf {}
+
+class VerifierTestA extends    UnverifiableBase {}
+class VerifierTestB extends    VerifierTestA {}
+class VerifierTestC implements UnverifiableIntf {}
+class VerifierTestD extends    VerifierTestC {}
+class VerifierTestE implements UnverifiableIntfSub {}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/com/sun/tools/javac/Main.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,30 @@
+/*
+ * 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
+{
+} // end class Main
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/cpattr1.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: cpattr2.jar
+Created-By: 1.9.0-internal (Oracle Corporation)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/cpattr1_long.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Class-Path: zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.ja
+ r zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz
+ .jar xx.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.j
+ ar zzzzzzz.jar xx.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar
+  zzzzzzz.jar zzzzzzz.jar xx.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar z
+ zzzzzz.jar zzzzzzz.jar zzzzzzz.jar xx.jar zzzzzzz.jar zzzzzzz.jar zzz
+ zzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar xx.jar zzzzzzz.jar zzzzz
+ zz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar xx.jar zzzzzzz
+ .jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar xx.j
+ ar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzz
+ z.jar xx.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.
+ jar zzzzzzz.jar xx.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.ja
+ r zzzzzzz.jar zzzzzzz.jar xx.jar zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar 
+ zzzzzzz.jar zzzzzzz.jar zzzzzzz.jar xx.jar cpattr2.jar cpattr1_long.j
+ ar
+Created-By: 1.9.0-internal (Oracle Corporation)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/cpattr2.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Class-Path: cpattr3.jar cpattr5_123456789_223456789_323456789_42345678
+ 9_523456789_623456789.jar
+Created-By: 1.9.0-internal (Oracle Corporation)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/cpattr3.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+Created-By: 1.9.0-internal (Oracle Corporation)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/cpattr4.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+Created-By: 1.9.0-internal (Oracle Corporation)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/cpattr5_extra_long.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Created-By: 1.9.0-internal (Oracle Corporation)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/java/net/HttpCookie.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,37 @@
+/*
+ * 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 java/net;
+
+public class HttpCookie
+    version 51:0
+{
+
+public Method thisClassIsDummy:"()V"
+    stack 0 locals 0
+{
+    return;
+}
+
+} // end class HttpCookie
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/javax/activation/MimeType.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,37 @@
+/*
+ * 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 javax/activation;
+
+public class MimeType
+    version 51:0
+{
+
+public Method thisClassIsDummy:"()V"
+    stack 0 locals 0
+{
+    return;
+}
+
+} // end class MimeType
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/javax/transaction/InvalidTransactionException.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,37 @@
+/*
+ * 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 javax/transaction;
+
+public class InvalidTransactionException
+    version 51:0
+{
+
+public Method thisClassIsDummy:"()V"
+    stack 0 locals 0
+{
+    return;
+}
+
+} // end class InvalidTransactionException
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/jdk/dynalink/DynamicLinker.jasm	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,37 @@
+/*
+ * 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 jdk/dynalink;
+
+public class DynamicLinker
+    version 51:0
+{
+
+public Method thisClassIsDummy:"()V"
+    stack 0 locals 2
+{
+    return;
+}
+
+} // end class DynamicLinker
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/runtime/appcds/test-classes/package_seal.mf	Mon Nov 27 20:21:34 2017 -0800
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Created-By: 1.9.0-internal (Oracle Corporation)
+
+Name: sealed/pkg/
+Sealed: true
+