我正在尝试测量不同加密算法的速度。我想我会从记录当前时间(纳米或毫)开始,然后运行所需的操作,一旦完成,抓住时间并进行比较。
这一切都适用于一次迭代,但是一旦我尝试添加一个循环来自动测试多种算法,这些数字就不会加起来。
public static void main(String[] args) throws Exception {
Map<String, int[]> algorKey = new HashMap<String, int[]>() {
{
put("AES", new int[] { 128 });
put("DES", new int[] { 56 });
}
};
Iterator it = algorKey.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
String algorithm = (String) pairs.getKey();
int[] keyLengths = (int[]) pairs.getValue();
for (int i = 0; i < keyLengths.length; i++) {
int keySize = keyLengths[i];
Long startT = System.nanoTime();
System.out.println(startT);
// Generate key
KeyGenerator kgen = KeyGenerator.getInstance(algorithm);
kgen.init(keySize);
SecretKey key = kgen.generateKey();
Long endT = System.nanoTime();
System.out.println(endT);
System.out.print("Algorithm: " + algorithm + "\nKey Size: "
+ keySize + "\nTime to Generate: " + (endT - startT)
/ 1000000 + "ms\n\n");
}
}
}
结果如下,第一个结果是正确的(我分别测试了两种算法),但第二个结果太小了。
11223817758736
11224385930995
Algorithm: DES
Key Size: 56
Time to Generate: 568ms
11224386324864
11224401644040
Algorithm: AES
Key Size: 128
Time to Generate: 15ms
(我使用片段来保持结果的格式)
我不确定为什么随后的结果发生得如此之快,或者为什么时间没有按应有的方式计算或其他什么。是否有可能正在缓存数据以加快该过程?
我添加了更多循环,并且每次后续迭代都比上一次小。
非常感谢