我一直在探索jdk9中引入的StackWalking API。我看不出有或没有选项StackWalker.Option.SHOW_HIDDEN_FRAMES
的输出有任何差异。StackWalker.Option SHOW_HIDDEN_FRAMES如何在Java 9中工作
Java虚拟机实现可能隐藏在除了反射框架实施的具体 帧。与此 SHOW_HIDDEN_FRAMES选择A StackWalker将显示所有隐藏帧(包括 反射帧)
谁能请帮助我了解它的确切帧可以在JVM隐藏,除了反射框架?这个选项的确切用途是什么?
这是我的演示代码:
class DemoClass {
public static void a() {
b();
}
static void b() {
c();
}
static void c() {
d();
}
static void d() {
StackWalker sw = StackWalker.getInstance(Set.of(StackWalker.Option.RETAIN_CLASS_REFERENCE, StackWalker.Option.SHOW_HIDDEN_FRAMES));
sw.forEach(System.out::println);
}
}
public class StackWalkerAPI {
public static void main(String[] args) {
try {
Method methodA = Class.forName("DemoClass").getMethod("a");
methodA.invoke(null, (Object[]) null);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(StackWalkerAPI.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
这就是我一直在寻找的东西。在我的程序中,我一直在观察与Option.SHOW_REFLECT_FRAMES&Option.SHOW_HIDDEN_FRAMES相同的输出。我也尝试了其他几个例子,但是找不到使用SHOW_HIDDEN_FRAMES的输出的用例。 您是否知道任何其他用例? – CuriousCoder
@VikramSherigar在回答中已经链接了[github示例代码](https://github.com/namannigam/Jigsaw/blob/master/internal/src/experiment/StackWalkerDemo.java),该回答反映了输出中的这种差异。希望有所帮助。 :) – nullpointer