6

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

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

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

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

4

2 回答 2

5

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

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

于 2012-11-06T05:32:27.783 回答
0

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

于 2012-11-06T05:34:27.280 回答