StackWalkerAPI 在程序执行期间提供堆栈跟踪中的信息流。此 API 需要虚拟机来捕获整个堆栈的快照并返回用于过滤目的的元素数组。我们需要使用 walk() 方法来跳过、删除和限制堆栈帧。我们还可以使用 filter() 方法按类过滤堆栈帧以获取第一个匹配帧以及所有匹配帧。
在下面的示例中,我们可以使用 StackWalker API 来过滤堆栈帧。
import java.lang.StackWalker.StackFrame; import java.util.*; import java.util.stream.*; public class StackWalkerFilterTest { public static void main(String args[]) { final <strong>List<Class></strong> filterClasses = new ArrayList<>(); filterClasses.add(StackWalkerFilterTest.class); System.out.println("--- filter Frame by Class >> get first matching frame ---"); <strong>Optional<StackFrame></strong> frameByClass = findFrameByClass(filterClasses); System.out.println(frameByClass.toString()); System.out.println("--- filter Frame by Class >> get all matching frames ---"); <strong>List<StackFrame></strong> framesByClass = findAllFramesByClass(filterClasses); System.out.println(framesByClass); } private static Optional<StackFrame> findFrameByClass(List<Class> filterClasses) { return <strong>StackWalker.getInstance</strong>(StackWalker.Option.<strong>RETAIN_CLASS_REFERENCE</strong>) .<strong>walk</strong>(s -> s.<strong>filter</strong>(f -> filterClasses.contains(f.getDeclaringClass())).<strong>findFirst()</strong>); } private static List<StackFrame> findAllFramesByClass(List<Class> filterClasses) { return StackWalker.getInstance(StackWalker.Option.<strong>RETAIN_CLASS_REFERENCE</strong>).<strong>walk</strong>( s -> s.<strong>filter</strong>(f -> filterClasses.contains(f.getDeclaringClass())).<strong>collect</strong>(Collectors.toList())); } }
<strong>--- filter Frame by Class >> get first matching frame --- Optional[StackWalkerTest.findFrameByClass(StackWalkerTest.java:20)] --- filter Frame by Class >> get all matching frames --- [StackWalkerTest.findAllFramesByClass(StackWalkerTest.java:23), StackWalkerTest2.main(StackWalkerTest.java:15)]</strong>
以上就是如何在Java 9中使用StackWalker API过滤堆栈帧?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号