diff options
Diffstat (limited to 'lang/src/main/java/net/openhft/lang/io/NativeBytes.java')
-rwxr-xr-x | lang/src/main/java/net/openhft/lang/io/NativeBytes.java | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lang/src/main/java/net/openhft/lang/io/NativeBytes.java b/lang/src/main/java/net/openhft/lang/io/NativeBytes.java index 96aba3a..67923f3 100755 --- a/lang/src/main/java/net/openhft/lang/io/NativeBytes.java +++ b/lang/src/main/java/net/openhft/lang/io/NativeBytes.java @@ -21,6 +21,10 @@ import net.openhft.lang.io.serialization.ObjectSerializer; import org.jetbrains.annotations.NotNull; import sun.misc.Unsafe; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + import java.io.EOFException; import java.io.IOException; import java.lang.reflect.Field; @@ -41,6 +45,7 @@ public class NativeBytes extends AbstractBytes { @NotNull @SuppressWarnings("ALL") public static final Unsafe UNSAFE; + public static final MethodHandle defineClassMethodHandle; protected static final long NO_PAGE; static final int BYTES_OFFSET; static final int CHARS_OFFSET; @@ -57,6 +62,14 @@ public class NativeBytes extends AbstractBytes { throw new AssertionError(e); } NO_PAGE = UNSAFE.allocateMemory(UNSAFE.pageSize()); + try { + MethodHandles.Lookup baseLookup = MethodHandles.lookup(); + MethodType defineClassMethodType = MethodType.methodType(Class.class, new Class[]{String.class, byte[].class, int.class, int.class}); + MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(ClassLoader.class, baseLookup); + defineClassMethodHandle = lookup.findVirtual(ClassLoader.class, "defineClass", defineClassMethodType); + } catch (Throwable e) { + throw new RuntimeException(e); + } } protected long startAddr; |