Генерируются ли следы стека при возникновении исключения Java? - PullRequest
8 голосов
/ 16 ноября 2010

Предполагается, что мы не вызываем метод .printstacktrace - просто бросаем и ловим.

Мы рассматриваем это для некоторых узких мест производительности.

Ответы [ 5 ]

14 голосов
/ 16 ноября 2010

Нет, трассировки стека генерируются при создании объекта исключения, а не при его создании. Конструкторы Throwable () вызывают fillInStackTrace (). (По крайней мере в Sun / Oracle JDK 6 для Windows.)

8 голосов
/ 16 ноября 2010

Stacktrace фиксируется при создании исключения.

Если вы действительно не заботитесь о трассировке стека, вы можете создать исключение один раз и выдать его несколько раз, но это выглядит как хак и может сбить с толку.

4 голосов
/ 16 ноября 2010

Throwable объект захватывает текущий стек (используя собственный код), если он будет напечатан или нет.Вот почему исключения не должны (ab) использоваться для потока управления.

2 голосов
/ 16 ноября 2010

не создается лениво, когда вызывается метод printStackTrace ()

Нил Гафтер (бывший инженер Sun в команде, занимающейся сборкой Java) упомянул исключительную производительность здесь :

Самая дорогая часть исключения обработка далеко захватывает стек трассировка при создании исключения

Также см. этот вопрос .

0 голосов
/ 08 ноября 2018

FYI.Вы можете перегрузить fillInStackTrace, чтобы избежать снижения производительности.Мы делаем это в твиттере, когда хотим за некоторыми исключениями, когда мы не заботимся о трассировке стека.

play framework также делает это в строке play 1.3.x.

Также вы можете установить точку остановаЗаполните InStackTrace, чтобы увидеть, как это делается на этапе строительства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...