8253500: [REDO] JDK-8253208 Move CDS related code to a separate class
Reviewed-by: mchung, iklam
This commit is contained in:
parent
bf442c5b9e
commit
89c5e49ba2
@ -123,7 +123,7 @@ JVM_GetPermittedSubclasses
|
||||
JVM_GetPrimitiveArrayElement
|
||||
JVM_GetProperties
|
||||
JVM_GetProtectionDomain
|
||||
JVM_GetRandomSeedForCDSDump
|
||||
JVM_GetRandomSeedForDumping
|
||||
JVM_GetRecordComponents
|
||||
JVM_GetSimpleBinaryName
|
||||
JVM_GetStackAccessControlContext
|
||||
@ -143,8 +143,8 @@ JVM_InternString
|
||||
JVM_Interrupt
|
||||
JVM_InvokeMethod
|
||||
JVM_IsArrayClass
|
||||
JVM_IsCDSDumpingEnabled
|
||||
JVM_IsCDSSharingEnabled
|
||||
JVM_IsDynamicDumpingEnabled
|
||||
JVM_IsSharingEnabled
|
||||
JVM_IsConstructorIx
|
||||
JVM_IsHiddenClass
|
||||
JVM_IsInterface
|
||||
|
@ -198,13 +198,13 @@ JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env, jclass caller,
|
||||
jboolean initialize);
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
JVM_IsCDSDumpingEnabled(JNIEnv* env);
|
||||
JVM_IsDynamicDumpingEnabled(JNIEnv* env);
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
JVM_IsCDSSharingEnabled(JNIEnv* env);
|
||||
JVM_IsSharingEnabled(JNIEnv* env);
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
JVM_GetRandomSeedForCDSDump();
|
||||
JVM_GetRandomSeedForDumping();
|
||||
|
||||
/*
|
||||
* java.lang.Throwable
|
||||
|
@ -3833,18 +3833,18 @@ JVM_ENTRY(jclass, JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env,
|
||||
#endif // INCLUDE_CDS
|
||||
JVM_END
|
||||
|
||||
JVM_ENTRY(jboolean, JVM_IsCDSDumpingEnabled(JNIEnv* env))
|
||||
JVMWrapper("JVM_IsCDSDumpingEnable");
|
||||
JVM_ENTRY(jboolean, JVM_IsDynamicDumpingEnabled(JNIEnv* env))
|
||||
JVMWrapper("JVM_IsDynamicDumpingEnable");
|
||||
return DynamicDumpSharedSpaces;
|
||||
JVM_END
|
||||
|
||||
JVM_ENTRY(jboolean, JVM_IsCDSSharingEnabled(JNIEnv* env))
|
||||
JVMWrapper("JVM_IsCDSSharingEnable");
|
||||
JVM_ENTRY(jboolean, JVM_IsSharingEnabled(JNIEnv* env))
|
||||
JVMWrapper("JVM_IsSharingEnable");
|
||||
return UseSharedSpaces;
|
||||
JVM_END
|
||||
|
||||
JVM_ENTRY_NO_ENV(jlong, JVM_GetRandomSeedForCDSDump())
|
||||
JVMWrapper("JVM_GetRandomSeedForCDSDump");
|
||||
JVM_ENTRY_NO_ENV(jlong, JVM_GetRandomSeedForDumping())
|
||||
JVMWrapper("JVM_GetRandomSeedForDumping");
|
||||
if (DumpSharedSpaces) {
|
||||
const char* release = Abstract_VM_Version::vm_release();
|
||||
const char* dbg_level = Abstract_VM_Version::jdk_debug_level();
|
||||
@ -3859,7 +3859,7 @@ JVM_ENTRY_NO_ENV(jlong, JVM_GetRandomSeedForCDSDump())
|
||||
if (seed == 0) { // don't let this ever be zero.
|
||||
seed = 0x87654321;
|
||||
}
|
||||
log_debug(cds)("JVM_GetRandomSeedForCDSDump() = " JLONG_FORMAT, seed);
|
||||
log_debug(cds)("JVM_GetRandomSeedForDumping() = " JLONG_FORMAT, seed);
|
||||
return seed;
|
||||
} else {
|
||||
return 0;
|
||||
|
@ -26,7 +26,7 @@
|
||||
package java.lang;
|
||||
|
||||
import jdk.internal.HotSpotIntrinsicCandidate;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
import java.lang.constant.Constable;
|
||||
import java.lang.constant.DynamicConstantDesc;
|
||||
@ -108,7 +108,7 @@ public final class Byte extends Number implements Comparable<Byte>, Constable {
|
||||
final int size = -(-128) + 127 + 1;
|
||||
|
||||
// Load and use the archived cache if it exists
|
||||
VM.initializeFromArchive(ByteCache.class);
|
||||
CDS.initializeFromArchive(ByteCache.class);
|
||||
if (archivedCache == null || archivedCache.length != size) {
|
||||
Byte[] c = new Byte[size];
|
||||
byte value = (byte)-128;
|
||||
|
@ -26,7 +26,7 @@
|
||||
package java.lang;
|
||||
|
||||
import jdk.internal.HotSpotIntrinsicCandidate;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
import java.lang.constant.Constable;
|
||||
import java.lang.constant.DynamicConstantDesc;
|
||||
@ -8516,7 +8516,7 @@ class Character implements java.io.Serializable, Comparable<Character>, Constabl
|
||||
int size = 127 + 1;
|
||||
|
||||
// Load and use the archived cache if it exists
|
||||
VM.initializeFromArchive(CharacterCache.class);
|
||||
CDS.initializeFromArchive(CharacterCache.class);
|
||||
if (archivedCache == null || archivedCache.length != size) {
|
||||
Character[] c = new Character[size];
|
||||
for (int i = 0; i < size; i++) {
|
||||
|
@ -33,6 +33,7 @@ import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import jdk.internal.HotSpotIntrinsicCandidate;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.misc.VM;
|
||||
|
||||
import static java.lang.String.COMPACT_STRINGS;
|
||||
@ -1023,7 +1024,7 @@ public final class Integer extends Number
|
||||
high = h;
|
||||
|
||||
// Load IntegerCache.archivedCache from archive, if possible
|
||||
VM.initializeFromArchive(IntegerCache.class);
|
||||
CDS.initializeFromArchive(IntegerCache.class);
|
||||
int size = (high - low) + 1;
|
||||
|
||||
// Use the archived cache if it exists and is large enough
|
||||
|
@ -34,7 +34,7 @@ import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import jdk.internal.HotSpotIntrinsicCandidate;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
import static java.lang.String.COMPACT_STRINGS;
|
||||
import static java.lang.String.LATIN1;
|
||||
@ -1169,7 +1169,7 @@ public final class Long extends Number
|
||||
int size = -(-128) + 127 + 1;
|
||||
|
||||
// Load and use the archived cache if it exists
|
||||
VM.initializeFromArchive(LongCache.class);
|
||||
CDS.initializeFromArchive(LongCache.class);
|
||||
if (archivedCache == null || archivedCache.length != size) {
|
||||
Long[] c = new Long[size];
|
||||
long value = -128;
|
||||
|
@ -55,6 +55,7 @@ import java.util.stream.Stream;
|
||||
import jdk.internal.loader.BuiltinClassLoader;
|
||||
import jdk.internal.loader.BootLoader;
|
||||
import jdk.internal.loader.ClassLoaders;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.module.IllegalAccessLogger;
|
||||
import jdk.internal.module.ModuleLoaderMap;
|
||||
@ -277,7 +278,7 @@ public final class Module implements AnnotatedElement {
|
||||
}
|
||||
|
||||
static {
|
||||
VM.initializeFromArchive(ArchivedData.class);
|
||||
CDS.initializeFromArchive(ArchivedData.class);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
package java.lang;
|
||||
|
||||
import jdk.internal.HotSpotIntrinsicCandidate;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
import java.lang.constant.Constable;
|
||||
import java.lang.constant.DynamicConstantDesc;
|
||||
@ -234,7 +234,7 @@ public final class Short extends Number implements Comparable<Short>, Constable
|
||||
int size = -(-128) + 127 + 1;
|
||||
|
||||
// Load and use the archived cache if it exists
|
||||
VM.initializeFromArchive(ShortCache.class);
|
||||
CDS.initializeFromArchive(ShortCache.class);
|
||||
if (archivedCache == null || archivedCache.length != size) {
|
||||
Short[] c = new Short[size];
|
||||
short value = -128;
|
||||
|
@ -26,15 +26,15 @@
|
||||
package java.lang.invoke;
|
||||
|
||||
import jdk.internal.loader.BuiltinClassLoader;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
final class LambdaProxyClassArchive {
|
||||
private static final boolean dumpArchive;
|
||||
private static final boolean sharingEnabled;
|
||||
|
||||
static {
|
||||
dumpArchive = VM.isCDSDumpingEnabled();
|
||||
sharingEnabled = VM.isCDSSharingEnabled();
|
||||
dumpArchive = CDS.isDynamicDumpingEnabled();
|
||||
sharingEnabled = CDS.isSharingEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -41,7 +41,7 @@ import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.module.ModuleReferenceImpl;
|
||||
import jdk.internal.module.ModuleTarget;
|
||||
import jdk.internal.vm.annotation.Stable;
|
||||
@ -110,7 +110,7 @@ public final class Configuration {
|
||||
|
||||
static {
|
||||
// Initialize EMPTY_CONFIGURATION from the archive.
|
||||
VM.initializeFromArchive(Configuration.class);
|
||||
CDS.initializeFromArchive(Configuration.class);
|
||||
// Create a new empty Configuration if there is no archived version.
|
||||
if (EMPTY_CONFIGURATION == null) {
|
||||
EMPTY_CONFIGURATION = new Configuration();
|
||||
|
@ -37,7 +37,7 @@ import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.UnaryOperator;
|
||||
import jdk.internal.access.SharedSecrets;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.vm.annotation.Stable;
|
||||
|
||||
/**
|
||||
@ -76,7 +76,7 @@ class ImmutableCollections {
|
||||
// derived from the JVM build/version, so can we generate the exact same
|
||||
// CDS archive for the same JDK build. This makes it possible to verify the
|
||||
// consistency of the JDK build.
|
||||
long seed = VM.getRandomSeedForCDSDump();
|
||||
long seed = CDS.getRandomSeedForDumping();
|
||||
if (seed == 0) {
|
||||
seed = System.nanoTime();
|
||||
}
|
||||
@ -100,7 +100,7 @@ class ImmutableCollections {
|
||||
static final MapN<?,?> EMPTY_MAP;
|
||||
|
||||
static {
|
||||
VM.initializeFromArchive(ImmutableCollections.class);
|
||||
CDS.initializeFromArchive(ImmutableCollections.class);
|
||||
if (archivedObjects == null) {
|
||||
EMPTY = new Object();
|
||||
EMPTY_LIST = new ListN<>();
|
||||
|
@ -34,7 +34,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.vm.annotation.Stable;
|
||||
|
||||
import sun.nio.cs.UTF_8;
|
||||
@ -672,7 +672,7 @@ public class Attributes implements Map<Object,Object>, Cloneable {
|
||||
|
||||
static {
|
||||
|
||||
VM.initializeFromArchive(Attributes.Name.class);
|
||||
CDS.initializeFromArchive(Attributes.Name.class);
|
||||
|
||||
if (KNOWN_NAMES == null) {
|
||||
MANIFEST_VERSION = new Name("Manifest-Version");
|
||||
|
@ -25,7 +25,7 @@
|
||||
package jdk.internal.loader;
|
||||
|
||||
import java.util.Map;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.module.ServicesCatalog;
|
||||
|
||||
/**
|
||||
@ -91,6 +91,6 @@ class ArchivedClassLoaders {
|
||||
}
|
||||
|
||||
static {
|
||||
VM.initializeFromArchive(ArchivedClassLoaders.class);
|
||||
CDS.initializeFromArchive(ArchivedClassLoaders.class);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,7 +24,7 @@
|
||||
*/
|
||||
package jdk.internal.math;
|
||||
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.Arrays;
|
||||
@ -84,7 +84,7 @@ public /*@ spec_bigint_math @*/ class FDBigInteger {
|
||||
|
||||
// Initialize FDBigInteger cache of powers of 5.
|
||||
static {
|
||||
VM.initializeFromArchive(FDBigInteger.class);
|
||||
CDS.initializeFromArchive(FDBigInteger.class);
|
||||
Object[] caches = archivedCaches;
|
||||
if (caches == null) {
|
||||
long[] long5pow = {
|
||||
|
@ -457,31 +457,6 @@ public class VM {
|
||||
}
|
||||
private static native void initialize();
|
||||
|
||||
/**
|
||||
* Initialize archived static fields in the given Class using archived
|
||||
* values from CDS dump time. Also initialize the classes of objects in
|
||||
* the archived graph referenced by those fields.
|
||||
*
|
||||
* Those static fields remain as uninitialized if there is no mapped CDS
|
||||
* java heap data or there is any error during initialization of the
|
||||
* object class in the archived graph.
|
||||
*/
|
||||
public static native void initializeFromArchive(Class<?> c);
|
||||
|
||||
public static native void defineArchivedModules(ClassLoader platformLoader, ClassLoader systemLoader);
|
||||
|
||||
public static native long getRandomSeedForCDSDump();
|
||||
|
||||
/**
|
||||
* Check if CDS dynamic dumping is enabled via the DynamicDumpSharedSpaces flag.
|
||||
*/
|
||||
public static native boolean isCDSDumpingEnabled();
|
||||
|
||||
/**
|
||||
* Check if CDS sharing is enabled by via the UseSharedSpaces flag.
|
||||
*/
|
||||
public static native boolean isCDSSharingEnabled();
|
||||
|
||||
/**
|
||||
* Provides access to information on buffer usage.
|
||||
*/
|
||||
|
@ -24,7 +24,7 @@
|
||||
*/
|
||||
package jdk.internal.module;
|
||||
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
/**
|
||||
* Used by ModuleBootstrap for archiving the boot layer and the builder needed to
|
||||
@ -59,6 +59,6 @@ class ArchivedBootLayer {
|
||||
}
|
||||
|
||||
static {
|
||||
VM.initializeFromArchive(ArchivedBootLayer.class);
|
||||
CDS.initializeFromArchive(ArchivedBootLayer.class);
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.lang.module.Configuration;
|
||||
import java.lang.module.ModuleFinder;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
|
||||
/**
|
||||
* Used by ModuleBootstrap for archiving the configuration for the boot layer,
|
||||
@ -123,6 +123,6 @@ class ArchivedModuleGraph {
|
||||
}
|
||||
|
||||
static {
|
||||
VM.initializeFromArchive(ArchivedModuleGraph.class);
|
||||
CDS.initializeFromArchive(ArchivedModuleGraph.class);
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ import jdk.internal.access.SharedSecrets;
|
||||
import jdk.internal.loader.BootLoader;
|
||||
import jdk.internal.loader.BuiltinClassLoader;
|
||||
import jdk.internal.loader.ClassLoaders;
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.perf.PerfCounter;
|
||||
|
||||
/**
|
||||
@ -167,7 +167,7 @@ public final class ModuleBootstrap {
|
||||
assert canUseArchivedBootLayer();
|
||||
bootLayer = archivedBootLayer.bootLayer();
|
||||
BootLoader.getUnnamedModule(); // trigger <clinit> of BootLoader.
|
||||
VM.defineArchivedModules(ClassLoaders.platformClassLoader(), ClassLoaders.appClassLoader());
|
||||
CDS.defineArchivedModules(ClassLoaders.platformClassLoader(), ClassLoaders.appClassLoader());
|
||||
|
||||
// assume boot layer has at least one module providing a service
|
||||
// that is mapped to the application class loader.
|
||||
|
@ -32,7 +32,7 @@
|
||||
|
||||
package sun.util.locale;
|
||||
|
||||
import jdk.internal.misc.VM;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.vm.annotation.Stable;
|
||||
|
||||
import java.lang.ref.SoftReference;
|
||||
@ -62,7 +62,7 @@ public final class BaseLocale {
|
||||
ROOT = 18,
|
||||
NUM_CONSTANTS = 19;
|
||||
static {
|
||||
VM.initializeFromArchive(BaseLocale.class);
|
||||
CDS.initializeFromArchive(BaseLocale.class);
|
||||
BaseLocale[] baseLocales = constantBaseLocales;
|
||||
if (baseLocales == null) {
|
||||
baseLocales = new BaseLocale[NUM_CONSTANTS];
|
||||
|
55
src/java.base/share/native/libjava/CDS.c
Normal file
55
src/java.base/share/native/libjava/CDS.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please 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 "jvm.h"
|
||||
#include "jdk_internal_misc_CDS.h"
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_jdk_internal_misc_CDS_initializeFromArchive(JNIEnv *env, jclass ignore,
|
||||
jclass c) {
|
||||
JVM_InitializeFromArchive(env, c);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_jdk_internal_misc_CDS_defineArchivedModules(JNIEnv *env, jclass ignore,
|
||||
jobject platform_loader,
|
||||
jobject system_loader) {
|
||||
JVM_DefineArchivedModules(env, platform_loader, system_loader);
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_jdk_internal_misc_CDS_getRandomSeedForDumping(JNIEnv *env, jclass ignore) {
|
||||
return JVM_GetRandomSeedForDumping();
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_jdk_internal_misc_CDS_isDynamicDumpingEnabled(JNIEnv *env, jclass jcls) {
|
||||
return JVM_IsDynamicDumpingEnabled(env);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_jdk_internal_misc_CDS_isSharingEnabled(JNIEnv *env, jclass jcls) {
|
||||
return JVM_IsSharingEnabled(env);
|
||||
}
|
@ -55,31 +55,3 @@ JNIEXPORT jobjectArray JNICALL
|
||||
Java_jdk_internal_misc_VM_getRuntimeArguments(JNIEnv *env, jclass cls) {
|
||||
return JVM_GetVmArguments(env);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_jdk_internal_misc_VM_initializeFromArchive(JNIEnv *env, jclass ignore,
|
||||
jclass c) {
|
||||
JVM_InitializeFromArchive(env, c);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_jdk_internal_misc_VM_defineArchivedModules(JNIEnv *env, jclass ignore,
|
||||
jobject platform_loader,
|
||||
jobject system_loader) {
|
||||
JVM_DefineArchivedModules(env, platform_loader, system_loader);
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_jdk_internal_misc_VM_getRandomSeedForCDSDump(JNIEnv *env, jclass ignore) {
|
||||
return JVM_GetRandomSeedForCDSDump();
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_jdk_internal_misc_VM_isCDSDumpingEnabled(JNIEnv *env, jclass jcls) {
|
||||
return JVM_IsCDSDumpingEnabled(env);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_jdk_internal_misc_VM_isCDSSharingEnabled(JNIEnv *env, jclass jcls) {
|
||||
return JVM_IsCDSSharingEnabled(env);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user