Ответ 1
Время, пройденное в любом цикле, будет зависеть от ввода/вывода (то есть печати на экране), что сильно варьируется. Я не думаю, что вы можете многому научиться из своего примера.
Я столкнулся с простой java-программой с двумя циклами. Вопрос состоял в том, будут ли эти циклы для выполнения одинакового времени выполнять или сначала будут выполняться быстрее второго.
Ниже представлены программы:
public static void main(String[] args) {
Long t1 = System.currentTimeMillis();
for (int i = 999; i > 0; i--) {
System.out.println(i);
}
t1 = System.currentTimeMillis() - t1;
Long t2 = System.currentTimeMillis();
for (int j = 0; j < 999; j++) {
System.out.println(j);
}
t2 = System.currentTimeMillis() - t2;
System.out.println("for loop1 time : " + t1);
System.out.println("for loop2 time : " + t2);
}
После выполнения этого я обнаружил, что первый цикл цикла занимает больше времени, чем второй. Но после замены места, результат был таким же, что и для цикла, написанного первым, всегда занимает больше времени, чем другое. Я был очень удивлен результатом. Пожалуйста, кто-нибудь скажет мне, как работает программа.
Время, пройденное в любом цикле, будет зависеть от ввода/вывода (то есть печати на экране), что сильно варьируется. Я не думаю, что вы можете многому научиться из своего примера.
Первый цикл будет выделять 1000 строк в памяти, а второй цикл, независимо от того, работает он или нет, может использовать уже предварительно выделенные объекты.
Несмотря на то, что при работе с System.out.println
любое распределение должно быть небрежным в сравнении.
Длинные (и другие примитивные обертки) имеют кеш (смотрите здесь для класса LongCache) для значений -128... 127. Он заполняется при первом запуске цикла.
Я думаю, если вы собираетесь сделать настоящий тест, вы должны запустить их в разных потоках и использовать более высокое значение (не только 1000), ни IO (вывод печати во время выполнения), а не выполнять их последовательно, но один за другим. У меня есть опыт, выполняющий один и тот же код, несколько раз может занять другое время выполнения. и, на мой взгляд, оба теста не будут отличаться.