gpt4 book ai didi

java - 如何让 JavaCritical 真正在 JNI 上工作

转载 作者:行者123 更新时间:2023-12-02 11:38:46 24 4
gpt4 key购买 nike

尝试实现其中描述的方法(请参阅评论): Is it possible to use sun.misc.Unsafe to call C functions without JNI?

但无法调用我的 JavaCritical_ 方法。

这是JNI部分

JNIEXPORT void JNICALL JavaCritical_blas_BLAS_a(jint, jdouble *na) {
printf("!v!\n");
}

JNIEXPORT void JNICALL Java_blas_BLAS_a(JNIEnv *env, jclass, jdoubleArray a) {
}

这是 Java:

public class BLAS {
public static native void a(double[] a);
}

如果我使用 -XX:+TieredCompilation -XX:+PrintCompilation 运行我的程序,我会得到这个

   3475 1488     n 0       blas.BLAS::a (native)   (static)

和“!v!”未打印。据我了解,输出中的“n”意味着 JVM 使用 JNI 的 Java_xx 方法的包装器,而不是 CriticalJava 方法。

那么有人可以建议我做错了什么吗?顺便说一句,我在 x64 位 Windows 10 下的 JVM v1.8.0_152 x86 模式下运行它。

最佳答案

呃。没关系。我可以通过引入 .def 文件来使其工作。

确实有一个bug: https://bugs.openjdk.java.net/browse/JDK-8167408仍然存在。

有趣的是:您需要将 lib 中的所有 JNI 方法移至 .def 文件中,因为如果您混合修饰和未修饰的名称,则 JavaCritical 可能不会被选取。

而且这个东西确实适用于像 dgemm 这样的复杂签名方法,这很酷。

关于java - 如何让 JavaCritical 真正在 JNI 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48730135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com