java intrinsic,JVM详解之:HotSpot VM中的Intrinsic methods

前面我们提到了内置方法是在编译器实现的。

在Hotspot VM中其实有3中编译器。

第一种就是javac将java源代码编译成为字节码。

在这一层,只有一些math方法和bootstrapping的MethodHandle是在这一层实现的。

第二种就是在JIT的Client Compiler (C1)。

第三种就是在JIT的Server Compiler (C2)。

举一个例子,我们看一下java.lang.System.currentTimeMillis()方法:

@HotSpotIntrinsicCandidatepublic static native long currentTimeMillis();

JDK源码使用了HotSpotIntrinsicCandidate注解。这个注解只是表示该方法可能会被用于Intrinsic,而并不意味着一定使用Intrinsic。

这个方法在Interpreter级别是没有intrinsified。因为这是一个native方法,所以会通过JNI调用底层的C++实现。

而在C1和C2级别,会使用intrinsified, 直接调用os::javaTimeMillis()。

好处就是减少了JNI的使用,提升效率。

好了问题来了,我们可以自己实现intrinsified方法吗?

答案是可以,不过需要修改底层的JVM实现。

这里有两个具体的例子,感兴趣的大家可以自行研究。

C1级别修改(First cut: C1 Class.isInstance intrinsic):

https://gist.github.com/rednaxelafx/2830194

C2级别修改(Example (XS) of adding an intrinsic method to HotSpot C2. Patch against HS20-b12):

https://gist.github.com/rednaxelafx/1986224

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值