Inspección diferida de la pila con StackWalker
Inspecciona los frames de pila de forma diferida con StackWalker en lugar de materializar una traza de pila completa.
Comparación de Código
✕ Materialized stack trace
StackTraceElement caller = Thread.currentThread()
.getStackTrace()[2];
String callerClass = caller.getClassName();
✓ Java 9+
String callerClass = StackWalker.getInstance()
.walk(frames -> frames.skip(1)
.findFirst()
.orElseThrow()
.getClassName());
¿Ves un problema con este código? Cuéntanos.
Por qué gana la forma moderna
Recorrido diferido
Visita únicamente los frames que necesita la operación.
Integración con streams
El filtrado y la selección usan operaciones estándar de streams.
Configurable
Las opciones admiten referencias de clase y frames ocultos o reflectivos.
Enfoque Antiguo
Thread.getStackTrace()
Enfoque Moderno
StackWalker
Desde JDK
9
Dificultad
Intermedio
Soporte JDK
Inspección diferida de la pila con StackWalker
Disponible
Ampliamente disponible desde JDK 9 (septiembre de 2017)
Cómo funciona
StackWalker expone un stream diferido de frames de pila y acceso configurable a referencias de clase conservadas. El código puede detenerse cuando encuentre el frame necesario en lugar de asignar un array con la traza de pila completa.
Documentación Relacionada
Prueba