Java 是否使用 AES-NI(如果可用)?

Min*_*ock 3 java cryptography aes instruction-set aes-ni

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

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

nto*_*rnl 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")                      \
Run Code Online (Sandbox Code Playgroud)

-XX:+UseAES -XX:+UseAESIntrinsics您可以通过将选项传递给虚拟机来启用该功能。

  • @owlstead 我刚刚使用 `-XX:+PrintFlagsFinal` 进行了测试,它确实默认启用。这些标志可能在代码中的其他地方被修改,覆盖此处初始化的值。不过,这个问题绝对是一个骗局。 (2认同)