私はjdk9で導入されたStackWalking APIを検討しています。 StackWalker.Option.SHOW_HIDDEN_FRAMES
オプションの有無にかかわらず出力に違いは見られませんでした。 API documentation 1としてStackWalker.Option SHOW_HIDDEN_FRAMESはJava 9でどのように動作するのですか
:
A Java仮想マシンの実装では、反射フレームに加えて、実装固有の フレームを隠すことがあります。この SHOW_HIDDEN_FRAMESオプション付きStackWalkerは、すべての隠された( 反射フレームを含む)のフレーム
は誰も私を理解して助けてくださいが表示されます正確にどのフレーム反射フレームに加えて、JVMの非表示はできますか?このオプションの正確な使い方は何ですか?
これは私のデモコードです:あなたは、Java 9で働いていないの意味でした何
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 sample code](https://github.com/namannigam/Jigsaw/blob/master/internal/src/experiment/StackWalkerDemo.java)があります。希望が役立ちます。 :) – nullpointer