Трассировка стека загружается через fillInStackTrace
, который является собственным методом, который вызывается в конструкторе Throwable. (Полезный совет: этот метод может быть перегружен как NOP для «исключений сигналов», которым не требуется достаточно дорогой вызов для получения стека).
«Замораживание» трассировки стека уже существует для объекта Throwable, когда он «пойман».
Согласно коду для java.lang.Throwable показывает, что fillInStackTrace
вызывается как первое действие конструктора. Массив StackTraceElement
предназначен для поддержки сериализации (это также можно установить вручную) и в качестве отложенного кэша.
Несмотря на то, что fillInStackTrace
фиксирует трассировку, она не загружена в объекты Java - я полагаю, это позволяет реализации сохранять ее «дешевой» - до тех пор, пока к ней не нужно будет обращаться как к последовательности StackTraceElement
объектов (например, для printStackTrace
, что сделано в коде Java). Код Throwable показывает это лучше, чем я могу объяснить: -)
Счастливого кодирования.