JVM上的所有"Magic"方法都标记为Native吗?

Li *_*oyi 6 java java-native-interface jvm bytecode native

"魔术"是指具有语义的方法,这些语法不是用纯Java表达的.

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

反之亦然吗?是所有神奇的方法native,还是有些神奇的方法显然是用纯Java实现的,但是有一些JVM特殊外壳的额外帮助?

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

Bee*_*ope 5

不幸的是,在本机方法之外存在"神奇"方法.看看内部方法 - 这些方法是JIT已知的,它在编译方法时使用手动实现,并包括大量调用的方法,如String.indexOf,Integer.numberOfLeadingZeros等.

在Intrinsics下查看这里的一些细节以及如何确定哪些方法在JVM上进行了内部化.我不确定注入字节码是否会关闭内部化,但是有一个DisableIntrinsic XX选项可用于禁用选定的内在函数.