У меня есть этот кусок кода, делающий Range Minimum Query. Когда t = 100000, я и j всегда изменяются в каждой строке ввода, время его выполнения в Java 8u60 составляет около 12 секунд.
for (int a0 = 0; a0 < t; a0++) {
String line = reader.readLine();
String[] ls = line.split(" ");
int i = Integer.parseInt(ls[0]);
int j = Integer.parseInt(ls[1]);
int min = width[i];
for (int k = i + 1; k <= j; k++) {
if (min > width[k]) {
min = width[k];
}
}
writer.write(min + "");
writer.newLine();
}
Когда я извлекаю новый метод для поиска минимального значения, время выполнения в 4 раза быстрее (около 2,5 секунд).
for (int a0 = 0; a0 < t; a0++) {
String line = reader.readLine();
String[] ls = line.split(" ");
int i = Integer.parseInt(ls[0]);
int j = Integer.parseInt(ls[1]);
int min = getMin(i, j);
writer.write(min + "");
writer.newLine();
}
private int getMin(int i, int j) {
int min = width[i];
for (int k = i + 1; k <= j; k++) {
if (min > width[k]) {
min = width[k];
}
}
return min;
}
Я всегда думал, что вызовы методов медленны. Но этот пример показывает обратное. Java 6 также демонстрирует это, но время выполнения намного медленнее в обоих случаях (17 секунд и 10 секунд). Может кто-то дать некоторое представление об этом?