jvm#字节码文件
marshal1-18
以梦为马,不负韶华
展开
-
$2.5、动态代理字节码层面的剖析
动态代理我们都使用过,很多场景下是对被代理类的方法进行增强,那么它反映在字节码中是什么样的呢? 先实现一个动态代理,实现InvocationHandler和代理的接口类如下: public interface Subject { void test(); } 实现的类: public class RealSubject implements Subject { @Ov...原创 2020-01-02 10:40:57 · 255 阅读 · 1 评论 -
$2.4、方法在字节码中的调用形式及重载和复写的区别
方法在字节码中的调用指令,主要分为5种: 1、invokeinterface:执行接口中的方法,该指令是运行时的指令,具体去找实现类对应的方法 2、invokestatic:执行静态方法 3、invokespecial:调用私有方法,父类方法(父类的普通方法、父类构造方法),构造方法调用的指令,是编译时就可以确定的调用关系 4、invokevirual:虚方法,需要在运行时才确定的执行指令...原创 2019-12-30 18:45:53 · 141 阅读 · 0 评论 -
$2.3、我就是反编译器,走进字节码世界
按照我们上篇生成的字节码文件解析与组成部分,现在我们要挨个读取里面的内容,真正走进字节码文件的世界 模数:四个字节(1个字节占8位,其中16进制刚好4位代表,因此2个16进制就是代表1个字节)CAFE BABE,Java之父定义的固定值,没有啥好说的。 版本号:00 00 00 34,代表的版本号就是52,其中次版本号没有,JDK1.8对应的主版本号就是52,JDK1.7就是51,依次递减...原创 2019-12-21 15:02:51 · 125 阅读 · 0 评论 -
$2.1、java字节码规范信息
1、常量池中14种数据类型结构(图表显示11种是因为jdk1.7之后又增加了三种,支持动态扩展有关的常量池信息) 2、字节码文件的整体组成结构 3、java访问属性标记 4、字段信息描述符 5、字段表的访问信息 7、方法表的组成结构 方法的访问权限 8、如果方法中的attribute是code,即代表方法的描述进入code结构中,对应的code结构如下: ...原创 2019-12-21 10:47:12 · 337 阅读 · 0 评论 -
$2.2、java字节码文件的组成与实例详解
java语言号称“一处编译,处处运行”,它能“打出”这样的广告,主要是因为两点:1、它运行在虚拟机环境里,不管哪种操作系统,只要安装了jdk的运行环境就行;2、我们今天的主角-字节码文件,jvm提供了字节码规范,它可以解析字节码文件,因此只要符合字节码的语法,那么在jvm中都是能运行,比如现在的scala,Groovy,Kotlin等都是实现了jvm字节码规范的语言。 首先按照惯例,我们简单写一...原创 2019-12-21 14:57:42 · 230 阅读 · 0 评论