相关疑难解决方法(0)

invokestatic on interface中的静态方法

反汇编一些Java 8代码我发现invokestatic接口中的一些静态方法调用(特别是这个java.util.function.Function.identity())在const pool中使用了InterfaceMethodRef; 这是javap -s -c -v p告诉我的:

    15: invokestatic  #66  // InterfaceMethod java/util/function/Function.identity:()Ljava/util/function/Function;
Run Code Online (Sandbox Code Playgroud)

根据JVM 8规范,这是不可能的,当我在带有Java 7(major version=51)版本的classfile中使用此指令时,它已在此指令上抛出VerifyError.

但是,当我将主要版本更改为时52,它开始像魅力一样工作.请注意,我在Oracle JDK 1.8.0_60上运行.我想知道为什么需要进行这种更改(调用的方法是静态链接的,不是吗?)以及是否记录在任何地方.

java jvm bytecode bytecode-manipulation java-8

5
推荐指数
1
解决办法
735
查看次数

标签 统计

bytecode ×1

bytecode-manipulation ×1

java ×1

java-8 ×1

jvm ×1