我有一个很长的字符串,最后的模式</value>
是,我正在尝试测试一些函数调用的性能,所以我进行了以下测试以试图找出答案......但我想我可能正在使用 nanoTime不正确?因为无论我如何交换订单,结果都没有意义......
long start, end;
start = System.nanoTime();
StringUtils.indexOf(s, "</value>");
end = System.nanoTime();
System.out.println(end - start);
start = System.nanoTime();
s.indexOf("</value>");
end = System.nanoTime();
System.out.println(end - start);
start = System.nanoTime();
sb.indexOf("</value>");
end = System.nanoTime();
System.out.println(end - start);
我得到以下信息:
163566 // StringUtils
395227 // String
30797 // StringBuilder
165619 // StringBuilder
359639 // String
32850 // StringUtils
无论我交换它们的顺序,数字总是相同的......这里有什么交易?
来自 java.sun.com 网站的常见问题解答:
在代码中的各个点之间使用 System.nanoTime() 来执行经过时间的测量应该总是准确的。
还:
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime ()