我想测量生成 DES key 所需的时间,并且我想多次计算它,以便找到平均值。
for (int x = 0; x < 10; x++)
{
long startTime = System.currentTimeMillis();
SecretKey key = KeyGenerator.getInstance("DES").generateKey();
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println("Total Time Taken : " + elapsedTime);
}
但是结果是这样的
Total Time Taken : 251
Total Time Taken : 0
Total Time Taken : 0
Total Time Taken : 0
Total Time Taken : 0
Total Time Taken : 0
Total Time Taken : 0
Total Time Taken : 0
Total Time Taken : 0
Total Time Taken : 0
我尝试通过将关键对象设置为 null 然后调用 System.gc() 来处置它;但没有成功。
解决此问题的任何建议或想法。
最佳答案
增加你的计数。 currentTimeMillis() 分辨率能力受到硬件和操作系统功能的限制。特别是,它实际上无法解析到绝对精确的毫秒数。我发现它在 300 毫秒范围内并不准确。
如果您需要在小间隔内获得更好的精度,您可能还想尝试 System.nanoTime()。再次请注意,此函数的准确性将取决于操作系统。我相信上次尝试这个 Linux 会返回比 Windows 更准确的结果。可能仍然正确,也可能不正确。
关于java - 测量执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4778534/