У меня есть очень длинная строка с шаблоном </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()