在 Java 8 中,我使用以下代码来分配和管理堆外内存。
try {
String text = "test";
buffer.put(text.getBytes(StandardCharsets.UTF_8));
} finally {
// Release the memory
Optional.of(buffer).map(DirectBuffer.class::cast).map(DirectBuffer::cleaner).filter(Objects::nonNull).ifPresent(Cleaner::clean);
}
这将导入类 sun.misc.Cleaner 和 sun.nio.ch.DirectBuffer;这在 Java 16 中不可用。在 Java 16 下,我需要使用外部内存 API,如下所示,但是该 API 在 Java 8 中不可用。
try(MemorySegment s = MemorySegment.allocateNative(128))
{
//...
}
有没有办法分配堆外内存并使我的源代码与 Java 8 和 16 兼容?