StackWalker API là tính năng mới trong Java 9, cải thiện hiệu suất của stack trace element tiền nhiệm. Nó cũng cung cấp cách lọc các stack element trong trường hợp ngoại lệ (exception) hoặc để hiểu hành vi ứng dụng. Trong Java 9, cách truy cập stack trace rất hạn chế và cung cấp toàn bộ thông tin stack cùng lúc.
Trong ví dụ dưới đây, chúng ta in tất 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 - In tất cả thuộc tính trong 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("[Tên lớp] %s%n", test.getClassName());
System.out.printf("[Lớp khai báo] %s%n", test.getDeclaringClass());
System.out.printf("[Tên file] %s%n", test.getFileName());
System.out.printf("[Tên phương thức] %s%n", test.getMethodName());
System.out.printf("[Là Native] %b%n", test.isNativeMethod());
System.out.printf("[Số dòng] %d%n", test.getLineNumber());
});
}
}
Kết quả
Java 9 Stack Walker API - In tất cả thuộc tính trong stack frame
[Bytecode Index] 21
[Tên lớp] AllAttributesTest
[Lớp khai báo] class AllAttributesTest
[Tên file] AllAttributesTest.java
[Tên phương thức] main
[Là Native] false
[Số dòng] 10