Есть ли накладные расходы на Java для использования TRY/поймать блок-, в отличии от , если блок (при условии, что приложенный код в противном случае не требует так)?Java, если против попытаться/поймать накладные
Для примера возьмем следующие две простые реализации метода «безопасной обрезки» для строк:
public String tryTrim(String raw) {
try {
return raw.trim();
} catch (Exception e) {
}
return null;
}
public String ifTrim(String raw) {
if (raw == null) {
return null;
}
return raw.trim();
}
Если raw
вход редко null
, есть ли разница в производительности между этими двумя методами ?
Кроме того, это хороший шаблон программирования использовать tryTrim()
подход для упрощения компоновки коды, особенно, когда многие , если блоки проверки редких условий ошибки можно избежать, заключив код в одну попытке/поймать блок ?
Например, это общий случай иметь метод с N parameters
, который использует M <= N
из них вблизи ее начала, быстро и детерминировано неудачу, если какой-либо из таких параметров является «недействительным» (например, нуль или пустая строка) не затрагивая остальную часть кода.
В таких случаях, вместо того, чтобы писать k * M
если блоки (где k
среднее число проверок в параметр, например k = 2
для нулевых или пустых строк), попытки/поймать блок значительно укоротить код и комментарий 1-2 строки могут быть использованы для явного указания «нетрадиционной» логики.
Такой шаблон также ускорит этот метод, особенно если условия ошибки встречаются редко, и это будет сделано без ущерба для безопасности программы (при условии, что условия ошибки являются «нормальными», например, как в методе обработки строк, где нулевые или пустые значения приемлемы, хотя и редко присутствуют).
Правильно, и, как указывает ответ Сергея, есть еще больше накладных расходов, даже если исключение никогда не выбрасывается. Благодаря! – PNS
@PNS Неправда, сергей просто не измеряет, что вы и сергей думаете, что он измеряет (о, мне нравится это предложение, извините, не смог удержаться;)). Накладных расходов нет, если вы не поймаете исключение в блоке catch. Но тогда проверка Nullpointer со стороны JIT, как правило, бесплатна (не делайте явной проверки и вместо этого поймайте исключение hw), так что это просто зависит от того, достаточно ли JIT достаточно для оптимизации в этой ситуации. Не малейшая идея, но в любом случае разница измеряется в тактовых циклах - абсолютно неинтересная. – Voo
Я редактировал этот комментарий, когда вы добавили свою. Итак, вы считали бы, что разница равна нулю, если не исключено исключение (или просто исключение NullPointerException), по крайней мере, в Sun JDK? – PNS