gpt4 book ai didi

java - 默认情况下启用 AES-NI 内在函数?

转载 作者:IT老高 更新时间:2023-10-28 21:03:39 30 4
gpt4 key购买 nike

Oracle 在 AES-NI 方面对 Java 8 有这样的看法:

Hardware intrinsics were added to use Advanced Encryption Standard (AES). The UseAES and UseAESIntrinsics flags are available to enable the hardware-based AES intrinsics for Intel hardware. The hardware must be 2010 or newer Westmere hardware. For example, to enable hardware AES, use the following flags:

-XX:+UseAES -XX:+UseAESIntrinsics

To disable hardware AES use the following flags:

-XX:-UseAES -XX:-UseAESIntrinsics

但它并不表示默认情况下是否启用 AES 内在函数(对于支持它的处理器)。所以问题很简单:如果处理器支持 AES-NI,是否使用 AES 内部函数?

额外问题:有什么方法可以测试是否使用了 AES-NI?我想您可以根据性能进行猜测,但这不是最佳或肯定的测试方式。


对于不熟悉 AES-NI 内在函数的读者:它使用 AES-NI 指令集将字节码替换为预编译的机器代码。这是由 JVM 发生的,因此它不会出现在 Java 运行时的 API 或字节码中。

最佳答案

该标志默认为true,如果检测失败将设置为false,因此您可以简单地使用+PrintFlagsFinal来查看是否使用:

我的笔记本电脑没有 AES-NI:

C:\>"C:\Program Files\Java\jdk1.7.0_51\bin\java" -XX:+PrintFlagsFinal -version | find "UseAES"
bool UseAES = false {product}
bool UseAESIntrinsics = false {product}
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

在桌面上相同使用 AES-NI:

C:\>"C:\Program Files\Java\jdk7\bin\java" -XX:+PrintFlagsFinal -version | find "AES"
bool UseAES = true {product}
bool UseAESIntrinsics = true {product}

java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

C:\>"C:\Program Files (x86)\Java\jre7\bin\java" -XX:+PrintFlagsFinal -version | find "AES"
bool UseAES = true {product}
bool UseAESIntrinsics = true {product}

java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing)

因此,它适用于最新 Java 7 的 x64 和 i686 (WOW64)。该功能是在 https://bugs.openjdk.java.net/browse/JDK-7184394 中引入的。并向后移植到 7u40 和 7u45。


重要提示:AES-NI 可能仅在服务器虚拟机上可用。

Oracle 在 a bug report was filed 之后确认了这一点.当他们创建引入它的 Java 8 的功能列表时,这条重要的信息丢失了(后来它也被向后移植到 7)。服务器 VM 可以通过在 javajavaw 命令行上提供 -server 选项来显式选择。

关于java - 默认情况下启用 AES-NI 内在函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23058309/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com