关于AES-NI,Oracle有关Java 8的说法:
添加了硬件内在函数以使用高级加密标准(AES).UseAES和UseAESIntrinsics标志可用于为Intel硬件启用基于硬件的AES内在函数.硬件必须是2010或更新的Westmere硬件.例如,要启用硬件AES,请使用以下标志:
Run Code Online (Sandbox Code Playgroud)-XX:+UseAES -XX:+UseAESIntrinsics要禁用硬件AES,请使用以下标志:
Run Code Online (Sandbox Code Playgroud)-XX:-UseAES -XX:-UseAESIntrinsics
但它并不表示默认情况下是否启用AES内在函数(对于支持它的处理器).所以问题很简单:如果处理器支持AES-NI,是否使用了AES内在函数?
奖金问题:有没有办法测试是否使用AES-NI?我想你可以根据性能来猜测,但这不是一种最佳或确定的测试方法.
对于不熟悉AES-NI内在函数的读者:它使用AES-NI指令集用预编译的机器代码替换字节代码.这是由JVM发生的,因此它不会出现在Java运行时或字节码的API中.