Лучший способ – использовать OpenJDK JMH фреймворк для проведения тестового тестирования, поскольку он автоматически позаботится о проблемах с прогревом JVM, см. Этот пример – Учебник по тестированию Java JMH
Простой код Java для проверки производительности следующих методов циклирования:
- В то время как Цикл
- Для цикла
- Цикл итератора
В Java просто сравните время окончания и время начала, чтобы получить истекшее время функции.
long startTime = new Date().getTime(); // call something else long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("Elapsed time in milliseconds: " + difference);
В то время как vs Для итератора vs
Код Java для зацикливания Списка
, содержащего 1, 5, 10 и 15 миллионов записей.
package com.mkyong.benchmark.bk; import java.util.Arrays; import java.util.Date; import java.util.Iterator; import java.util.List; public class LoopSimpleTest { private static ListDATA_FOR_TESTING = Arrays.asList(createArray()); public static void main(String[] argv) { LoopSimpleTest obj = new LoopSimpleTest(); obj.loopIterator(); obj.loopFor(); obj.loopWhile(); } public void loopFor() { System.out.println("\n--------- For Loop -------\n"); long startTime = new Date().getTime(); for (int i = 0; i < DATA_FOR_TESTING.size(); i++) { String s = DATA_FOR_TESTING.get(i); } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("For - Elapsed time in milliseconds: " + difference); } public void loopWhile() { System.out.println("\n--------- While Loop -------\n"); long startTime = new Date().getTime(); int i = 0; while (i < DATA_FOR_TESTING.size()) { String s = DATA_FOR_TESTING.get(i); i++; } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("While - Elapsed time in milliseconds: " + difference); } public void loopIterator() { System.out.println("\n--------- Iterator Loop -------\n"); long startTime = new Date().getTime(); Iterator iterator = DATA_FOR_TESTING.iterator(); while (iterator.hasNext()) { String next = iterator.next(); } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("Iterator - Elapsed time in milliseconds: " + difference); } private static String[] createArray() { String sArray[] = new String[15_000_000]; for (int i = 0; i < 15_000_000; i++) { sArray[i] = "Array " + i; } return sArray; } }
Выход
D:\test>java -Xms1024m -Xmx1024m ArrayToList --------- Iterator Loop ------- Iterator - Elapsed time in milliseconds: 390 --------- For Loop -------- For - Elapsed time in milliseconds: 234 --------- While Loop ------- While - Elapsed time in milliseconds: 234
Цикл итератора является самым медленным, и разница между циклом for и циклом while не столь существенна.
Рекомендации
Оригинал: “https://mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/”