JVM Java字节码方法表与属性
方法表
1、methods_count
method_info,前三个字段和field_info一样
2、方法的属性结构
方法中的每个属性都是一个attribut_info结构
JVM定义了部分attribute,但是编译器自己也可以实现自己的attribute写入class文件里,供运行时使用。
不同的attribute通过attribute_name_index来区分。
JVM规范预定义的attribut
3、Code结构
Code attribute 的作用是保存该方法的结构,如所对应的字节码
attribute_length表示attribute所包含的字节数,不包含attribute_name_index和attribute_length字段
max_stack表示这个方法运行的任何时刻所能到达的操作数栈的最大深度。
max_locals 表示方法执行期间创建的局部变量的数目,包含用来表示传入的参数的局部变量。
code_length表示该方法所包含的字节码的字节数以及具体的指令吗
具体字节码即时该方法被调用时,虚拟机执行的字节码
exception_table,这里存放的是处理异常的信息
每个exception_table表项由start_pc, end_pc, handler_pc, catch_type组成
start_pc 和end_pc表示在code数组中的从start_pc到end_pc处(包含start_pc,不包含end_pc)的指令抛出的异常会由这个表项来处理。
handler_pc表示处理异常的代码的开始处。
catch_type表示会被处理的异常类型,它指向常量池里的一个异常类。当catch_type为0时,表示处理所有的异常
附加属性
LineNumberTable: 这个属性用来表示code数组中的字节码和Java代码行数之间的关系。这个属性可以用来在调试的时候定位代码执行的行数。
LineNumberTable的结构
字节码查看工具
jclasslib
https://github.com/ingokegel/jclasslib
Idea上安装jclasslib插件
插件安装好后,view里会多出两项
最新文章
- css的padding
- 统计和分析系统性能【IO CPU 内存】的工具集合
- [Android Pro] Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
- Bulk Insert的用法 .
- 几款国产开源的Windows界面库
- ORA-01078, LRM-00123错误处理
- Why Does Everyone Else Appear to Be Succeeding?
- cookieless domain
- HDU 1171 Big Event in HDU (多重背包)
- 【京东详情页】——原生js爬坑之放大镜
- 组合 Lucas定理
- 网络基础Cisco路由交换三
- Linux Swap交换分区探讨
- android踩坑日记1
- ScrollView嵌套ListView、GridView,进入页面显示的位置并不是在最顶部,而是在中间部分问题
- 清除微信小程序的缓存
- Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机
- Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream
- HTML+CSS基础课程
- Objective-C 入门笔记
热门文章
- DELL R730 做raid10
- centos6/7添加系统服务
- 简单介绍 Java 中的注解 (Annotation)
- 个性化排序算法实践(四)——GBDT+LR
- Spring-05 -AOP [面向切面编程] -Schema-based 实现aop的步骤
- 评估预测函数(1)---算法不能达到我们的目的时,Deciding what to try next
- c++中如何使用memset()
- 【贪心】Allowance POJ 3040
- Tensorflow细节-P196-输入数据处理框架
- Spring asm