【问题标题】:Are all the "Magic" methods on the JVM marked as Native?JVM 上的所有“Magic”方法是否都标记为 Native?
【发布时间】:2012-11-06 05:24:46
【问题描述】:

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

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

反过来是真的吗?是所有魔术方法native,还是有一些魔术方法显然是在纯 Java 中实现的,但在一些 JVM 特殊情况下提供了一些额外的帮助?

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

【问题讨论】:

    标签: java jvm java-native-interface native bytecode


    【解决方案1】:

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

    查看 Intrinsics 下的 here,了解一些详细信息以及如何确定在 JVM 上内置了哪些方法。我不确定注入字节码是否会关闭 intrisification,但有一个 DisableIntrinsic XX 选项可用于禁用选定的内在函数。

    【讨论】:

    • 你有链接吗?谷歌搜索“JVM 内在方法”没有给我任何有用的结果
    • 我用链接更新了我的帖子。您必须检查源以获得最新的方法列表,但这相对容易。
    【解决方案2】:

    你可能会发现AspectJ已经处理了很多细节。在进行手动字节码操作之前,我会先看看它。

    【讨论】:

    • 我已经看过了。它不符合我的要求,即资源核算和内存和 CPU 使用限制。这是一个不寻常的项目,而不是你的标准切入点!
    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多