StackMapTable属性说明

 

(1)StackMapTable属性的说明 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4

(2)StackMapTable属性的作用及理解 https://blog.csdn.net/lijingyao8206/article/details/46715405

(3)Java Eye http://hllvm.group.iteye.com/group/topic/26545

(4)ppt http://www.nimret.org/seajug/past/2014/nov/stack-map-frames.pdf

 

StackMapTable的结构定义如下:

StackMapTable_attribute {  
    u2              attribute_name_index;  
    u4              attribute_length;  
    u2              number_of_entries;  
    stack_map_frame entries[number_of_entries];  
}  

(1)attribute_name_index:对应的是常量池表的一个有效索引。也即CONSTANT_Utf8_info结构中表示“StackMapTable”的索引。

(2)attribute_length:标识当前属性的长度(排除前六个字节)

(3)number_of_entries:表示entries表的成员数量。entries表中的所有成员都是一个stack_map_frame结构。

(4)entries[]:entries表中的每一项都表示本方法的一个stack map frame,并且表中每一项都是有序的。 

 

stack map frame specifies (either explicitly or implicitly) the bytecode offset at which it applies, and the verification types of local variables and operand stack entries for that offset.  

 

栈帧的结构如下:

  

Tags in the range [128-246] are reserved for future use.  

 

 

关于stack map frame的几点:

(1)Every basic block should start with a stack map frame.

(2)Every instruction immediately following an unconditional branch (it's a start of a basic block) should have a stack map frame.

(3)The algorithm to create the stack map frame by ASM. Section 3.5 of ASM doc

1、解释an unconditional branch:

在java的控制执行流程中,条件控制分支包括if-else、while、do-while、for,而无条件分支控制包括return、break和continue。

在java中有多个关键词表示无条件分支,它们只是表示这个分支无需任何测试即可发生。这些关键字包括return、break和continue和一种与其他语言中的goto类似的跳转到标号语句的方式。

 

2、解释basic block 基本块

一个“基本块”(basic block)就是一个方法中的代码最长的直线型一段段代码序列。“直线型”也就是说代码序列中除了末尾之外不能有控制流(跳转)指令。 
一个基本块的开头可以是方法的开头,也可以是某条跳转指令的跳转目标; 
一个基本块的结尾可以是方法的末尾,也可以是某条跳转指令(Java中就是goto、if*系列等;invoke*系列的方法调用指令不算在跳转指令中)。

 

转载于:https://www.cnblogs.com/extjs4/p/9049599.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值