Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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
Java &引用;呼吁;在编辑过程中制作?_Java_Bytecode_Instrumentation_Java Bytecode Asm_Jvm Crash - Fatal编程技术网

Java &引用;呼吁;在编辑过程中制作?

Java &引用;呼吁;在编辑过程中制作?,java,bytecode,instrumentation,java-bytecode-asm,jvm-crash,Java,Bytecode,Instrumentation,Java Bytecode Asm,Jvm Crash,最终的错误是,我在抛出异常之前忘记了一条pop指令。(抛出异常之前的最后一条指令是一个已成功的checkcast,Java不希望其结果仍在堆栈上。) [此外(应该是显而易见的,但我意识到我的话可能会令人困惑):在执行错误代码的过程中没有引发异常(因为代码仍在编译且未执行),但是checkcast之后的下一条指令相当于引发异常。] 但我很好奇,这是如何导致这个错误消息的 # A fatal error has been detected by the Java Runtime Environmen

最终的错误是,我在抛出异常之前忘记了一条
pop
指令。(抛出异常之前的最后一条指令是一个已成功的
checkcast
,Java不希望其结果仍在堆栈上。)

[此外(应该是显而易见的,但我意识到我的话可能会令人困惑):在执行错误代码的过程中没有引发异常(因为代码仍在编译且未执行),但是
checkcast
之后的下一条指令相当于引发异常。]

但我很好奇,这是如何导致这个错误消息的

# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (javaCalls.cpp:64), pid=3560, tid=140207058839296
#  guarantee(!thread->is_Compiler_thread()) failed: cannot make java calls from the compiler
#
# JRE version: Java(TM) SE Runtime Environment (7.0_65-b17) (build 1.7.0_65-b17)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops)

编译器认为它正在尝试进行什么类型的“调用”?

此消息在此处生成:。这可能对你有帮助,我不明白。
checkcast
指令的结果与前面的对象引用相同,只是类型不同,通常更具体。如果它不是您要抛出的可丢弃对象,为什么要抛出它,或者如果它是可丢弃对象,为什么要
pop
它,而且无论如何,如果类型不匹配,验证器不应该拒绝它吗?如果无效代码通过了验证器,无论是bug还是显式关闭,讨论随后的JVM崩溃都没有意义。@Holger这是一系列类型检查的一部分。对于某些类型,我想抛出一个专用的异常(将被捕获并进一步处理),对于其他类型,我想对我刚刚抛出的对象执行一些特定于类型的操作。这仍然不能解释它。如果类型不匹配,
checkcast
后跟
pop
将抛出一个
ClassCastException
。如果您在抛出异常之前直接放置它,那么无论哪种情况,您都是在抛出异常,而不是“对对象执行特定于类型的操作”。而且,
athrow
需要在堆栈上设置一个可丢弃项。在
checkcast
之前推送throwable没有任何意义,但是当您在
checkcast
之后推送throwable时,堆栈上是否有其他项是完全无关的。
cannot make java calls from the compiler