在 HotSpot 虚拟机中,所有被 @HotSpotIntrinsicCandidate 注解标注的方法都是 HotSpot intrinsic。对这些方法的调用,会被 HotSpot 虚拟机替换成高效的指令序列。而原本的方法实现则会被忽略掉。

    HotSpot中,intrinsic分为两种实现方式。
    1、独立的桩程序。既可以被解释执行器利用,直接替换对原方法的调用;也可以被即时编译器利用,把代表对原方法调用的IR节点,替换为对这些桩程序的调用的IR节点。

    2、特殊的编译器IR节点。仅能够被即时编译器利用。
    在编译过程中,即时编译器会将对原方法的调用的 IR 节点,替换成特殊的 IR 节点,并参与接下来的优化过程。最终,即时编译器的后端将根据这些特殊的 IR 节点,生成指定的 CPU 指令。替换过程是在方法内联时进行的。

    不少被标记为 intrinsic 的方法都是 native 方法。原本对这些 native 方法的调用需要经过 JNI(Java Native Interface),其性能开销十分巨大。但是,经过即时编译器的 intrinsic 优化之后,这部分 JNI 开销便直接消失不见,并且最终的结果也十分高效。