API StackWalker là một tính năng mới trong Java 9, và nó cải thiện hiệu suất của phiên bản tiền nhiệm phần tử theo dõi ngăn xếp. Nó cũng có thể cung cấp một cách để lọc các phần tử ngăn xếp trong trường hợp có ngoại lệ hoặc để hiểu ứng dụng hành vi . Trong Java 9, cách truy cập theo dõi ngăn xếp rất hạn chế và cung cấp toàn bộ thông tin ngăn xếp cùng một lúc.
Trong ví dụ dưới đây, chúng ta cần in tất cả các thuộc tính trong Stack Frame
Ví dụ
import java.lang.StackWalker.StackFrame; import java.util.*; import java.util.stream.*; import java.lang.StackWalker.Option; public class AllAttributesTest { public static void main(String args[]) { System.out.println("Java 9 Stack Walker API - Print all attributes in stack frame"); StackWalker newWalker = StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE); List<StackWalker.StackFrame> stackFrames = newWalker.walk(frames -> frames.limit(1).collect(Collectors.toList())); stackFrames.forEach(test-> { System.out.printf("[Bytecode Index] %d%n", test.getByteCodeIndex()); System.out.printf("[Class Name] %s%n", test.getClassName()); System.out.printf("[Declaring Class] %s%n", test.getDeclaringClass()); System.out.printf("[File Name] %s%n", test.getFileName()); System.out.printf("[Method Name] %s%n", test.getMethodName()); System.out.printf("[Is Native] %b%n", test.isNativeMethod()); System.out.printf("[Line Number] %d%n", test.getLineNumber()); }); } }
Đầu ra
Java 9 Stack Walker API - Print all attributes in stack frame [Bytecode Index] 21 [Class Name] AllAttributesTest [Declaring Class] class AllAttributesTest [File Name] AllAttributesTest.java [Method Name] main [Is Native] false [Line Number] 10