在Java中使用nanotime比较方法加快性能
我想比较两个readDataMethod()的速度性能(如果有),如下所示在Java中使用nanotime比较方法加快性能,java,for-loop,while-loop,nanotime,Java,For Loop,While Loop,Nanotime,我想比较两个readDataMethod()的速度性能(如果有),如下所示 private void readDataMethod1(List<Integer> numbers) { final long startTime = System.nanoTime(); for (int i = 0; i < numbers.size(); i++) { numbers.get(i); } final long endTime = S
private void readDataMethod1(List<Integer> numbers) {
final long startTime = System.nanoTime();
for (int i = 0; i < numbers.size(); i++) {
numbers.get(i);
}
final long endTime = System.nanoTime();
System.out.println("method 1 : " + (endTime - startTime));
}
private void readDataMethod2(List<Integer> numbers) {
final long startTime = System.nanoTime();
int i = numbers.size();
while (i-- > 0) {
numbers.get(i);
}
final long endTime = System.nanoTime();
System.out.println("method 2 : " + (endTime - startTime));
}
此测试是否证明readDataMethod2比之前的方法快?在第一个测试中,您正在为每次迭代调用numbers.size()。
尝试将其存储在变量中,然后再次检查。在第一个变量中,每次迭代都调用numbers.size()。 尝试将其存储在变量中,然后再次检查 此测试是否证明readDataMethod2比以前的方法快 你在正确的轨道上,你正在衡量比较绩效,而不是做出假设 然而,在用Java编写微基准测试时,有许多潜在的问题需要注意。我建议你读一读 此测试是否证明readDataMethod2比以前的方法快 你在正确的轨道上,你正在衡量比较绩效,而不是做出假设 然而,在用Java编写微基准测试时,有许多潜在的问题需要注意。我建议你读一读
第二个版本之所以运行得更快,是因为您在每次迭代中都调用numbers.size()。通过存储在一个数字中来替换它将使其与第一个版本几乎相同。第二个版本运行得更快的原因是您在每次迭代中都调用numbers.size()。通过存储在一个数字中来替换它将使它与第一个几乎相同 此测试是否证明readDataMethod2比以前的方法快 正如@aix所说,您走在了正确的轨道上。但是,您的方法有几个具体问题:
- 看起来您并不是在“预热”JVM。因此,可以想象,您的数字可能会因启动效果(JIT编译)而失真,或者没有任何代码经过JIT编译
- 我还认为你的跑步做的工作太少了。一个
纳秒,是500000
秒,这不需要太多的工作。风险在于,应用程序外部的“其他事物”可能会在测量中引入噪声。我会对需要几十秒的跑步更有信心0.0005
- 看起来您并不是在“预热”JVM。因此,可以想象,您的数字可能会因启动效果(JIT编译)而失真,或者没有任何代码经过JIT编译
- 我还认为你的跑步做的工作太少了。一个
纳秒,是500000
秒,这不需要太多的工作。风险在于,应用程序外部的“其他事物”可能会在测量中引入噪声。我会对需要几十秒的跑步更有信心0.0005
Run readDataMethod1 readDataMethod2
1 636331 468876
2 638256 479269
3 637485 515455
4 716786 420756