Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选项SHOW_HIDDEN_框架在Java9中如何工作_Java_Java 9 - Fatal编程技术网

选项SHOW_HIDDEN_框架在Java9中如何工作

选项SHOW_HIDDEN_框架在Java9中如何工作,java,java-9,Java,Java 9,我一直在探索jdk9中引入的StackWalking API。无论是否使用StackWalker.option.SHOW\u HIDDEN\u FRAMES,我都看不出输出有什么不同 根据: Java虚拟机实现可能隐藏特定于实现的内容 除了反射帧之外的帧。带着这个的斯塔克沃克 “显示隐藏帧”选项将显示所有隐藏帧(包括 反射框) 有人能帮我理解除了反射帧之外JVM还能隐藏哪些确切的帧吗?这个选项的确切用途是什么 这是我的演示代码: class DemoClass { public sta

我一直在探索jdk9中引入的StackWalking API。无论是否使用
StackWalker.option.SHOW\u HIDDEN\u FRAMES
,我都看不出输出有什么不同

根据:

Java虚拟机实现可能隐藏特定于实现的内容 除了反射帧之外的帧。带着这个的斯塔克沃克 “显示隐藏帧”选项将显示所有隐藏帧(包括 反射框)

有人能帮我理解除了反射帧之外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);
        }

    }
}

不确定不使用Java9是什么意思。在此,使用,详细解释与您类似的代码的输出:

显示此StackWalker遍历的StackFrames中的类对象


显示所有反射帧

请注意这里的语句
java.base/java.lang.reflect.Method.invoke(Method.java:564)
,正如文档中提到的,该选项显示了所有反射帧,包括
Method.invoke(o1,o2)
Constructor.newInstance(o)


显示所有隐藏的帧


查找
内部/实验。StackWalkerDemo$$Lambda$23/1358444045.accept(未知源)
这是一个用于在Lambda上执行操作的帧(特定于实现的帧),可以使用此选项访问。

这是我一直在寻找的。在我的程序中,我观察了Option.SHOW\u REFLECT\u FRAMES和Option.SHOW\u HIDDEN\u FRAMES的相同输出。我也尝试了一些其他的例子,但是找不到使用SHOW_HIDDEN_框架输出不同的用例。你知道其他的用例吗?@VikramSherigar答案中已经有一个链接,反映了输出中的这种差异。希望有帮助。:)
internal/experiment.StackWalkerDemo.lambda$d$0(StackWalkerDemo.java:29)
java.base/java.lang.Iterable.forEach(Iterable.java:75)
internal/experiment.StackWalkerDemo.d(StackWalkerDemo.java:28)
internal/experiment.StackWalkerDemo.c(StackWalkerDemo.java:20)
internal/experiment.StackWalkerDemo.b(StackWalkerDemo.java:16)
internal/experiment.StackWalkerDemo.a(StackWalkerDemo.java:12)
internal/experiment.StackWalkerAPI.main(StackWalkerAPI.java:15) 
internal/experiment.StackWalkerDemo.lambda$d$0(StackWalkerDemo.java:29)
java.base/java.lang.Iterable.forEach(Iterable.java:75)
internal/experiment.StackWalkerDemo.d(StackWalkerDemo.java:28)
internal/experiment.StackWalkerDemo.c(StackWalkerDemo.java:20)
internal/experiment.StackWalkerDemo.b(StackWalkerDemo.java:16)
internal/experiment.StackWalkerDemo.a(StackWalkerDemo.java:12)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.base/java.lang.reflect.Method.invoke(Method.java:564)
internal/experiment.StackWalkerAPI.main(StackWalkerAPI.java:15)
internal/experiment.StackWalkerDemo.lambda$d$0(StackWalkerDemo.java:29)
internal/experiment.StackWalkerDemo$$Lambda$23/1358444045.accept(Unknown Source)
java.base/java.lang.Iterable.forEach(Iterable.java:75)
internal/experiment.StackWalkerDemo.d(StackWalkerDemo.java:28)
internal/experiment.StackWalkerDemo.c(StackWalkerDemo.java:20)
internal/experiment.StackWalkerDemo.b(StackWalkerDemo.java:16)
internal/experiment.StackWalkerDemo.a(StackWalkerDemo.java:12)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.base/java.lang.reflect.Method.invoke(Method.java:564)
internal/experiment.StackWalkerAPI.main(StackWalkerAPI.java:15)