如何禁用JIT编译器的Intrinsics使用?

9

我正在对JVM进行性能测试,并且想要衡量内在函数的使用对性能的影响。

我希望在不进入解释模式的情况下禁用某些方法中JIT对内在函数的使用。是否有一种方法可以做到这一点?谢谢

1个回答

10
使用
java -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_<method_name>[,...]

例如。
java -XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_equals,_hashCode

如@apangin所指出的,你可以先使用-XX:+PrintIntrinsics查看在你的测试中哪些方法实际上已经内部化并禁用它们。


3
构建一个自定义的HotSpot版本,使得Compile::make_vm_intrinsic总是返回NULL,从而一次性禁用所有内置函数可能会更容易实现。 - apangin
5
我认为有一个简单的解决方案:首先使用-XX:+PrintIntrinsics命令打印所有已编译的内部函数,然后使用-XX:DisableIntrinsic=命令禁用它们。 - apangin
5
顺便说一下,我已经创建了一个包含所有JVM内置函数的表格。 - apangin
3
那些是 JDK 7u80 内部函数。现在有JDK 8u45内部函数 - apangin
2
@Bionix1441 很遗憾,标准JVM中没有这样的开关。因此,您必须要么打补丁JVM,要么逐个禁用它们。 - apangin
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接