Вопрос
Я недавно начал возвращаться в Java и никогда не имел возможности использовать try-with-resources
. На первый взгляд это выглядит великолепно, поскольку он может сократить код, но под капотом это более или менее дорогостоящая операция, чем традиционная try-catch
? Я знаю, что try-catch
уже является дорогостоящей операцией, поэтому мое любопытство.
Я дал оба типа простой тест и не заметил большой разницы:
Примеры тестов
Тест с ресурсами
long startTime = System.currentTimeMillis();
ArrayList<String> list = null;
try (Scanner sc = new Scanner(new File("file.txt"))) {
list = new ArrayList();
while (sc.hasNext()) {
list.add(sc.next());
}
} catch (Exception ex) {
System.err.println("Error: " + ex.getMessage());
} finally {
long endTime = System.currentTimeMillis();
System.out.println("The program completed in " + (endTime - startTime) + " ms");
}
Традиционный пробный тест
long startTime = System.currentTimeMillis();
ArrayList<String> list = null;
Scanner sc = null;
try {
sc = new Scanner(new File("file.txt"));
list = new ArrayList();
while (sc.hasNext()) {
list.add(sc.next());
}
} catch (Exception ex) {
System.err.println("Error: " + ex.getMessage());
} finally {
sc.close();
long endTime = System.currentTimeMillis();
System.out.println("The program completed in " + (endTime - startTime) + " ms");
}
Результаты
Оба привели к времени 15-16 мс - никакой реальной заметной разницы вообще. Но, по общему признанию, это очень маленький тестовый пример.
Мой вопрос снова: под капотом try-with-resources
более или менее дорогим, чем традиционный try-catch
?