У меня очень длинная строка с шаблоном </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
Независимо от того, в каком порядке я их поменяю, цифры всегда будут примерно одинаковыми ... Что здесь за дело?
Из FAQ сайта java.sun.com:
Использование System.nanoTime () между различными точками в коде для выполнения измерений прошедшего времени всегда должно быть точным.
Также:
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()