我正在学习ASM库来生成字节码。在某些时候我犯了一些错误的局部变量类型,并得到一个错误:
@media not screen and (max-height: 800px)
问题并不难找到并修复但我很好奇这个堆栈图表是什么东西?
答案 0 :(得分:10)
StackMapTable
是使用Java 6或更高版本编译的类中的属性。它在verification by type checking的过程中由JVM使用。
基本上,堆栈映射帧定义了方法在执行期间的预期类型的局部变量和操作数堆栈(即帧的状态)。在运行期间,如果预期和实际类型不兼容,JVM会抛出VerifyError
。
为节省空间,并非每条指令都有相应的帧。该表仅定义潜在跳转目标或异常处理程序的帧。其他框架可以从这些框架中轻松推断出来。您可以在上面的表中看到,只为某些字节码偏移定义了帧。