【发布时间】:2017-02-25 01:11:41
【问题描述】:
我正在用 Java 编写一些 FFI 代码,大量使用 sun.misc.Unsafe。
在 Java 9 中,此类将变得不可访问,并将变为 jdk.unsupported.Unsafe。我想编写我的代码,以便它现在可以工作,但在 Java 9 中继续工作。
做到这一点的最简单的方法是什么?我更喜欢二进制兼容性,但源兼容性也可以。
编辑:每次调用 Unsafe 上的方法时,我都 100% 不同意使用反射——甚至虚拟调度。大多数这些方法编译为单个机器指令。因此,性能真的很重要。可以有包装器——但前提是我可以确定 JIT 每次都会内联它们。
我目前的计划是在运行时加载一个合适的类。
【问题讨论】:
-
它将是
unsupported... -
@r1verside 我知道,但几乎可以肯定不会消失,因为很多代码(包括新开发!)都依赖于它。
-
也许是时候做你很久以前就应该做的事了:修复你的代码(这样你就不会使用任何粗糙的旧 sun 代码)。
-
@Bohemian 如果真的是 any 其他
sun.misc.*类,我会这样做。但是sun.misc.Unsafe不是普通的类:它的大多数方法都是无法模拟的内在函数,除非性能损失超过一个数量级。对于我的库(一个 FFI 库),这是不可接受的。 Java 没有提供对原始指针进行操作的标准方法,这不是我的错——这在 C# 中都不是问题。相信我,如果有同样性能的替代品,我会使用它! -
@demi 可能还有办法。请详细描述您实际想要实现的目标(而不是描述解决方法您想要做什么)
标签: java ffi binary-compatibility source-compatibility