gpt4 book ai didi

java - JVM 可以内联 native 方法吗?

转载 作者:行者123 更新时间:2023-12-02 22:45:28 25 4
gpt4 key购买 nike

我编写了一个小型静态 JNI 函数,只有 5 条指令长。 JVM 是否可以将此代码内联到频繁调用它的方法主体中,或者它总是在 JIT 方法中生成 call 指令?

例如:

public class SomeClass {
private static native long func();

public void doLoop() {
for(int i = 0; i < 0xFFFFFF; i++) {
func();
}
}

public static void main(String[] args) {
for(int i = 0; i < 0xFFFFFF; i++) {
doLoop();
}
}
}

JVM 是否可以将 func 的代码内联到 doLoop 中,或者将其编译为 call func

最佳答案

不,JVM基本上不能。

原生函数的实现是一个二进制黑盒; JVM 唯一知道的就是入口点地址。

native 代码不受虚拟机管理,无法在 Java 方法的上下文中执行。 JVM 区分 'in_java' 状态的线程和 'in_native' 状态的线程。例如, native 线程不会在 JVM 安全点停止,只是因为 JVM 无法做到这一点。

而且,调用native方法并不是那么简单的操作。 A special procedure需要解决 JNI 调用的所有方面。

关于java - JVM 可以内联 native 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32722471/

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