java - JVM上的 "Magic"方法是否都标记为Native?

标签 java jvm java-native-interface native bytecode

我所说的“魔术”是指具有未用纯 Java 表达的语义的方法。

我知道所有 native 方法都是神奇的,因为它们的实现是由底层运行时提供的,而不是由 Java 字节码提供的。

反之亦然?所有魔法方法都是 native 吗,或者是否有一些魔法方法显然是用纯 Java 实现的,但有一些 JVM-special-casing 的额外帮助?

用例是我想通过检测其字节码来修改 Java 的语义。所有这些魔术方法都是特殊情况,我将不得不以某种方式处理它们。 native 都是显而易见的,但我想知道是否有任何未标记的魔术方法我必须注意和特殊情况。

最佳答案

不幸的是,在 native 方法之外还有“魔法”方法。看一下内部方法——这些方法是 JIT 已知的,它在编译方法时使用手动实现,并包括大量调用的方法,例如 String.indexOf、Integer.numberOfLeadingZeros。等

看看here ,在 Intrinsics 下,了解一些细节以及如何确定哪些方法在您的 JVM 上被内化。我不确定注入(inject)字节码是否会关闭内部化,但有一个 DisableIntrinsic XX 选项可用于禁用选定的内部函数。

关于java - JVM上的 "Magic"方法是否都标记为Native?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244898/

相关文章:

java - 如何拥有不需要在 Java 中捕获的异常?

java - 如何使用控制台输出来调试 pthread 与 JNI 的交互?

Scala SBT 和 JNI 库

c++ - Android ndk编译SoundTouch Library报错

java - Google Search Appliance 查询请求返回 502

Java计算错误

java - ROWID INTEGER PRIMARY KEY AUTOINCREMENT - 如何插入值?

java - 为什么 JIT 也编译字节码而 Java 既是编译型又是解释型语言?

jvm - 原始包装器实例化是否会导致 JDK 1.6 中的内存分配

java - Java 解释器或任何解释器到底是如何工作的?