java - java 循环中使用的 nanoTime 和 currentMilliSeconds

标签 java caching encryption nanotime

我正在尝试测量不同加密算法的速度。我想我应该从记录当前时间(纳米或毫)开始,然后运行所需的操作,完成后,获取时间并进行比较。

这一切都在一次迭代中有效,但是一旦我尝试添加一个循环来自动测试多个算法,数字就不会相加。

 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

(我使用代码片段来保持结果的格式)

我不知道为什么后续结果发生得这么快,或者为什么时间没有按应有的计算或其他什么。是否有可能存在数据缓存来加速该过程?

我添加了更多的循环,并且每次后续迭代都比上一次更小。

非常感谢

最佳答案

我确实相信您应该测试算法,在每个循环中使用新的 jvm 打开一个新进程。我认为错误的测量是在第一个循环中加载类和运行时的结果。

也许最好的方法是在不测量时运行循环,然后在设置整个代码和依赖项后进行真正的测量。

关于java - java 循环中使用的 nanoTime 和 currentMilliSeconds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896112/

相关文章:

java - 我将如何使用公共(public)类将数据从一项 Activity 传输到另一项 Activity ?

apache - 如何强制浏览器刷新网页的缓存版本

javascript - 如何验证 "Cache-Control"、 "no-cache, no-store, must-revalidate"

sql - 找不到对称 key '' ,因为它不存在或您没有权限

java - 将 3DESede 与 javax.crypto 的 PKS5 填充一起使用时,密文长度错误

ios - 验证加密数据是否未被篡改

java - 文本在小程序上无法正确显示

java - 使用扫描仪在java中分离html的元素和标签

javascript - jquery 1.11 选项卡禁用缓存不起作用

java - 如何使用 Rational Software Architect 中的 findbugs?