--- old/src/java.base/share/classes/jdk/internal/reflect/ClassDefiner.java 2018-10-02 13:26:16.000000000 -0700 +++ new/src/java.base/share/classes/jdk/internal/reflect/ClassDefiner.java 2018-10-02 13:26:16.000000000 -0700 @@ -27,14 +27,16 @@ import java.security.AccessController; import java.security.PrivilegedAction; -import jdk.internal.misc.Unsafe; -/** Utility class which assists in calling Unsafe.defineClass() by +import jdk.internal.misc.JavaLangAccess; +import jdk.internal.misc.SharedSecrets; + +/** Utility class which assists in calling defineClass() by creating a new class loader which delegates to the one needed in order for proper resolution of the given bytecodes to occur. */ class ClassDefiner { - static final Unsafe unsafe = Unsafe.getUnsafe(); + static final JavaLangAccess JLA = SharedSecrets.getJavaLangAccess(); /**

We define generated code into a new class loader which delegates to the defining loader of the target class. It is @@ -60,7 +62,7 @@ return new DelegatingClassLoader(parentClassLoader); } }); - return unsafe.defineClass(name, bytes, off, len, newLoader, null); + return JLA.defineClass(newLoader, name, bytes, null, "__ClassDefiner__"); } }