0

为什么加密的第一次调用需要第二次调用的一百次

byte[] key = //... secret sequence of bytes
byte[] dataToSend = ...

这是我的加密方法:

public static byte[] enc(byte data[], byte key[]
{
Cipher c = Cipher.getInstance("AES");
SecretKeySpec k =
  new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal(dataToSend);
return encryptedData;
}

这是测试代码

byte [] key="1111111111111111".toByteArray();
byte [] data=new byte [32];
for(int i=0;i<1000;i++)
{
long x=System.nanoTime();
enc(data,key);
System.out.println(System.nanoTime()-x);

}

第一个值将类似于 20300,然后另一个值将下降到 50、35、42 ..etc 如果需要加载它的东西,我可以在启动应用程序之前执行此操作。我正在研究网络协议,需要用另一个做基准测试。

4

1 回答 1

2

第一个值将类似于 20300,然后另一个值将下降到 50 , 35 , 42

在进行基准测试时,您需要考虑在后台发生的执行环境的一些影响,例如

  • 缓存效果(在 CPU 级别和运行时库级别)
  • 预热效果——特别是对于 Java,JIT 编译器不一定会在第一次执行时将所有字节码编译为本机代码,而只有在多次执行相同代码时才会如此。

通常,您需要在开始基准测试之前多次执行您的代码,以使这些影响不会影响实际的测量结果。

也可以看看

于 2013-06-14T07:23:29.210 回答