我所说的“魔术”指的是那些具有语义的方法,这些语义不是用纯Java表达的。
我知道所有的native方法都很神奇,因为它们的实现是由底层运行时提供的,而不是由Java字节码提供的。
反之亦然?所有的魔术方法都是native吗,还是有一些魔术方法显然是用纯Java实现的,但需要一些特殊的JVM用例提供额外的帮助?
用例是,我想通过检测其字节码来修改Java的语义。所有这些神奇的方法都是特殊情况,我必须以某种方式处理它们。native方法都很明显,但我想知道是否有任何未标记的魔术方法需要我注意和特殊情况。
发布于 2012-11-06 13:32:28
不幸的是,在本机方法之外还有一些“神奇”的方法。看看内部方法-这些方法是JIT所熟知的,在编译方法时使用手写实现,包括大量调用的方法,如String.indexOf、Integer.numberOfLeadingZeros等。
看一下here,在Intrinsics下,了解一些细节,以及如何确定在您的JVM上内嵌了哪些方法。我不确定注入字节码是否会关闭内部化,但是有一个DisableIntrinsic XX选项可以用来禁用选定的内部函数。
发布于 2012-11-06 13:34:27
您可能会发现很多细节已经在AspectJ中处理过了。在进行手动字节码操作之前,我会先看一下它。
https://stackoverflow.com/questions/13244898
复制相似问题