<Java虚拟机原理图解>1.3.class文件中的访问标志.类索引.父类索引.接口索引集合 字节码总体结构: 访问标志(access_flags)能够表示什么? 访问标志(access_flags)紧接着常量池后,占有两个字节,总共16位,如下图所示: 存放的是这个类或者接口的访问标志信息:是否具有某种标准用1标识. 类或者接口(包括内部类,静态内部类)都会单独生成一个class文件. ACC_SUPER标志位:表示这个class是否是类. ACC_INTERFACE标志位:表示这个clas…
JVM高级特性与实践(五):实例探究Class类文件 及 常量池 JVM高级特性与实践(六):Class类文件的结构(访问标志,索引.字段表.方法表.属性表集合) JVM高级特性与实践(七):九大类字节码指令集(实例探究 )…
<Java虚拟机原理图解>1.5. class文件中的方法表集合--method方法在class文件中是怎样组织的 一个类有多个方法,所以方法肯定是一个集合. 目标是: 1,了解方法在字节码中结构,在字节码中的位置. 2,了解方法体会怎样被编译成机器指令 3,开发环境是如何根据字节码产生代码提示功能. 1,方法位置和结构:计数器和方法信息集合 2,方法信息包括那些内容: 这些信息对应的方法信息结构和字段的结构类似: 这些内容包括: 访问标志(access_flags):记录这个方法的作用域.静…
<Java虚拟机原理图解> 1.1.class文件基本组织结构 关于变量的几个叫法: 局部变量/全局变量:很好区分根据所在位置. 类变量:静态的全局变量. 类常量:全局的final修饰的变量 静态常量:static final 的字段 常量:这个有几种说法: ,final 修饰的变量 ,基本类型和字面值(比如变量,方法,类的名字)也被称为常量(一般在字节码) 简单来说:class文件结构是魔数.副版本号.主版本之后,常量池等: magic:魔数,文件类型是字节码的一个数字标志,以便jvm识别.…
JVM 字节码(二)方法表和属性表 上一节中对 ClassFile 的整体进行了五个详细的说明, 本节围绕 ClassFile 最重要的一个内容 - 方法表的 Code 属性展开 ,更多 JVM Methods 规范(Oracle) 一.方法表结构 1.1 方法表结构 方法表的结构如下: method_info { u2 access_flags; u2 name_index; u2 descriptor_index; u2 attributes_count; attribute_info at…
前文地址 https://www.cnblogs.com/tera/p/13336627.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的态度,于是对java动态代理的本质原理做了一些研究,于是便有了这个系列的文章 上一篇文章详细分析了class字节码结构中的field_info和method_info,以及对应的Proxy的源码.本文将会更详细的分析method_info中的方法执行体部分 因为方法的字节码涉及到了jvm的操作指令,…
<Java虚拟机原理图解>1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的 字段区:包括了字段计数器和字段数据区: 字段是指在类中定义的静态或者非静态的全局变量,而不是在类中的方法内定义的局部变量. Field字段应该包含的信息: field字段的访问标志(access_flags)占有两个字节16位,通过每一位来表示不同的特征 字段的数据类型表示: field_info结构体中,存储的是指向了常量池中该字段的名称和字段描述符的索引. 属性表集合: 针对fi…
使用BCEL动态改变Class内容 之前对Class文件中的常量池,Method的字节码指令进行了说明.JVM Class详解之一JVM Class详解之二 Method字节码指令现在我们开始实际动手,使用BCEL改变字节码指令,对Class文件进行功能扩充. 先介绍下BCEL全程Apache Byte Code Engineering Library,BCEL 每项内容操作在JVM汇编语言的级别 HelloWorld搞起 这个case我们需要给Programmer类做功能扩展,Programm…
枚举类的使用 定义一个简单的枚举类,其中包含若干枚举常量,示例如下: public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY } Java 的 switch 语句参数支持使用枚举类 // day是Day类型变量 switch (day) { case MONDAY: System.out.println("要开组会了好难受"); break; case THURSDAY: Syste…
今天在看ArrayList,发现一个很有意思的问题.从VS里反编译看,ArrayList继承了ICollection. IEnumerable.IList和ICloneable,而IList又继承了ICollection和IEnumerable, ICollection又继承了IEnumerable.见下图: 接口是成员的签名,继承接口的父接口并没有意义,微软应该不会写这种代码.所以怀疑这只是反编译显示DLL的优化,方便查看而已,实际上ArrayList只直接继承了IList和ICloneabl…