From 2f5f96290f7088f648bbd957570b7ed88409769c Mon Sep 17 00:00:00 2001 From: redkale Date: Sat, 5 Oct 2024 10:17:19 +0800 Subject: [PATCH] Jdk21Inners --- src/main/java/org/redkale/asm/Opcodes.java | 14 +- .../redkale/util/AnonymousThreadFactory.java | 39 -- .../redkale/util/AnonymousThreadLocal.java | 48 -- .../org/redkale/util/AnonymousUnsafe.java | 443 ------------------ .../util/AnonymousVirtualExecutor.java | 21 - .../util/AnonymousVirtualPoolFunction.java | 27 -- .../java/org/redkale/util/Jdk21Inners.java | 118 +++++ src/main/java/org/redkale/util/Unsafe.java | 191 -------- src/main/java/org/redkale/util/Utility.java | 364 +++++--------- 9 files changed, 240 insertions(+), 1025 deletions(-) delete mode 100644 src/main/java/org/redkale/util/AnonymousThreadFactory.java delete mode 100644 src/main/java/org/redkale/util/AnonymousThreadLocal.java delete mode 100644 src/main/java/org/redkale/util/AnonymousUnsafe.java delete mode 100644 src/main/java/org/redkale/util/AnonymousVirtualExecutor.java delete mode 100644 src/main/java/org/redkale/util/AnonymousVirtualPoolFunction.java create mode 100644 src/main/java/org/redkale/util/Jdk21Inners.java delete mode 100644 src/main/java/org/redkale/util/Unsafe.java diff --git a/src/main/java/org/redkale/asm/Opcodes.java b/src/main/java/org/redkale/asm/Opcodes.java index 8bec065f3..001f14453 100644 --- a/src/main/java/org/redkale/asm/Opcodes.java +++ b/src/main/java/org/redkale/asm/Opcodes.java @@ -175,25 +175,25 @@ public interface Opcodes { // The constructor of Integer was deprecated in 9 // but we are stuck with it by backward compatibility @SuppressWarnings("deprecation") - Integer TOP = new Integer(0); + Integer TOP = Integer.valueOf(0); @SuppressWarnings("deprecation") - Integer INTEGER = new Integer(1); + Integer INTEGER = Integer.valueOf(1); @SuppressWarnings("deprecation") - Integer FLOAT = new Integer(2); + Integer FLOAT = Integer.valueOf(2); @SuppressWarnings("deprecation") - Integer DOUBLE = new Integer(3); + Integer DOUBLE = Integer.valueOf(3); @SuppressWarnings("deprecation") - Integer LONG = new Integer(4); + Integer LONG = Integer.valueOf(4); @SuppressWarnings("deprecation") - Integer NULL = new Integer(5); + Integer NULL = Integer.valueOf(5); @SuppressWarnings("deprecation") - Integer UNINITIALIZED_THIS = new Integer(6); + Integer UNINITIALIZED_THIS = Integer.valueOf(6); // opcodes // visit method (- = idem) diff --git a/src/main/java/org/redkale/util/AnonymousThreadFactory.java b/src/main/java/org/redkale/util/AnonymousThreadFactory.java deleted file mode 100644 index 4798c0031..000000000 --- a/src/main/java/org/redkale/util/AnonymousThreadFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/// * -// * -// */ -// package org.redkale.util; -// -// import java.util.concurrent.ThreadFactory; -// import java.util.function.Function; -// -/// ** -// * 虚拟线程工厂 -// * -// * @author zhangjx -// * @since 2.8.0 -// */ -// public class AnonymousThreadFactory implements ThreadFactory, Function { -// -// private final ThreadFactory factory = Thread.ofVirtual().factory(); -// -// private final String name; -// -// public AnonymousThreadFactory(String name) { -// this.name = name; -// } -// -// @Override -// public ThreadFactory apply(String name) { -// return new AnonymousThreadFactory(name); -// } -// -// @Override -// public Thread newThread(Runnable r) { -// Thread t = factory.newThread(r); -// if (name != null) { -// t.setName(name); -// } -// return t; -// } -// -// } diff --git a/src/main/java/org/redkale/util/AnonymousThreadLocal.java b/src/main/java/org/redkale/util/AnonymousThreadLocal.java deleted file mode 100644 index aa29c16dd..000000000 --- a/src/main/java/org/redkale/util/AnonymousThreadLocal.java +++ /dev/null @@ -1,48 +0,0 @@ -/// * -// * -// */ -// package org.redkale.util; -// -// import java.util.function.Function; -// import java.util.function.Supplier; -// -/// ** -// * ThreadScopedLocal, 兼容虚拟线程的ThreadLocal -// * -// *

-// * 详情见: https://redkale.org -// * -// * @author zhangjx -// * @since 2.8.0 -// */ -// public class AnonymousThreadLocal extends ThreadLocal implements Function, ThreadLocal> { -// -// private final Supplier supplier; -// -// public AnonymousThreadLocal(Supplier supplier) { -// this.supplier = supplier; -// } -// -// public ThreadLocal apply(Supplier supplier) { -// return new AnonymousThreadLocal<>(supplier); -// } -// -// @Override -// protected T initialValue() { -// return supplier.get(); -// } -// -// @Override -// public void set(T value) { -// Thread t = Thread.currentThread(); -// if (!t.isVirtual()) { -// super.set(value); -// } -// } -// -// @Override -// public T get() { -// Thread t = Thread.currentThread(); -// return t.isVirtual() ? initialValue() : super.get(); -// } -// } diff --git a/src/main/java/org/redkale/util/AnonymousUnsafe.java b/src/main/java/org/redkale/util/AnonymousUnsafe.java deleted file mode 100644 index 0d7c8549a..000000000 --- a/src/main/java/org/redkale/util/AnonymousUnsafe.java +++ /dev/null @@ -1,443 +0,0 @@ -// package org.redkale.util; -// -// import java.lang.reflect.Field; -// import java.nio.ByteBuffer; -// -// public class AnonymousUnsafe implements Unsafe { -// -// private final sun.misc.Unsafe unsafe; -// -// public AnonymousUnsafe(Object obj) { -// this.unsafe = (sun.misc.Unsafe) obj; -// } -// -// @Override -// public int getInt(Object o, long offset) { -// return unsafe.getInt(o, offset); -// } -// -// @Override -// public void putInt(Object o, long offset, int x) { -// unsafe.putInt(o, offset, x); -// } -// -// @Override -// public Object getObject(Object o, long offset) { -// return unsafe.getObject(o, offset); -// } -// -// @Override -// public void putObject(Object o, long offset, Object x) { -// unsafe.putObject(o, offset, x); -// } -// -// @Override -// public boolean getBoolean(Object o, long offset) { -// return unsafe.getBoolean(o, offset); -// } -// -// @Override -// public void putBoolean(Object o, long offset, boolean x) { -// unsafe.putBoolean(o, offset, x); -// } -// -// @Override -// public byte getByte(Object o, long offset) { -// return unsafe.getByte(o, offset); -// } -// -// @Override -// public void putByte(Object o, long offset, byte x) { -// unsafe.putByte(o, offset, x); -// } -// -// @Override -// public short getShort(Object o, long offset) { -// return unsafe.getShort(o, offset); -// } -// -// @Override -// public void putShort(Object o, long offset, short x) { -// unsafe.putShort(o, offset, x); -// } -// -// @Override -// public char getChar(Object o, long offset) { -// return unsafe.getChar(o, offset); -// } -// -// @Override -// public void putChar(Object o, long offset, char x) { -// unsafe.putChar(o, offset, x); -// } -// -// @Override -// public long getLong(Object o, long offset) { -// return unsafe.getLong(o, offset); -// } -// -// @Override -// public void putLong(Object o, long offset, long x) { -// unsafe.putLong(o, offset, x); -// } -// -// @Override -// public float getFloat(Object o, long offset) { -// return unsafe.getFloat(o, offset); -// } -// -// @Override -// public void putFloat(Object o, long offset, float x) { -// unsafe.putFloat(o, offset, x); -// } -// -// @Override -// public double getDouble(Object o, long offset) { -// return unsafe.getDouble(o, offset); -// } -// -// @Override -// public void putDouble(Object o, long offset, double x) { -// unsafe.putDouble(o, offset, x); -// } -// -// @Override -// public byte getByte(long address) { -// return unsafe.getByte(address); -// } -// -// @Override -// public void putByte(long address, byte x) { -// unsafe.putByte(address, x); -// } -// -// @Override -// public short getShort(long address) { -// return unsafe.getShort(address); -// } -// -// @Override -// public void putShort(long address, short x) { -// unsafe.putShort(address, x); -// } -// -// @Override -// public char getChar(long address) { -// return unsafe.getChar(address); -// } -// -// @Override -// public void putChar(long address, char x) { -// unsafe.putChar(address, x); -// } -// -// @Override -// public int getInt(long address) { -// return unsafe.getInt(address); -// } -// -// @Override -// public void putInt(long address, int x) { -// unsafe.putInt(address, x); -// } -// -// @Override -// public long getLong(long address) { -// return unsafe.getLong(address); -// } -// -// @Override -// public void putLong(long address, long x) { -// unsafe.putLong(address, x); -// } -// -// @Override -// public float getFloat(long address) { -// return unsafe.getFloat(address); -// } -// -// @Override -// public void putFloat(long address, float x) { -// unsafe.putFloat(address, x); -// } -// -// @Override -// public double getDouble(long address) { -// return unsafe.getDouble(address); -// } -// -// @Override -// public void putDouble(long address, double x) { -// unsafe.putDouble(address, x); -// } -// -// @Override -// public long getAddress(long address) { -// return unsafe.getAddress(address); -// } -// -// @Override -// public void putAddress(long address, long x) { -// unsafe.putAddress(address, x); -// } -// -// @Override -// public long allocateMemory(long bytes) { -// return unsafe.allocateMemory(bytes); -// } -// -// @Override -// public long reallocateMemory(long address, long bytes) { -// return unsafe.reallocateMemory(address, bytes); -// } -// -// @Override -// public void setMemory(Object o, long offset, long bytes, byte value) { -// unsafe.setMemory(o, offset, bytes, value); -// } -// -// @Override -// public void setMemory(long address, long bytes, byte value) { -// unsafe.setMemory(address, bytes, value); -// } -// -// @Override -// public void copyMemory(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes) { -// unsafe.copyMemory(srcBase, srcOffset, destBase, destOffset, bytes); -// } -// -// @Override -// public void copyMemory(long srcAddress, long destAddress, long bytes) { -// unsafe.copyMemory(srcAddress, destAddress, bytes); -// } -// -// @Override -// public void freeMemory(long address) { -// unsafe.freeMemory(address); -// } -// -// @Override -// public long objectFieldOffset(Field f) { -// return unsafe.objectFieldOffset(f); -// } -// -// @Override -// public long staticFieldOffset(Field f) { -// return unsafe.staticFieldOffset(f); -// } -// -// @Override -// public Object staticFieldBase(Field f) { -// return unsafe.staticFieldBase(f); -// } -// -// @Override -// public int arrayBaseOffset(Class arrayClass) { -// return unsafe.arrayBaseOffset(arrayClass); -// } -// -// @Override -// public int arrayIndexScale(Class arrayClass) { -// return unsafe.arrayIndexScale(arrayClass); -// } -// -// @Override -// public int addressSize() { -// return unsafe.addressSize(); -// } -// -// @Override -// public int pageSize() { -// return unsafe.pageSize(); -// } -// -// @Override -// public Object allocateInstance(Class cls) throws InstantiationException { -// return unsafe.allocateInstance(cls); -// } -// -// @Override -// public void throwException(Throwable ee) { -// unsafe.throwException(ee); -// } -// -// @Override -// public boolean compareAndSwapObject(Object o, long offset, Object expected, Object x) { -// return unsafe.compareAndSwapObject(o, offset, expected, x); -// } -// -// @Override -// public boolean compareAndSwapInt(Object o, long offset, int expected, int x) { -// return unsafe.compareAndSwapInt(o, offset, expected, x); -// } -// -// @Override -// public boolean compareAndSwapLong(Object o, long offset, long expected, long x) { -// return unsafe.compareAndSwapLong(o, offset, expected, x); -// } -// -// @Override -// public Object getObjectVolatile(Object o, long offset) { -// return unsafe.getObjectVolatile(o, offset); -// } -// -// @Override -// public void putObjectVolatile(Object o, long offset, Object x) { -// unsafe.putObjectVolatile(o, offset, x); -// } -// -// @Override -// public int getIntVolatile(Object o, long offset) { -// return unsafe.getIntVolatile(o, offset); -// } -// -// @Override -// public void putIntVolatile(Object o, long offset, int x) { -// unsafe.putIntVolatile(o, offset, x); -// } -// -// @Override -// public boolean getBooleanVolatile(Object o, long offset) { -// return unsafe.getBooleanVolatile(o, offset); -// } -// -// @Override -// public void putBooleanVolatile(Object o, long offset, boolean x) { -// unsafe.putBooleanVolatile(o, offset, x); -// } -// -// @Override -// public byte getByteVolatile(Object o, long offset) { -// return unsafe.getByteVolatile(o, offset); -// } -// -// @Override -// public void putByteVolatile(Object o, long offset, byte x) { -// unsafe.putByteVolatile(o, offset, x); -// } -// -// @Override -// public short getShortVolatile(Object o, long offset) { -// return unsafe.getShortVolatile(o, offset); -// } -// -// @Override -// public void putShortVolatile(Object o, long offset, short x) { -// unsafe.putShortVolatile(o, offset, x); -// } -// -// @Override -// public char getCharVolatile(Object o, long offset) { -// return unsafe.getCharVolatile(o, offset); -// } -// -// @Override -// public void putCharVolatile(Object o, long offset, char x) { -// unsafe.putCharVolatile(o, offset, x); -// } -// -// @Override -// public long getLongVolatile(Object o, long offset) { -// return unsafe.getLongVolatile(o, offset); -// } -// -// @Override -// public void putLongVolatile(Object o, long offset, long x) { -// unsafe.putLongVolatile(o, offset, x); -// } -// -// @Override -// public float getFloatVolatile(Object o, long offset) { -// return unsafe.getFloatVolatile(o, offset); -// } -// -// @Override -// public void putFloatVolatile(Object o, long offset, float x) { -// unsafe.putFloatVolatile(o, offset, x); -// } -// -// @Override -// public double getDoubleVolatile(Object o, long offset) { -// return unsafe.getDoubleVolatile(o, offset); -// } -// -// @Override -// public void putDoubleVolatile(Object o, long offset, double x) { -// unsafe.putDoubleVolatile(o, offset, x); -// } -// -// @Override -// public void putOrderedObject(Object o, long offset, Object x) { -// unsafe.putOrderedObject(o, offset, x); -// } -// -// @Override -// public void putOrderedInt(Object o, long offset, int x) { -// unsafe.putOrderedInt(o, offset, x); -// } -// -// @Override -// public void putOrderedLong(Object o, long offset, long x) { -// unsafe.putOrderedLong(o, offset, x); -// } -// -// @Override -// public void unpark(Object thread) { -// unsafe.unpark(thread); -// } -// -// @Override -// public void park(boolean isAbsolute, long time) { -// unsafe.park(isAbsolute, time); -// } -// -// @Override -// public int getLoadAverage(double[] loadavg, int nelems) { -// return unsafe.getLoadAverage(loadavg, nelems); -// } -// -// @Override -// public int getAndAddInt(Object o, long offset, int delta) { -// return unsafe.getAndAddInt(o, offset, delta); -// } -// -// @Override -// public long getAndAddLong(Object o, long offset, long delta) { -// return unsafe.getAndAddLong(o, offset, delta); -// } -// -// @Override -// public int getAndSetInt(Object o, long offset, int newValue) { -// return unsafe.getAndSetInt(o, offset, newValue); -// } -// -// @Override -// public long getAndSetLong(Object o, long offset, long newValue) { -// return unsafe.getAndSetLong(o, offset, newValue); -// } -// -// @Override -// public Object getAndSetObject(Object o, long offset, Object newValue) { -// return unsafe.getAndSetObject(o, offset, newValue); -// } -// -// @Override -// public void loadFence() { -// unsafe.loadFence(); -// } -// -// @Override -// public void storeFence() { -// unsafe.storeFence(); -// } -// -// @Override -// public void fullFence() { -// unsafe.fullFence(); -// } -// -// @Override -// public void invokeCleaner(ByteBuffer directBuffer) { -// unsafe.invokeCleaner(directBuffer); -// } -// } diff --git a/src/main/java/org/redkale/util/AnonymousVirtualExecutor.java b/src/main/java/org/redkale/util/AnonymousVirtualExecutor.java deleted file mode 100644 index a2f22149c..000000000 --- a/src/main/java/org/redkale/util/AnonymousVirtualExecutor.java +++ /dev/null @@ -1,21 +0,0 @@ -/// * -// * -// */ -// package org.redkale.util; -// -// import java.util.concurrent.Executor; -// -/// ** -// * 虚拟线程运行 -// * -// * @author zhangjx -// * @since 2.8.0 -// */ -// public class AnonymousVirtualExecutor implements Executor { -// -// @Override -// public void execute(Runnable t) { -// Thread.ofVirtual().name("Redkale-VirtualThread").start(t); -// } -// -// } diff --git a/src/main/java/org/redkale/util/AnonymousVirtualPoolFunction.java b/src/main/java/org/redkale/util/AnonymousVirtualPoolFunction.java deleted file mode 100644 index 85ead70d5..000000000 --- a/src/main/java/org/redkale/util/AnonymousVirtualPoolFunction.java +++ /dev/null @@ -1,27 +0,0 @@ -/// * -// * -// */ -// package org.redkale.util; -// -// import java.util.concurrent.*; -// import java.util.function.Function; -// -/// ** -// * 虚拟线程池 -// * -// * @author zhangjx -// * @since 2.8.0 -// */ -// public class AnonymousVirtualPoolFunction implements Function { -// -// @Override -// public ExecutorService apply(String threadNameFormat) { -// final ThreadFactory factory = Thread.ofVirtual().factory(); -// final String threadName = String.format(threadNameFormat, "Virtual"); -// return Executors.newThreadPerTaskExecutor(r -> { -// Thread t = factory.newThread(r); -// t.setName(threadName); -// return t; -// }); -// } -// } diff --git a/src/main/java/org/redkale/util/Jdk21Inners.java b/src/main/java/org/redkale/util/Jdk21Inners.java new file mode 100644 index 000000000..131a26c6c --- /dev/null +++ b/src/main/java/org/redkale/util/Jdk21Inners.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2016-2116 Redkale + * All rights reserved. + */ +package org.redkale.util; + +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.function.Function; +import java.util.function.Supplier; + +/** + * + * @author zhangjx + */ +class Jdk21Inners { + + private Jdk21Inners() { + // do nothing + } + + public static Executor createExecutor() { + return new VirtualExecutor(); + } + + public static Function createPoolFunction() { + return new VirtualPoolFunction(); + } + + public static Function createThreadLocalFunction() { + return new VirtualThreadLocal(() -> null); + } + + public static Function createThreadFactoryFunction() { + return new VirtualThreadFactory(""); + } + + static class VirtualExecutor implements Executor { + + @Override + public void execute(Runnable t) { + Thread.ofVirtual().name("Redkale-VirtualThread").start(t); + } + } + + static class VirtualPoolFunction implements Function { + + @Override + public ExecutorService apply(String threadNameFormat) { + final ThreadFactory factory = Thread.ofVirtual().factory(); + final String threadName = String.format(threadNameFormat, "Virtual"); + return Executors.newThreadPerTaskExecutor(r -> { + Thread t = factory.newThread(r); + t.setName(threadName); + return t; + }); + } + } + + static class VirtualThreadLocal extends ThreadLocal implements Function, ThreadLocal> { + + private final Supplier supplier; + + public VirtualThreadLocal(Supplier supplier) { + this.supplier = supplier; + } + + public ThreadLocal apply(Supplier supplier) { + return new VirtualThreadLocal<>(supplier); + } + + @Override + protected T initialValue() { + return supplier.get(); + } + + @Override + public void set(T value) { + Thread t = Thread.currentThread(); + if (!t.isVirtual()) { + super.set(value); + } + } + + @Override + public T get() { + Thread t = Thread.currentThread(); + return t.isVirtual() ? initialValue() : super.get(); + } + } + + static class VirtualThreadFactory implements ThreadFactory, Function { + + private final ThreadFactory factory = Thread.ofVirtual().factory(); + + private final String name; + + public VirtualThreadFactory(String name) { + this.name = name; + } + + @Override + public ThreadFactory apply(String name) { + return new VirtualThreadFactory(name); + } + + @Override + public Thread newThread(Runnable r) { + Thread t = factory.newThread(r); + if (name != null) { + t.setName(name); + } + return t; + } + } +} diff --git a/src/main/java/org/redkale/util/Unsafe.java b/src/main/java/org/redkale/util/Unsafe.java deleted file mode 100644 index c7e016e4c..000000000 --- a/src/main/java/org/redkale/util/Unsafe.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.redkale.util; - -import java.lang.reflect.Field; - -/** - * sun.misc.Unsafe 封装类 - * - *

详情见: https://redkale.org - * - * @author zhangjx - * @since 2.5.0 - */ -public interface Unsafe { - - public int getInt(Object o, long offset); - - public void putInt(Object o, long offset, int x); - - public Object getObject(Object o, long offset); - - public void putObject(Object o, long offset, Object x); - - public boolean getBoolean(Object o, long offset); - - public void putBoolean(Object o, long offset, boolean x); - - public byte getByte(Object o, long offset); - - public void putByte(Object o, long offset, byte x); - - public short getShort(Object o, long offset); - - public void putShort(Object o, long offset, short x); - - public char getChar(Object o, long offset); - - public void putChar(Object o, long offset, char x); - - public long getLong(Object o, long offset); - - public void putLong(Object o, long offset, long x); - - public float getFloat(Object o, long offset); - - public void putFloat(Object o, long offset, float x); - - public double getDouble(Object o, long offset); - - public void putDouble(Object o, long offset, double x); - - public byte getByte(long address); - - public void putByte(long address, byte x); - - public short getShort(long address); - - public void putShort(long address, short x); - - public char getChar(long address); - - public void putChar(long address, char x); - - public int getInt(long address); - - public void putInt(long address, int x); - - public long getLong(long address); - - public void putLong(long address, long x); - - public float getFloat(long address); - - public void putFloat(long address, float x); - - public double getDouble(long address); - - public void putDouble(long address, double x); - - public long getAddress(long address); - - public void putAddress(long address, long x); - - public long allocateMemory(long bytes); - - public long reallocateMemory(long address, long bytes); - - public void setMemory(Object o, long offset, long bytes, byte value); - - public void setMemory(long address, long bytes, byte value); - - public void copyMemory(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes); - - public void copyMemory(long srcAddress, long destAddress, long bytes); - - public void freeMemory(long address); - - public long objectFieldOffset(Field f); - - public long staticFieldOffset(Field f); - - public Object staticFieldBase(Field f); - - public int arrayBaseOffset(Class arrayClass); - - public int arrayIndexScale(Class arrayClass); - - public int addressSize(); - - public int pageSize(); - - public Object allocateInstance(Class cls) throws InstantiationException; - - public void throwException(Throwable ee); - - public boolean compareAndSwapObject(Object o, long offset, Object expected, Object x); - - public boolean compareAndSwapInt(Object o, long offset, int expected, int x); - - public boolean compareAndSwapLong(Object o, long offset, long expected, long x); - - public Object getObjectVolatile(Object o, long offset); - - public void putObjectVolatile(Object o, long offset, Object x); - - public int getIntVolatile(Object o, long offset); - - public void putIntVolatile(Object o, long offset, int x); - - public boolean getBooleanVolatile(Object o, long offset); - - public void putBooleanVolatile(Object o, long offset, boolean x); - - public byte getByteVolatile(Object o, long offset); - - public void putByteVolatile(Object o, long offset, byte x); - - public short getShortVolatile(Object o, long offset); - - public void putShortVolatile(Object o, long offset, short x); - - public char getCharVolatile(Object o, long offset); - - public void putCharVolatile(Object o, long offset, char x); - - public long getLongVolatile(Object o, long offset); - - public void putLongVolatile(Object o, long offset, long x); - - public float getFloatVolatile(Object o, long offset); - - public void putFloatVolatile(Object o, long offset, float x); - - public double getDoubleVolatile(Object o, long offset); - - public void putDoubleVolatile(Object o, long offset, double x); - - public void putOrderedObject(Object o, long offset, Object x); - - public void putOrderedInt(Object o, long offset, int x); - - public void putOrderedLong(Object o, long offset, long x); - - public void unpark(Object thread); - - public void park(boolean isAbsolute, long time); - - public int getLoadAverage(double[] loadavg, int nelems); - - public int getAndAddInt(Object o, long offset, int delta); - - public long getAndAddLong(Object o, long offset, long delta); - - public int getAndSetInt(Object o, long offset, int newValue); - - public long getAndSetLong(Object o, long offset, long newValue); - - public Object getAndSetObject(Object o, long offset, Object newValue); - - public void loadFence(); - - public void storeFence(); - - public void fullFence(); - - public void invokeCleaner(java.nio.ByteBuffer directBuffer); -} diff --git a/src/main/java/org/redkale/util/Utility.java b/src/main/java/org/redkale/util/Utility.java index 90092bbc4..c024a1a4e 100644 --- a/src/main/java/org/redkale/util/Utility.java +++ b/src/main/java/org/redkale/util/Utility.java @@ -65,35 +65,33 @@ public final class Utility { JAVA_RECORD_CLASS = clz; } - private static final Executor defaultExecutorConsumer = new Executor() { - @Override - public void execute(Runnable command) { - command.run(); + private static final MethodHandles.Lookup defaultLookup; + + static { + MethodHandles.Lookup defaultLookup0 = null; + try { + Field implLookup = MethodHandles.Lookup.class.getDeclaredField("IMPL_LOOKUP"); + implLookup.setAccessible(true); + defaultLookup0 = (MethodHandles.Lookup) implLookup.get(null); + RedkaleClassLoader.putReflectionField(MethodHandles.Lookup.class.getName(), implLookup); + } catch (Throwable e) { + defaultLookup0 = MethodHandles.lookup(); } - }; + defaultLookup = defaultLookup0; + } - // org.redkale.util.AnonymousThreadLocal - private static final String functionThreadLocalBinary = - "cafebabe0000004100480a000200030700040c000500060100156a6176612f6c616e672f5468726561644c6f63616c0100063c696e69743e010003282956090008000907000a0c000b000c0100256f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735468726561644c6f63616c010008737570706c69657201001d4c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723b0a0008000e0c0005000f010020284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723b29560b001100120700130c0014001501001b6a6176612f7574696c2f66756e6374696f6e2f537570706c69657201000367657401001428294c6a6176612f6c616e672f4f626a6563743b0a001700180700190c001a001b0100106a6176612f6c616e672f54687265616401000d63757272656e7454687265616401001428294c6a6176612f6c616e672f5468726561643b0a0017001d0c001e001f01000969735669727475616c01000328295a0a000200210c00220023010003736574010015284c6a6176612f6c616e672f4f626a6563743b29560a000800250c0026001501000c696e697469616c56616c75650a000200120a000800290c002a002b0100056170706c79010036284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723b294c6a6176612f6c616e672f5468726561644c6f63616c3b07002d01001b6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e0100095369676e61747572650100224c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100274c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735468726561644c6f63616c3b0100164c6f63616c5661726961626c65547970655461626c6501002c4c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735468726561644c6f63616c3c54543b3e3b0100104d6574686f64506172616d6574657273010025284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b2956010040284c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b294c6a6176612f6c616e672f5468726561644c6f63616c3c54543b3e3b010005282954543b01000576616c75650100124c6a6176612f6c616e672f4f626a6563743b010001740100124c6a6176612f6c616e672f5468726561643b01000354543b01000d537461636b4d61705461626c650100062854543b29560700430100106a6176612f6c616e672f4f626a656374010026284c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b01008f3c543a4c6a6176612f6c616e672f4f626a6563743b3e4c6a6176612f6c616e672f5468726561644c6f63616c3c54543b3e3b4c6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e3c4c6a6176612f7574696c2f66756e6374696f6e2f537570706c6965723c54543b3e3b4c6a6176612f6c616e672f5468726561644c6f63616c3c54543b3e3b3e3b01000a536f7572636546696c65010019416e6f6e796d6f75735468726561644c6f63616c2e6a6176610021000800020001002c00010012000b000c0001002e00000002002f000600010005000f0003003000000062000200020000000a2ab700012a2bb50007b10000000300310000000e000300000016000400170009001800320000001600020000000a0033003400000000000a000b000c000100350000001600020000000a0033003600000000000a000b002f000100370000000501000b0000002e0000000200380001002a002b00030030000000590003000200000009bb0008592bb7000db00000000300310000000600010000001b00320000001600020000000900330034000000000009000b000c000100350000001600020000000900330036000000000009000b002f000100370000000501000b0000002e0000000200390004002600150002003000000046000100010000000a2ab40007b900100100b00000000300310000000600010000002000320000000c00010000000a00330034000000350000000c00010000000a003300360000002e00000002003a00010022002300030030000000850002000300000011b800164d2cb6001c9a00082a2bb70020b10000000400310000001200040000002500040026000b00270010002900320000002000030000001100330034000000000011003b003c00010004000d003d003e000200350000001600020000001100330036000000000011003b003f00010040000000080001fc001007001700370000000501003b0000002e00000002004100010014001500020030000000730001000200000017b800164c2bb6001c99000a2ab60024a700072ab70027b00000000400310000000a00020000002d0004002e00320000001600020000001700330034000000040013003d003e000100350000000c00010000001700330036000000400000000c0002fc001207001743070042002e00000002003a1041002a0044000200300000004500020002000000092a2bc00011b60028b00000000300310000000600010000001200320000000c00010000000900330034000000350000000c00010000000900330036000000370000000501000b10000002002e0000000200450046000000020047"; + private static final Executor defaultExecutorConsumer = command -> command.run(); + // org.redkale.util.JDK21VirtualThreadLocal private static final Function virtualThreadLocalFunction; - // org.redkale.util.AnonymousThreadFactory - private static final String functionThreadFactoryBinary = - "cafebabe0000004100450a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e0100032829560a0008000907000a0c000b000c0100106a6176612f6c616e672f5468726561640100096f665669727475616c01002628294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b0b000e000f0700100c001100120100226a6176612f6c616e672f546872656164244275696c646572244f665669727475616c010007666163746f727901002628294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b09001400150700160c001100170100276f72672f7265646b616c652f7574696c2f416e6f6e796d6f7573546872656164466163746f72790100244c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b09001400190c001a001b0100046e616d650100124c6a6176612f6c616e672f537472696e673b0a0014001d0c0005001e010015284c6a6176612f6c616e672f537472696e673b29560b002000210700220c002300240100226a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72790100096e6577546872656164010028284c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b0a000800260c0027001e0100077365744e616d650700290100106a6176612f6c616e672f537472696e670a0014002b0c002c002d0100056170706c79010038284c6a6176612f6c616e672f537472696e673b294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b07002f01001b6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100294c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f7573546872656164466163746f72793b0100104d6574686f64506172616d6574657273010001720100144c6a6176612f6c616e672f52756e6e61626c653b010001740100124c6a6176612f6c616e672f5468726561643b01000d537461636b4d61705461626c65010026284c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b0100095369676e617475726501008b4c6a6176612f6c616e672f4f626a6563743b4c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b4c6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e3c4c6a6176612f6c616e672f537472696e673b4c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b3e3b01000a536f7572636546696c6501001b416e6f6e796d6f7573546872656164466163746f72792e6a61766101000c496e6e6572436c61737365730700420100186a6176612f6c616e672f546872656164244275696c6465720100074275696c6465720100094f665669727475616c00210014000200020020002e000200120011001700000012001a001b0000000400010005001e000200300000005600020002000000162ab700012ab80007b9000d0100b500132a2bb50018b10000000200310000001200040000001500040011001000160015001700320000001600020000001600330034000000000016001a001b000100350000000501001a00000001002c002d000200300000003d0003000200000009bb0014592bb7001cb00000000200310000000600010000001b00320000001600020000000900330034000000000009001a001b000100350000000501001a00000001002300240002003000000074000200030000001c2ab400132bb9001f02004d2ab40018c6000b2c2ab40018b600252cb000000003003100000012000400000020000b002100120022001a002400320000002000030000001c0033003400000000001c003600370001000b0011003800390002003a000000080001fc001a07000800350000000501003600001041002c003b000200300000003300020002000000092a2bc00028b6002ab00000000200310000000600010000000f00320000000c00010000000900330034000000350000000501001a10000003003c00000002003d003e00000002003f00400000001200020041000800430609000e004100440609"; - + // org.redkale.util.JDK21VirtualThreadFactory private static final Function virtualThreadFactoryFunction; - // org.redkale.util.AnonymousVirtualPoolFunction - private static final String functionVirtualPoolBinary = - "cafebabe0000004100610a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e0100032829560a0008000907000a0c000b000c0100106a6176612f6c616e672f5468726561640100096f665669727475616c01002628294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b0b000e000f0700100c001100120100226a6176612f6c616e672f546872656164244275696c646572244f665669727475616c010007666163746f727901002628294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b0800140100075669727475616c0a001600170700180c0019001a0100106a6176612f6c616e672f537472696e67010006666f726d6174010039284c6a6176612f6c616e672f537472696e673b5b4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f537472696e673b120000001c0c001d001e0100096e657754687265616401005c284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b4c6a6176612f6c616e672f537472696e673b294c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b0a002000210700220c0023002401001e6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72730100186e65775468726561645065725461736b4578656375746f7201004c284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b294c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b0a002600270700280c0029002a01002d6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c506f6f6c46756e6374696f6e0100056170706c7901003a284c6a6176612f6c616e672f537472696e673b294c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b0b002c002d07002e0c001d002f0100226a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f7279010028284c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b0a000800310c003200330100077365744e616d65010015284c6a6176612f6c616e672f537472696e673b295607003501001b6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301002f4c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c506f6f6c46756e6374696f6e3b0100107468726561644e616d65466f726d61740100124c6a6176612f6c616e672f537472696e673b0100244c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b01000a7468726561644e616d650100104d6574686f64506172616d6574657273010026284c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b01000e6c616d626461246170706c79243001005e284c6a6176612f7574696c2f636f6e63757272656e742f546872656164466163746f72793b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b010001720100144c6a6176612f6c616e672f52756e6e61626c653b010001740100124c6a6176612f6c616e672f5468726561643b0100095369676e61747572650100694c6a6176612f6c616e672f4f626a6563743b4c6a6176612f7574696c2f66756e6374696f6e2f46756e6374696f6e3c4c6a6176612f6c616e672f537472696e673b4c6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72536572766963653b3e3b01000a536f7572636546696c65010021416e6f6e796d6f75735669727475616c506f6f6c46756e6374696f6e2e6a617661010010426f6f7473747261704d6574686f647310002f0f06004e0a0026004f0c004100420f0600510a005200530700540c005500560100226a6176612f6c616e672f696e766f6b652f4c616d6264614d657461666163746f727901000b6d657461666163746f72790100cc284c6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b75703b4c6a6176612f6c616e672f537472696e673b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c653b4c6a6176612f6c616e672f696e766f6b652f4d6574686f64547970653b294c6a6176612f6c616e672f696e766f6b652f43616c6c536974653b01000c496e6e6572436c61737365730700590100186a6176612f6c616e672f546872656164244275696c6465720100074275696c6465720100094f665669727475616c07005d0100256a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c6573244c6f6f6b757007005f01001e6a6176612f6c616e672f696e766f6b652f4d6574686f6448616e646c65730100064c6f6f6b75700021002600020001003400000004000100050006000100360000002f00010001000000052ab70001b10000000200370000000600010000000f00380000000c0001000000050039003a000000010029002a00020036000000720005000400000022b80007b9000d01004d2b04bd00025903121353b800154e2c2dba001b0000b8001fb00000000200370000000e000300000013000900140017001500380000002a0004000000220039003a000000000022003b003c0001000900190011003d00020017000b003e003c0003003f0000000501003b0000104100290040000200360000003300020002000000092a2bc00016b60025b00000000200370000000600010000000f00380000000c0001000000090039003a0000003f0000000501003b1000100a00410042000100360000005f000200040000000f2a2cb9002b02004e2d2bb600302db00000000200370000000e00030000001600080017000d001800380000002a00040000000f0011003d00000000000f003e003c00010000000f0043004400020008000700450046000300040047000000020048004900000002004a004b0000000c000100500003004c004d004c00570000001a000300580008005a0609000e0058005b0609005c005e00600019"; - + // org.redkale.util.JDK21VirtualPoolFunction private static final Function virtualPoolFunction; - // org.redkale.util.AnonymousVirtualExecutor - private static final String consumerVirtualExecutorBinary = - "cafebabe00000041002e0a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e0100032829560a0008000907000a0c000b000c0100106a6176612f6c616e672f5468726561640100096f665669727475616c01002628294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b08000e0100155265646b616c652d5669727475616c5468726561640b001000110700120c001300140100226a6176612f6c616e672f546872656164244275696c646572244f665669727475616c0100046e616d65010038284c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f546872656164244275696c646572244f665669727475616c3b0b001000160c001700180100057374617274010028284c6a6176612f6c616e672f52756e6e61626c653b294c6a6176612f6c616e672f5468726561643b07001a0100296f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c4578656375746f7207001c01001d6a6176612f7574696c2f636f6e63757272656e742f4578656375746f72010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301002b4c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f75735669727475616c4578656375746f723b01000765786563757465010017284c6a6176612f6c616e672f52756e6e61626c653b2956010001740100144c6a6176612f6c616e672f52756e6e61626c653b0100104d6574686f64506172616d657465727301000a536f7572636546696c6501001d416e6f6e796d6f75735669727475616c4578656375746f722e6a61766101000c496e6e6572436c617373657307002b0100186a6176612f6c616e672f546872656164244275696c6465720100074275696c6465720100094f665669727475616c0021001900020001001b000000020001000500060001001d0000002f00010001000000052ab70001b100000002001e0000000600010000000e001f0000000c0001000000050020002100000001002200230002001d0000004a0002000200000012b80007120db9000f02002bb90015020057b100000002001e0000000a00020000001200110013001f00000016000200000012002000210000000000120024002500010026000000050100240000000200270000000200280029000000120002002a0008002c06090010002a002d0609"; - + // org.redkale.util.JDK21VirtualExecutor private static final Executor virtualExecutorConsumer; // org.redkale.util.SignalShutDown @@ -102,16 +100,11 @@ public final class Utility { private static final Consumer> signalShutdownConsumer; - // org.redkale.util.AnonymousUnsafe - private static final String funcAnonymousUnsafeBinary = - "cafebabe0000003701710a000200030700040c000500060100106a6176612f6c616e672f4f626a6563740100063c696e69743e01000328295607000801000f73756e2f6d6973632f556e7361666509000a000b07000c0c000d000e0100206f72672f7265646b616c652f7574696c2f416e6f6e796d6f7573556e73616665010006756e736166650100114c73756e2f6d6973632f556e736166653b0a000700100c00110012010006676574496e74010016284c6a6176612f6c616e672f4f626a6563743b4a29490a000700140c00150016010006707574496e74010017284c6a6176612f6c616e672f4f626a6563743b4a4929560a000700180c0019001a0100096765744f626a656374010027284c6a6176612f6c616e672f4f626a6563743b4a294c6a6176612f6c616e672f4f626a6563743b0a0007001c0c001d001e0100097075744f626a656374010028284c6a6176612f6c616e672f4f626a6563743b4a4c6a6176612f6c616e672f4f626a6563743b29560a000700200c0021002201000a676574426f6f6c65616e010016284c6a6176612f6c616e672f4f626a6563743b4a295a0a000700240c0025002601000a707574426f6f6c65616e010017284c6a6176612f6c616e672f4f626a6563743b4a5a29560a000700280c0029002a01000767657442797465010016284c6a6176612f6c616e672f4f626a6563743b4a29420a0007002c0c002d002e01000770757442797465010017284c6a6176612f6c616e672f4f626a6563743b4a4229560a000700300c0031003201000867657453686f7274010016284c6a6176612f6c616e672f4f626a6563743b4a29530a000700340c0035003601000870757453686f7274010017284c6a6176612f6c616e672f4f626a6563743b4a5329560a000700380c0039003a01000767657443686172010016284c6a6176612f6c616e672f4f626a6563743b4a29430a0007003c0c003d003e01000770757443686172010017284c6a6176612f6c616e672f4f626a6563743b4a4329560a000700400c004100420100076765744c6f6e67010016284c6a6176612f6c616e672f4f626a6563743b4a294a0a000700440c004500460100077075744c6f6e67010017284c6a6176612f6c616e672f4f626a6563743b4a4a29560a000700480c0049004a010008676574466c6f6174010016284c6a6176612f6c616e672f4f626a6563743b4a29460a0007004c0c004d004e010008707574466c6f6174010017284c6a6176612f6c616e672f4f626a6563743b4a4629560a000700500c00510052010009676574446f75626c65010016284c6a6176612f6c616e672f4f626a6563743b4a29440a000700540c00550056010009707574446f75626c65010017284c6a6176612f6c616e672f4f626a6563743b4a4429560a000700580c00290059010004284a29420a0007005b0c002d005c010005284a4229560a0007005e0c0031005f010004284a29530a000700610c00350062010005284a5329560a000700640c00390065010004284a29430a000700670c003d0068010005284a4329560a0007006a0c0011006b010004284a29490a0007006d0c0015006e010005284a4929560a000700700c00410071010004284a294a0a000700730c00450074010005284a4a29560a000700760c00490077010004284a29460a000700790c004d007a010005284a4629560a0007007c0c0051007d010004284a29440a0007007f0c00550080010005284a4429560a000700820c0083007101000a676574416464726573730a000700850c0086007401000a707574416464726573730a000700880c0089007101000e616c6c6f636174654d656d6f72790a0007008b0c008c008d0100107265616c6c6f636174654d656d6f7279010005284a4a294a0a0007008f0c009000910100097365744d656d6f7279010018284c6a6176612f6c616e672f4f626a6563743b4a4a4229560a000700930c00900094010006284a4a4229560a000700960c0097009801000a636f70794d656d6f727901002a284c6a6176612f6c616e672f4f626a6563743b4a4c6a6176612f6c616e672f4f626a6563743b4a4a29560a0007009a0c0097009b010006284a4a4a29560a0007009d0c009e009f01000a667265654d656d6f7279010004284a29560a000700a10c00a200a30100116f626a6563744669656c644f666673657401001c284c6a6176612f6c616e672f7265666c6563742f4669656c643b294a0a000700a50c00a600a30100117374617469634669656c644f66667365740a000700a80c00a900aa01000f7374617469634669656c644261736501002d284c6a6176612f6c616e672f7265666c6563742f4669656c643b294c6a6176612f6c616e672f4f626a6563743b0a000700ac0c00ad00ae01000f6172726179426173654f6666736574010014284c6a6176612f6c616e672f436c6173733b29490a000700b00c00b100ae01000f6172726179496e6465785363616c650a000700b30c00b400b501000b6164647265737353697a650100032829490a000700b70c00b800b50100087061676553697a650a000700ba0c00bb00bc010010616c6c6f63617465496e7374616e6365010025284c6a6176612f6c616e672f436c6173733b294c6a6176612f6c616e672f4f626a6563743b0a000700be0c00bf00c001000e7468726f77457863657074696f6e010018284c6a6176612f6c616e672f5468726f7761626c653b29560a000700c20c00c300c4010014636f6d70617265416e64537761704f626a65637401003a284c6a6176612f6c616e672f4f626a6563743b4a4c6a6176612f6c616e672f4f626a6563743b4c6a6176612f6c616e672f4f626a6563743b295a0a000700c60c00c700c8010011636f6d70617265416e6453776170496e74010018284c6a6176612f6c616e672f4f626a6563743b4a4949295a0a000700ca0c00cb00cc010012636f6d70617265416e64537761704c6f6e67010018284c6a6176612f6c616e672f4f626a6563743b4a4a4a295a0a000700ce0c00cf001a0100116765744f626a656374566f6c6174696c650a000700d10c00d2001e0100117075744f626a656374566f6c6174696c650a000700d40c00d5001201000e676574496e74566f6c6174696c650a000700d70c00d8001601000e707574496e74566f6c6174696c650a000700da0c00db0022010012676574426f6f6c65616e566f6c6174696c650a000700dd0c00de0026010012707574426f6f6c65616e566f6c6174696c650a000700e00c00e1002a01000f67657442797465566f6c6174696c650a000700e30c00e4002e01000f70757442797465566f6c6174696c650a000700e60c00e7003201001067657453686f7274566f6c6174696c650a000700e90c00ea003601001070757453686f7274566f6c6174696c650a000700ec0c00ed003a01000f67657443686172566f6c6174696c650a000700ef0c00f0003e01000f70757443686172566f6c6174696c650a000700f20c00f3004201000f6765744c6f6e67566f6c6174696c650a000700f50c00f6004601000f7075744c6f6e67566f6c6174696c650a000700f80c00f9004a010010676574466c6f6174566f6c6174696c650a000700fb0c00fc004e010010707574466c6f6174566f6c6174696c650a000700fe0c00ff0052010011676574446f75626c65566f6c6174696c650a000701010c01020056010011707574446f75626c65566f6c6174696c650a000701040c0105001e0100107075744f7264657265644f626a6563740a000701070c0108001601000d7075744f726465726564496e740a0007010a0c010b004601000e7075744f7264657265644c6f6e670a0007010d0c010e010f010006756e7061726b010015284c6a6176612f6c616e672f4f626a6563743b29560a000701110c011201130100047061726b010005285a4a29560a000701150c0116011701000e6765744c6f616441766572616765010006285b444929490a000701190c011a011b01000c676574416e64416464496e74010017284c6a6176612f6c616e672f4f626a6563743b4a4929490a0007011d0c011e011f01000d676574416e644164644c6f6e67010017284c6a6176612f6c616e672f4f626a6563743b4a4a294a0a000701210c0122011b01000c676574416e64536574496e740a000701240c0125011f01000d676574416e645365744c6f6e670a000701270c0128012901000f676574416e645365744f626a656374010039284c6a6176612f6c616e672f4f626a6563743b4a4c6a6176612f6c616e672f4f626a6563743b294c6a6176612f6c616e672f4f626a6563743b0a0007012b0c012c00060100096c6f616446656e63650a0007012e0c012f000601000a73746f726546656e63650a000701310c0132000601000966756c6c46656e63650a000701340c0135013601000d696e766f6b65436c65616e6572010018284c6a6176612f6e696f2f427974654275666665723b29560701380100176f72672f7265646b616c652f7574696c2f556e73616665010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c65010004746869730100224c6f72672f7265646b616c652f7574696c2f416e6f6e796d6f7573556e736166653b0100036f626a0100124c6a6176612f6c616e672f4f626a6563743b0100104d6574686f64506172616d65746572730100016f0100066f66667365740100014a01000178010001490100015a010001420100015301000143010001460100014401000761646472657373010005627974657301000576616c7565010007737263426173650100097372634f6666736574010008646573744261736501000a646573744f666673657401000a7372634164647265737301000b6465737441646472657373010001660100194c6a6176612f6c616e672f7265666c6563742f4669656c643b01000a6172726179436c6173730100114c6a6176612f6c616e672f436c6173733b0100164c6f63616c5661726961626c65547970655461626c650100144c6a6176612f6c616e672f436c6173733c2a3e3b0100095369676e6174757265010017284c6a6176612f6c616e672f436c6173733c2a3e3b2949010003636c7301000a457863657074696f6e730701600100206a6176612f6c616e672f496e7374616e74696174696f6e457863657074696f6e010028284c6a6176612f6c616e672f436c6173733c2a3e3b294c6a6176612f6c616e672f4f626a6563743b01000265650100154c6a6176612f6c616e672f5468726f7761626c653b010008657870656374656401000674687265616401000a69734162736f6c75746501000474696d650100076c6f61646176670100025b440100066e656c656d7301000564656c74610100086e657756616c756501000c6469726563744275666665720100154c6a6176612f6e696f2f427974654275666665723b01000a536f7572636546696c65010014416e6f6e796d6f7573556e736166652e6a6176610021000a00020001013700010012000d000e0000005700010005010f0002013900000049000200020000000d2ab700012a2bc00007b50009b100000002013a0000000e00030000000a0004000b000c000c013b0000001600020000000d013c013d00000000000d013e013f000101400000000501013e00000001001100120002013900000048000400040000000a2ab400092b20b6000fac00000002013a00000006000100000010013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001001500160002013900000058000500050000000c2ab400092b201504b60013b100000002013a0000000a000200000015000b0016013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440145000401400000000d0301410000014200000144000000010019001a0002013900000048000400040000000a2ab400092b20b60017b000000002013a0000000600010000001a013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001001d001e0002013900000058000500050000000c2ab400092b201904b6001bb100000002013a0000000a00020000001f000b0020013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c0144013f000401400000000d030141000001420000014400000001002100220002013900000048000400040000000a2ab400092b20b6001fac00000002013a00000006000100000024013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001002500260002013900000058000500050000000c2ab400092b201504b60023b100000002013a0000000a000200000029000b002a013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440146000401400000000d0301410000014200000144000000010029002a0002013900000048000400040000000a2ab400092b20b60027ac00000002013a0000000600010000002e013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001002d002e0002013900000058000500050000000c2ab400092b201504b6002bb100000002013a0000000a000200000033000b0034013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440147000401400000000d030141000001420000014400000001003100320002013900000048000400040000000a2ab400092b20b6002fac00000002013a00000006000100000038013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001003500360002013900000058000500050000000c2ab400092b201504b60033b100000002013a0000000a00020000003d000b003e013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440148000401400000000d0301410000014200000144000000010039003a0002013900000048000400040000000a2ab400092b20b60037ac00000002013a00000006000100000042013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001003d003e0002013900000058000500050000000c2ab400092b201504b6003bb100000002013a0000000a000200000047000b0048013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440149000401400000000d030141000001420000014400000001004100420002013900000048000400040000000a2ab400092b20b6003fad00000002013a0000000600010000004c013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001004500460002013900000058000600060000000c2ab400092b201604b60043b100000002013a0000000a000200000051000b0052013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440143000401400000000d0301410000014200000144000000010049004a0002013900000048000400040000000a2ab400092b20b60047ae00000002013a00000006000100000056013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001004d004e0002013900000058000500050000000c2ab400092b201704b6004bb100000002013a0000000a00020000005b000b005c013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c0144014a000401400000000d030141000001420000014400000001005100520002013900000048000400040000000a2ab400092b20b6004faf00000002013a00000006000100000060013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001005500560002013900000058000600060000000c2ab400092b201804b60053b100000002013a0000000a000200000065000b0066013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c0144014b000401400000000d03014100000142000001440000000100290059000201390000003d00030003000000092ab400091fb60057ac00000002013a0000000600010000006a013b00000016000200000009013c013d000000000009014c0143000101400000000501014c00000001002d005c000201390000004c000400040000000a2ab400091f1db6005ab100000002013a0000000a00020000006f00090070013b0000002000030000000a013c013d00000000000a014c014300010000000a01440147000301400000000902014c00000144000000010031005f000201390000003d00030003000000092ab400091fb6005dac00000002013a00000006000100000074013b00000016000200000009013c013d000000000009014c0143000101400000000501014c0000000100350062000201390000004c000400040000000a2ab400091f1db60060b100000002013a0000000a0002000000790009007a013b0000002000030000000a013c013d00000000000a014c014300010000000a01440148000301400000000902014c000001440000000100390065000201390000003d00030003000000092ab400091fb60063ac00000002013a0000000600010000007e013b00000016000200000009013c013d000000000009014c0143000101400000000501014c00000001003d0068000201390000004c000400040000000a2ab400091f1db60066b100000002013a0000000a00020000008300090084013b0000002000030000000a013c013d00000000000a014c014300010000000a01440149000301400000000902014c00000144000000010011006b000201390000003d00030003000000092ab400091fb60069ac00000002013a00000006000100000088013b00000016000200000009013c013d000000000009014c0143000101400000000501014c000000010015006e000201390000004c000400040000000a2ab400091f1db6006cb100000002013a0000000a00020000008d0009008e013b0000002000030000000a013c013d00000000000a014c014300010000000a01440145000301400000000902014c000001440000000100410071000201390000003d00030003000000092ab400091fb6006fad00000002013a00000006000100000092013b00000016000200000009013c013d000000000009014c0143000101400000000501014c0000000100450074000201390000004c000500050000000a2ab400091f21b60072b100000002013a0000000a00020000009700090098013b0000002000030000000a013c013d00000000000a014c014300010000000a01440143000301400000000902014c000001440000000100490077000201390000003d00030003000000092ab400091fb60075ae00000002013a0000000600010000009c013b00000016000200000009013c013d000000000009014c0143000101400000000501014c00000001004d007a000201390000004c000400040000000a2ab400091f25b60078b100000002013a0000000a0002000000a1000900a2013b0000002000030000000a013c013d00000000000a014c014300010000000a0144014a000301400000000902014c00000144000000010051007d000201390000003d00030003000000092ab400091fb6007baf00000002013a000000060001000000a6013b00000016000200000009013c013d000000000009014c0143000101400000000501014c0000000100550080000201390000004c000500050000000a2ab400091f29b6007eb100000002013a0000000a0002000000ab000900ac013b0000002000030000000a013c013d00000000000a014c014300010000000a0144014b000301400000000902014c000001440000000100830071000201390000003d00030003000000092ab400091fb60081ad00000002013a000000060001000000b0013b00000016000200000009013c013d000000000009014c0143000101400000000501014c0000000100860074000201390000004c000500050000000a2ab400091f21b60084b100000002013a0000000a0002000000b5000900b6013b0000002000030000000a013c013d00000000000a014c014300010000000a01440143000301400000000902014c000001440000000100890071000201390000003d00030003000000092ab400091fb60087ad00000002013a000000060001000000ba013b00000016000200000009013c013d000000000009014d0143000101400000000501014d00000001008c008d0002013900000048000500050000000a2ab400091f21b6008aad00000002013a000000060001000000bf013b0000002000030000000a013c013d00000000000a014c014300010000000a014d0143000301400000000902014c0000014d00000001009000910002013900000064000700070000000e2ab400092b2016041506b6008eb100000002013a0000000a0002000000c4000d00c5013b0000003400050000000e013c013d00000000000e0141013f00010000000e0142014300020000000e014d014300040000000e014e01470006014000000011040141000001420000014d0000014e00000001009000940002013900000058000600060000000c2ab400091f211505b60092b100000002013a0000000a0002000000c9000b00ca013b0000002a00040000000c013c013d00000000000c014c014300010000000c014d014300030000000c014e0147000501400000000d03014c0000014d0000014e0000000100970098000201390000007000090009000000102ab400092b20190416051607b60095b100000002013a0000000a0002000000ce000f00cf013b0000003e000600000010013c013d000000000010014f013f000100000010015001430002000000100151013f00040000001001520143000500000010014d0143000701400000001505014f0000015000000151000001520000014d000000010097009b0002013900000058000700070000000c2ab400091f211605b60099b100000002013a0000000a0002000000d3000b00d4013b0000002a00040000000c013c013d00000000000c0153014300010000000c0154014300030000000c014d0143000501400000000d030153000001540000014d00000001009e009f000201390000004100030003000000092ab400091fb6009cb100000002013a0000000a0002000000d8000800d9013b00000016000200000009013c013d000000000009014c0143000101400000000501014c0000000100a200a3000201390000003d00020002000000092ab400092bb600a0ad00000002013a000000060001000000dd013b00000016000200000009013c013d0000000000090155015600010140000000050101550000000100a600a3000201390000003d00020002000000092ab400092bb600a4ad00000002013a000000060001000000e2013b00000016000200000009013c013d0000000000090155015600010140000000050101550000000100a900aa000201390000003d00020002000000092ab400092bb600a7b000000002013a000000060001000000e7013b00000016000200000009013c013d0000000000090155015600010140000000050101550000000100ad00ae000301390000004f00020002000000092ab400092bb600abac00000003013a000000060001000000ec013b00000016000200000009013c013d00000000000901570158000101590000000c0001000000090157015a00010140000000050101570000015b00000002015c000100b100ae000301390000004f00020002000000092ab400092bb600afac00000003013a000000060001000000f1013b00000016000200000009013c013d00000000000901570158000101590000000c0001000000090157015a00010140000000050101570000015b00000002015c000100b400b5000101390000003200010001000000082ab40009b600b2ac00000002013a000000060001000000f6013b0000000c000100000008013c013d0000000100b800b5000101390000003200010001000000082ab40009b600b6ac00000002013a000000060001000000fb013b0000000c000100000008013c013d0000000100bb00bc000401390000004f00020002000000092ab400092bb600b9b000000003013a00000006000100000100013b00000016000200000009013c013d000000000009015d0158000101590000000c000100000009015d015a0001015e000000040001015f01400000000501015d0000015b000000020161000100bf00c0000201390000004100020002000000092ab400092bb600bdb100000002013a0000000a00020000010500080106013b00000016000200000009013c013d0000000000090162016300010140000000050101620000000100c300c40002013900000060000600060000000e2ab400092b2019041905b600c1ac00000002013a0000000600010000010a013b0000003400050000000e013c013d00000000000e0141013f00010000000e0142014300020000000e0164013f00040000000e0144013f00050140000000110401410000014200000164000001440000000100c700c80002013900000060000600060000000e2ab400092b2015041505b600c5ac00000002013a0000000600010000010f013b0000003400050000000e013c013d00000000000e0141013f00010000000e0142014300020000000e0164014500040000000e0144014500050140000000110401410000014200000164000001440000000100cb00cc0002013900000060000800080000000e2ab400092b2016041606b600c9ac00000002013a00000006000100000114013b0000003400050000000e013c013d00000000000e0141013f00010000000e0142014300020000000e0164014300040000000e0144014300060140000000110401410000014200000164000001440000000100cf001a0002013900000048000400040000000a2ab400092b20b600cdb000000002013a00000006000100000119013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100d2001e0002013900000058000500050000000c2ab400092b201904b600d0b100000002013a0000000a00020000011e000b011f013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c0144013f000401400000000d03014100000142000001440000000100d500120002013900000048000400040000000a2ab400092b20b600d3ac00000002013a00000006000100000123013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100d800160002013900000058000500050000000c2ab400092b201504b600d6b100000002013a0000000a000200000128000b0129013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440145000401400000000d03014100000142000001440000000100db00220002013900000048000400040000000a2ab400092b20b600d9ac00000002013a0000000600010000012d013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100de00260002013900000058000500050000000c2ab400092b201504b600dcb100000002013a0000000a000200000132000b0133013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440146000401400000000d03014100000142000001440000000100e1002a0002013900000048000400040000000a2ab400092b20b600dfac00000002013a00000006000100000137013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100e4002e0002013900000058000500050000000c2ab400092b201504b600e2b100000002013a0000000a00020000013c000b013d013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440147000401400000000d03014100000142000001440000000100e700320002013900000048000400040000000a2ab400092b20b600e5ac00000002013a00000006000100000141013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100ea00360002013900000058000500050000000c2ab400092b201504b600e8b100000002013a0000000a000200000146000b0147013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440148000401400000000d03014100000142000001440000000100ed003a0002013900000048000400040000000a2ab400092b20b600ebac00000002013a0000000600010000014b013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100f0003e0002013900000058000500050000000c2ab400092b201504b600eeb100000002013a0000000a000200000150000b0151013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440149000401400000000d03014100000142000001440000000100f300420002013900000048000400040000000a2ab400092b20b600f1ad00000002013a00000006000100000155013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100f600460002013900000058000600060000000c2ab400092b201604b600f4b100000002013a0000000a00020000015a000b015b013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440143000401400000000d03014100000142000001440000000100f9004a0002013900000048000400040000000a2ab400092b20b600f7ae00000002013a0000000600010000015f013b0000002000030000000a013c013d00000000000a0141013f00010000000a014201430002014000000009020141000001420000000100fc004e0002013900000058000500050000000c2ab400092b201704b600fab100000002013a0000000a000200000164000b0165013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c0144014a000401400000000d03014100000142000001440000000100ff00520002013900000048000400040000000a2ab400092b20b600fdaf00000002013a00000006000100000169013b0000002000030000000a013c013d00000000000a0141013f00010000000a0142014300020140000000090201410000014200000001010200560002013900000058000600060000000c2ab400092b201804b60100b100000002013a0000000a00020000016e000b016f013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c0144014b000401400000000d0301410000014200000144000000010105001e0002013900000058000500050000000c2ab400092b201904b60103b100000002013a0000000a000200000173000b0174013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c0144013f000401400000000d030141000001420000014400000001010800160002013900000058000500050000000c2ab400092b201504b60106b100000002013a0000000a000200000178000b0179013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440145000401400000000d030141000001420000014400000001010b00460002013900000058000600060000000c2ab400092b201604b60109b100000002013a0000000a00020000017d000b017e013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c01440143000401400000000d030141000001420000014400000001010e010f000201390000004100020002000000092ab400092bb6010cb100000002013a0000000a00020000018200080183013b00000016000200000009013c013d0000000000090165013f00010140000000050101650000000101120113000201390000004c000400040000000a2ab400091b20b60110b100000002013a0000000a00020000018700090188013b0000002000030000000a013c013d00000000000a0166014600010000000a0167014300020140000000090201660000016700000001011601170002013900000048000300030000000a2ab400092b1cb60114ac00000002013a0000000600010000018c013b0000002000030000000a013c013d00000000000a0168016900010000000a016a014500020140000000090201680000016a00000001011a011b0002013900000054000500050000000c2ab400092b201504b60118ac00000002013a00000006000100000191013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c016b0145000401400000000d030141000001420000016b00000001011e011f0002013900000054000600060000000c2ab400092b201604b6011cad00000002013a00000006000100000196013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c016b0143000401400000000d030141000001420000016b000000010122011b0002013900000054000500050000000c2ab400092b201504b60120ac00000002013a0000000600010000019b013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c016c0145000401400000000d030141000001420000016c000000010125011f0002013900000054000600060000000c2ab400092b201604b60123ad00000002013a000000060001000001a0013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c016c0143000401400000000d030141000001420000016c00000001012801290002013900000054000500050000000c2ab400092b201904b60126b000000002013a000000060001000001a5013b0000002a00040000000c013c013d00000000000c0141013f00010000000c0142014300020000000c016c013f000401400000000d030141000001420000016c00000001012c0006000101390000003600010001000000082ab40009b6012ab100000002013a0000000a0002000001aa000701ab013b0000000c000100000008013c013d00000001012f0006000101390000003600010001000000082ab40009b6012db100000002013a0000000a0002000001af000701b0013b0000000c000100000008013c013d0000000101320006000101390000003600010001000000082ab40009b60130b100000002013a0000000a0002000001b4000701b5013b0000000c000100000008013c013d0000000101350136000201390000004100020002000000092ab400092bb60133b100000002013a0000000a0002000001b9000801ba013b00000016000200000009013c013d000000000009016d016e000101400000000501016d00000001016f000000020170"; - - private static final Unsafe unsafeInstance; - // ------------------------------------------------------------------------------- + private static final Function strByteFunction; - private static final Predicate strLatin1Function; + private static final Predicate strLatin1Function; private static final ReentrantLock clientLock = new ReentrantLock(); @@ -136,179 +129,51 @@ public final class Utility { })) .setRemoveOnCancelPolicy(true); - Unsafe unsafe0 = null; Function strByteFunction0 = null; - Predicate strLatin1Function0 = null; + Predicate strLatin1Function0 = null; + Consumer> signalShutdownConsumer0 = null; + + Executor virtualExecutorConsumer0 = null; + Function virtualPoolFunction0 = null; Function virtualThreadLocalFunction0 = null; Function virtualThreadFactoryFunction0 = null; - Function virtualPoolFunction0 = null; - Executor virtualExecutorConsumer0 = null; if (!NATIVE_IMAGE_ENV) { // not native-image try { final ClassLoader loader = Thread.currentThread().getContextClassLoader(); - { // virtualThreadLocalFunction - Class> virtualClazz = null; + { // Jdk21Inners try { - virtualClazz = (Class) loader.loadClass("org.redkale.util.AnonymousThreadLocal"); - } catch (Throwable t) { - // do nothing - } - if (virtualClazz == null) { - try { - byte[] classBytes = hexToBin(functionThreadLocalBinary); - virtualClazz = (Class>) - new ClassLoader(loader) { - public final Class loadClass(String name, byte[] b) { - return defineClass(name, b, 0, b.length); - } - }.loadClass("org.redkale.util.AnonymousThreadLocal", classBytes); - RedkaleClassLoader.putDynClass(virtualClazz.getName(), classBytes, virtualClazz); - } catch (Throwable t) { - // do nothing - } - } - if (virtualClazz != null) { - try { - RedkaleClassLoader.putReflectionDeclaredConstructors(virtualClazz, virtualClazz.getName()); - Supplier supplier = () -> null; - virtualThreadLocalFunction0 = - virtualClazz.getConstructor(Supplier.class).newInstance(supplier); - } catch (Throwable t) { - // do nothing - } - } - } - { // virtualThreadFactoryFunction - Class> virtualClazz = null; - try { - virtualClazz = (Class) loader.loadClass("org.redkale.util.AnonymousThreadFactory"); - } catch (Throwable t) { - // do nothing - } - if (virtualClazz == null) { - try { - byte[] classBytes = hexToBin(functionThreadFactoryBinary); - virtualClazz = (Class>) - new ClassLoader(loader) { - public final Class loadClass(String name, byte[] b) { - return defineClass(name, b, 0, b.length); - } - }.loadClass("org.redkale.util.AnonymousThreadFactory", classBytes); - RedkaleClassLoader.putDynClass(virtualClazz.getName(), classBytes, virtualClazz); - } catch (Throwable t) { - // do nothing - } - } - if (virtualClazz != null) { - try { - RedkaleClassLoader.putReflectionDeclaredConstructors(virtualClazz, virtualClazz.getName()); - Object[] initargs = new Object[] {null}; - virtualThreadFactoryFunction0 = - virtualClazz.getConstructor(String.class).newInstance(initargs); - } catch (Throwable t) { - // do nothing - } - } - } - { // virtualPoolFunction - Class> virtualClazz = null; - try { - virtualClazz = (Class) loader.loadClass("org.redkale.util.AnonymousVirtualPoolFunction"); - } catch (Throwable t) { - // do nothing - } - if (virtualClazz == null) { - try { - byte[] classBytes = hexToBin(functionVirtualPoolBinary); - virtualClazz = (Class>) - new ClassLoader(loader) { - public final Class loadClass(String name, byte[] b) { - return defineClass(name, b, 0, b.length); - } - }.loadClass("org.redkale.util.AnonymousVirtualPoolFunction", classBytes); - RedkaleClassLoader.putDynClass(virtualClazz.getName(), classBytes, virtualClazz); - } catch (Throwable t) { - // do nothing - } - } - if (virtualClazz != null) { - try { - RedkaleClassLoader.putReflectionDeclaredConstructors(virtualClazz, virtualClazz.getName()); - virtualPoolFunction0 = virtualClazz.getConstructor().newInstance(); - } catch (Throwable t) { - // do nothing - } - } - } - { // virtualExecutorConsumer - Class virtualClazz = null; - try { - virtualClazz = (Class) loader.loadClass("org.redkale.util.AnonymousVirtualExecutor"); - } catch (Throwable t) { - // do nothing - } - if (virtualClazz == null) { - try { - byte[] classBytes = hexToBin(consumerVirtualExecutorBinary); - virtualClazz = (Class) - new ClassLoader(loader) { - public final Class loadClass(String name, byte[] b) { - return defineClass(name, b, 0, b.length); - } - }.loadClass("org.redkale.util.AnonymousVirtualExecutor", classBytes); - RedkaleClassLoader.putDynClass(virtualClazz.getName(), classBytes, virtualClazz); - } catch (Throwable t) { - // do nothing - } - } - if (virtualClazz != null) { - try { - RedkaleClassLoader.putReflectionDeclaredConstructors(virtualClazz, virtualClazz.getName()); - virtualExecutorConsumer0 = - virtualClazz.getConstructor().newInstance(); - } catch (Throwable t) { - // do nothing - } - } - } - { // unsafe - Field f = String.class.getDeclaredField("value"); - final Class unsafeClass = loader.loadClass("sun.misc.Unsafe"); - final Field safeField = unsafeClass.getDeclaredField("theUnsafe"); - RedkaleClassLoader.putReflectionField("sun.misc.Unsafe", safeField); - safeField.setAccessible(true); - final Object usafe = safeField.get(null); + String virtualName = "org.redkale.util.Jdk21Inners"; + Class virtualClazz = loader.loadClass(virtualName); + Method method = virtualClazz.getMethod("createExecutor"); + virtualExecutorConsumer0 = (Executor) method.invoke(null); + RedkaleClassLoader.putReflectionMethod(virtualName, method); - Class unsafeClazz1 = null; - try { - unsafeClazz1 = (Class) loader.loadClass("org.redkale.util.AnonymousUnsafe"); + method = virtualClazz.getMethod("createPoolFunction"); + virtualPoolFunction0 = (Function) method.invoke(null); + RedkaleClassLoader.putReflectionMethod(virtualName, method); + + method = virtualClazz.getMethod("createThreadLocalFunction"); + virtualThreadLocalFunction0 = (Function) method.invoke(null); + RedkaleClassLoader.putReflectionMethod(virtualName, method); + + method = virtualClazz.getMethod("createThreadFactoryFunction"); + virtualThreadFactoryFunction0 = (Function) method.invoke(null); + RedkaleClassLoader.putReflectionMethod(virtualName, method); } catch (Throwable t) { // do nothing } - if (unsafeClazz1 == null) { - byte[] classBytes = hexToBin(funcAnonymousUnsafeBinary); - unsafeClazz1 = (Class) - new ClassLoader(loader) { - public final Class loadClass(String name, byte[] b) { - return defineClass(name, b, 0, b.length); - } - }.loadClass("org.redkale.util.AnonymousUnsafe", classBytes); - RedkaleClassLoader.putDynClass(unsafeClazz1.getName(), classBytes, unsafeClazz1); - } - RedkaleClassLoader.putReflectionDeclaredConstructors( - unsafeClazz1, unsafeClazz1.getName(), Object.class); - unsafe0 = unsafeClazz1.getConstructor(Object.class).newInstance(usafe); - - final Unsafe unsafe = unsafe0; - final long fd1 = unsafe0.objectFieldOffset(f); - final long fd2 = unsafe0.objectFieldOffset(String.class.getDeclaredField("coder")); - Field cf = String.class.getDeclaredField("COMPACT_STRINGS"); - strByteFunction0 = (String t) -> (byte[]) unsafe.getObject(t, fd1); - final boolean compact = unsafe.getBoolean(String.class, unsafe0.staticFieldOffset(cf)); + } + { // String-LATIN1 + MethodHandles.Lookup lookup = defaultLookup; + VarHandle compactHandle = lookup.findVarHandle(String.class, "COMPACT_STRINGS", boolean.class); + final boolean compact = (Boolean) compactHandle.get(null); + VarHandle coderHandle = lookup.findVarHandle(String.class, "coder", byte.class); + VarHandle valueHandle = lookup.findVarHandle(String.class, "value", byte[].class); // LATIN1:0 UTF16:1 - strLatin1Function0 = compact ? (Object t) -> unsafe.getByte(t, fd2) == 0 : (Object t) -> false; + strLatin1Function0 = compact ? (String t) -> (Byte) coderHandle.get(t) == 0 : (String t) -> false; + strByteFunction0 = (String t) -> (byte[]) valueHandle.get(t); } { // signalShutdown Class>> shutdownClazz1 = null; @@ -335,7 +200,6 @@ public final class Utility { // do nothing } } - unsafeInstance = unsafe0; strByteFunction = strByteFunction0; strLatin1Function = strLatin1Function0; signalShutdownConsumer = signalShutdownConsumer0; @@ -370,14 +234,14 @@ public final class Utility { private Utility() {} - public static Unsafe unsafe() { - return unsafeInstance; - } - public static int cpus() { return CPUS; } + public static MethodHandles.Lookup lookup() { + return defaultLookup; + } + public static boolean inNativeImage() { return NATIVE_IMAGE_ENV; } @@ -4933,13 +4797,13 @@ public final class Utility { return bytes; } - public static ByteBuffer encodeUTF8(final ByteBuffer buffer, final char[] array) { - return encodeUTF8(buffer, array, 0, array.length); - } - - public static ByteBuffer encodeUTF8(final ByteBuffer buffer, int bytesLength, final char[] array) { - return encodeUTF8(buffer, bytesLength, array, 0, array.length); - } + // public static ByteBuffer encodeUTF8(final ByteBuffer buffer, final char[] array) { + // return encodeUTF8(buffer, array, 0, array.length); + // } + // + // public static ByteBuffer encodeUTF8(final ByteBuffer buffer, int bytesLength, final char[] array) { + // return encodeUTF8(buffer, bytesLength, array, 0, array.length); + // } public static int encodeUTF8Length(String value) { if (value == null) { @@ -5050,57 +4914,59 @@ public final class Utility { return (0L + high) << 32 | low; } - public static ByteBuffer encodeUTF8(final ByteBuffer buffer, final char[] text, final int start, final int len) { - return encodeUTF8(buffer, encodeUTF8Length(text, start, len), text, start, len); - } - - // 返回的ByteBuffer为扩展buffer,为null表示参数中的buffer足够存储数据 - public static ByteBuffer encodeUTF8( - final ByteBuffer buffer, int bytesLength, final char[] text, final int start, final int len) { - char c; - char[] chs = text; - final int limit = start + len; - int remain = buffer.remaining(); - final ByteBuffer buffer2 = - remain >= bytesLength ? null : ByteBuffer.allocate(bytesLength - remain + 4); // 最差情况buffer最后两byte没有填充 - ByteBuffer buf = buffer; - for (int i = start; i < limit; i++) { - c = chs[i]; - if (c < 0x80) { - if (buf.remaining() < 1) { - buf = buffer2; - } - buf.put((byte) c); - } else if (c < 0x800) { - if (buf.remaining() < 2) { - buf = buffer2; - } - buf.put((byte) (0xc0 | (c >> 6))); - buf.put((byte) (0x80 | (c & 0x3f))); - } else if (Character.isSurrogate(c)) { // 连取两个 - if (buf.remaining() < 4) { - buf = buffer2; - } - int uc = Character.toCodePoint(c, chs[i + 1]); - buf.put((byte) (0xf0 | ((uc >> 18)))); - buf.put((byte) (0x80 | ((uc >> 12) & 0x3f))); - buf.put((byte) (0x80 | ((uc >> 6) & 0x3f))); - buf.put((byte) (0x80 | (uc & 0x3f))); - i++; - } else { - if (buf.remaining() < 3) { - buf = buffer2; - } - buf.put((byte) (0xe0 | ((c >> 12)))); - buf.put((byte) (0x80 | ((c >> 6) & 0x3f))); - buf.put((byte) (0x80 | (c & 0x3f))); - } - } - if (buffer2 != null) { - buffer2.flip(); - } - return buffer2; // 返回扩展buffer - } + // public static ByteBuffer encodeUTF8(final ByteBuffer buffer, final char[] text, final int start, final int + // len) { + // return encodeUTF8(buffer, encodeUTF8Length(text, start, len), text, start, len); + // } + // + // // 返回的ByteBuffer为扩展buffer,为null表示参数中的buffer足够存储数据 + // public static ByteBuffer encodeUTF8( + // final ByteBuffer buffer, int bytesLength, final char[] text, final int start, final int len) { + // char c; + // char[] chs = text; + // final int limit = start + len; + // int remain = buffer.remaining(); + // final ByteBuffer buffer2 = + // remain >= bytesLength ? null : ByteBuffer.allocate(bytesLength - remain + 4); // + // 最差情况buffer最后两byte没有填充 + // ByteBuffer buf = buffer; + // for (int i = start; i < limit; i++) { + // c = chs[i]; + // if (c < 0x80) { + // if (buf.remaining() < 1) { + // buf = buffer2; + // } + // buf.put((byte) c); + // } else if (c < 0x800) { + // if (buf.remaining() < 2) { + // buf = buffer2; + // } + // buf.put((byte) (0xc0 | (c >> 6))); + // buf.put((byte) (0x80 | (c & 0x3f))); + // } else if (Character.isSurrogate(c)) { // 连取两个 + // if (buf.remaining() < 4) { + // buf = buffer2; + // } + // int uc = Character.toCodePoint(c, chs[i + 1]); + // buf.put((byte) (0xf0 | (uc >> 18))); + // buf.put((byte) (0x80 | ((uc >> 12) & 0x3f))); + // buf.put((byte) (0x80 | ((uc >> 6) & 0x3f))); + // buf.put((byte) (0x80 | (uc & 0x3f))); + // i++; + // } else { + // if (buf.remaining() < 3) { + // buf = buffer2; + // } + // buf.put((byte) (0xe0 | (c >> 12))); + // buf.put((byte) (0x80 | ((c >> 6) & 0x3f))); + // buf.put((byte) (0x80 | (c & 0x3f))); + // } + // } + // if (buffer2 != null) { + // buffer2.flip(); + // } + // return buffer2; // 返回扩展buffer + // } public static String getTypeDescriptor(java.lang.reflect.Type type) { if (type == null) {