字节码文件详解

java虚拟机的组成

字节码文件 通过  JVM中的类加载器 (ClassLoader) 将文件 加载到内存的 运行时数据区(JVM管理的内存) 这时需要用到jvm的执行引擎(即时编译器 解释器 垃圾回收器)解析字节码文件 将字节码转变为机器指令 让cpu执行 并且这个过程还需要调用其他语言的接口 本地库接口 实现整个程序

字节码文件组成

由基本信息 常量池 字段 方法 属性组成

基本信息

包含 Magic魔数 是指java字节码文件的文件头 CAFEBABE

 访问标识

类、父类、接口索引

主副版本号 指的是编译字节码文件的JDK版本号  主版本号-44就是jdk多少 主版本号52是jdk8

常量池

常量池中的数据都有一个编号 从1开始 可以在字段或者字节码指令中通过编号快速找到对应的数据

字节码指令通过编号引用常量池的过程称之为符号引用

方法

操作数栈  临时存放数据的地方 

局部变量表 存放方法中的局部变量的位置

将 int 类型常量 0 压入操作数栈

将 int 类型值 存入 局部变量 1 , 局部变量 1 就是 第一个局部变量 i   从 操作数栈 中取出一个值 , 存入到 局部变量 1 中 , 对应的 操作数栈 中的 顶部元素出栈 

从 局部变量 1 中装载 int 类型值到 操作数栈 中 ; 将 局部变量 i 的值 0, 装载到操作数栈中 

将 int 类型常量 1 压入操作数栈 

 执行 int 类型的加法 ; 从 操作数栈 中取出 2个值 , 进行相加 , 结果再放回 操作数栈中 

将 int 类型值 存入局部变量 2 , 局部变量 2 就是 第 2个局部变量 j , 该操作就是从 操作数栈 中取出一个值 , 存入到 局部变量 2 中 , 对应的 操作数栈 中的 顶部元素出栈 

返回

字节码常用工具

1. 命令:javap -v 具体字节码文件名称        查看字节码文件内容

2. jclasslib插件  有下载的单机的 也有idea插件

3.运行中的程序 arthas  

指令 dashboard      系统的实时数据面板

dump   将文件系统中的内容复制到一个文件中

jad 反编译代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值