我刚刚了解到指令集扩展AES-NI。如果可以提高性能,Java的JIT编译器是否会将应用程序编译为使用AES-NI?
如果是,那么当不确定是否会使用AES时(例如使用TLS时),它是否也会这样做?
我刚刚了解到指令集扩展AES-NI。如果可以提高性能,Java的JIT编译器是否会将应用程序编译为使用AES-NI?
如果是,那么当不确定是否会使用AES时(例如使用TLS时),它是否也会这样做?
Java 8和7u40及更高版本支持内置SunJCE提供程序的x86 AES指令集,但该功能默认未启用(实际上已启用)。
在globals.hpp中搜索"AES":
product(bool, UseAES, false, \
"Control whether AES instructions can be used on x86/x64") \
...
product(bool, UseAESIntrinsics, false, \
"Use intrinsics for AES versions of crypto") \
-XX:+UseAES -XX:+UseAESIntrinsics
选项来启用此功能。-XX:+PrintFlagsFinal
进行了测试,它确实是默认启用的。这些标志很可能在代码的其他地方被修改,覆盖了此处初始化的值。尽管如此,这个问题显然是重复的。 - ntoskrnl