我一直在探索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