什么是jvm字节码中的stackmap表?

时间:2016-05-18 20:02:27

标签: java bytecode

我正在学习ASM库来生成字节码。在某些时候我犯了一些错误的局部变量类型,并得到一个错误:

 @media not screen and (max-height: 800px)

问题并不难找到并修复但我很好奇这个堆栈图表是什么东西?

1 个答案:

答案 0 :(得分:10)

StackMapTable是使用Java 6或更高版本编译的类中的属性。它在verification by type checking的过程中由JVM使用。

基本上,堆栈映射帧定义了方法在执行期间的预期类型的​​局部变量和操作数堆栈(即帧的状态)。在运行期间,如果预期和实际类型不兼容,JVM会抛出VerifyError

为节省空间,并非每条指令都有相应的帧。该表仅定义潜在跳转目标或异常处理程序的帧。其他框架可以从这些框架中轻松推断出来。您可以在上面的表中看到,只为某些字节码偏移定义了帧。