try
почти не имеет расходов вообще. Вместо того, чтобы выполнять настройку try
во время выполнения, метаданные кода структурированы во время компиляции, так что, когда выдается исключение, он теперь выполняет относительно дорогую операцию обхода стека и проверки, существуют ли какие-либо try
блоки, которые бы перехватили это. исключение. С точки зрения непрофессионала, он также try
может быть бесплатным. На самом деле это исключение, которое стоит вам - но если вы не выбросите сотни или тысячи исключений, вы все равно не заметите цену.
try
имеет некоторые незначительные расходы, связанные с этим. Java не может оптимизировать код в try
блоке, как в противном случае. Например, Java часто будет переставлять инструкции в методе, чтобы он работал быстрее, но Java также должна гарантировать, что, если выдается исключение, выполнение метода наблюдается так, как если бы его операторы, как написано в исходном коде, выполнялись по порядку до какой-то строки.
Потому что в try
блоке может быть сгенерировано исключение (в любой строке блока try! Некоторые исключения генерируются асинхронно, например, путем вызова stop
потока (что устарело), и даже, кроме того, что OutOfMemoryError может произойти почти где угодно), и все же это может быть перехвачен, и код продолжит выполнение впоследствии в том же методе, более трудно рассуждать об оптимизации, которая может быть сделана, поэтому они менее вероятны. (Кто-то должен был бы запрограммировать компилятор, чтобы он делал это, рассуждал и гарантировал правильность и т. Д. Это было бы большой болью для чего-то, что должно было быть «исключительным») Но опять же, на практике вы не заметите таких вещей.