summaryrefslogtreecommitdiff
path: root/lang/src/main/java/net/openhft/lang/io/NativeBytes.java
diff options
context:
space:
mode:
Diffstat (limited to 'lang/src/main/java/net/openhft/lang/io/NativeBytes.java')
-rwxr-xr-xlang/src/main/java/net/openhft/lang/io/NativeBytes.java13
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;