StackWalker API फ़िल्टरिंग
StackWalker API प्रोग्राम के निष्पादन के दौरान स्टैक ट्रेस में जानकारी की एक स्ट्रीम प्रदान करता है। इस API को पूरे स्टैक का स्नैपशॉट कैप्चर करने के लिए एक वर्चुअल मशीन की आवश्यकता होती है और फ़िल्टरिंग उद्देश्यों के लिए तत्वों की एक सरणी लौटाता है। हमें walk() मेथड का उपयोग करके स्टैक फ्रेम्स को स्किप, ड्रॉप, और लिमिट करने की आवश्यकता है। हम filter() मेथड का उपयोग करके पहली मिलान वाली फ्रेम प्राप्त करने के लिए क्लास द्वारा स्टैक फ्रेम को फ़िल्टर भी कर सकते हैं, और सभी मिलान वाली फ्रेम्स प्राप्त कर सकते हैं।
उदाहरण: क्लास द्वारा फ़िल्टर करना
import java.lang.StackWalker.StackFrame;
import java.util.*;
import java.util.stream.*;
public class StackWalkerFilterTest {
public static void main(String args[]) {
final List<Class> filterClasses = new ArrayList<>();
filterClasses.add(StackWalkerFilterTest.class);
System.out.println("--- filter Frame by Class >> get first matching frame ---");
Optional<StackFrame> frameByClass = findFrameByClass(filterClasses);
System.out.println(frameByClass.toString());
System.out.println("--- filter Frame by Class >> get all matching frames ---");
List<StackFrame> framesByClass = findAllFramesByClass(filterClasses);
System.out.println(framesByClass);
}
private static Optional<StackFrame> findFrameByClass(List<Class> filterClasses) {
return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
.walk(s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).findFirst());
}
private static List<StackFrame> findAllFramesByClass(List<Class> filterClasses) {
return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk(
s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).collect(Collectors.toList()));
}
}
आउटपुट
--- 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)]
StackWalker API स्टैक ट्रेस विश्लेषण के लिए शक्तिशाली स्ट्रीम-आधारित फ़िल्टरिंग प्रदान करता है।