Java在可用时是否使用AES-NI?

3

我刚刚了解到指令集扩展AES-NI。如果可以提高性能,Java的JIT编译器是否会将应用程序编译为使用AES-NI?

如果是,那么当不确定是否会使用AES时(例如使用TLS时),它是否也会这样做?


2
我认为它并未与JDK捆绑在一起,您需要自行下载和构建 https://software.intel.com/en-us/articles/intel-aes-ni-performance-testing-on-linuxjava-stack#enable-intel-eas-ni-in-oracle-jvm - Leo
@Leo 这是值得回答的答案。 - Kayaman
@Leo 我同意。可惜我不能把评论选为答案 :P - MinecraftShamrock
3
如果你仅仅因为听起来可信就接受答案,那么你会做出不成立的假设。 - Maarten Bodewes
2个回答

5

Java 87u40及更高版本支持内置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选项来启用此功能。

1
你确定吗?在以前的版本上测试显示已经打开了。如果你是正确的,那么Oracle改变了策略。请注意我对“重复”的投票。 - Maarten Bodewes
2
@owlstead 我刚刚用 -XX:+PrintFlagsFinal 进行了测试,它确实是默认启用的。这些标志很可能在代码的其他地方被修改,覆盖了此处初始化的值。尽管如此,这个问题显然是重复的。 - ntoskrnl
我认为它们会在检测到AES-NI后发生变化。请注意,在第一个包含该指令的CPU上,检测可能会失败... - Maarten Bodewes
1
请注意:您需要使用Java服务器VM以启用内在功能。 - Maarten Bodewes

0

2
这适用于某种基于第三方NSS的安全提供程序。SunJCE提供程序也支持AES内部函数。 - ntoskrnl

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