网站开发中的开版什么意思,环球资源网商务网站建设目的,游戏推广怎么做,重庆网站建设重庆网站制作目录
重识JVM
JVM规范作用及其核心
JVM 整体组成
理解ClassFile结构
ASM开发 重识JVM JVM概述JVM#xff1a; Java Virtual Machine#xff0c;也就是Java虚拟机所谓虚拟机是指#xff1a; 通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统…目录
重识JVM
JVM规范作用及其核心
JVM 整体组成
理解ClassFile结构
ASM开发 重识JVM JVM概述JVM Java Virtual Machine也就是Java虚拟机所谓虚拟机是指 通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统JVM是通过软件来模拟Java字节码的指令集是Java程序的运行环境JVM主要功能 1.通过ClassLoader寻找和装载class文件2.解释字节码成为指令并执行提供class文件的运行环境3.进行运行期间的内存分配和垃圾回收4.提供与硬件交互的平台虚拟机是Java平台无关的保障 JVM规范作用及其核心 JVM规范作用JVM虚拟机规范为不同的硬件平台提供了一种编译Java技术代码的规范该规范使Java软件独立于平台因为编译是针对作为虚拟机的“一般机器”而做这个“一般机器”可用软件模拟并运行于各种现存的计算机系统也可用硬件来实现JVM规范定义的主要内容字节码指令集(相当于中央处理器CPU)Class文件的格式数据类型和值运行时数据区栈帧特殊方法类库异常虚拟机的启动、加载、链接和初始化 JVM 整体组成 1.类加载器(ClassLoader)2.运行时数据区(Runtime Data Area)3.执行引擎(Execution Engine)4.本地库接口(Native Interface)各个组成部分的用途程序在执行之前先要把java代码转换成字节码(class文件)jvm首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中 运行时数据区(Runtime Data Area)而字节码文件是jvm的一套指令集规范并不能直接交给底层操作系统去执行因此需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行而这个过程中需要调用其他语言的接口 本地库接口(Native Interface) 来实现整个程序的功能这就是这4个主要组成部分的职责与功能而通常所说的jvm组成指的是运行时数据区(Runtime Data Area)因为通常需要程序员调试分析的区域就是“运行时数据区”或者更具体的来说就是“运行时数据区”里面的Heap(堆)模块 理解ClassFile结构 Class文件是JVM的输入Java虚拟机规范中定义了Class文件的结构Class文件是JVM实现平台无关、技术无关的基础Class文件是一组以8字节为单位的字节流各个数据项目按序紧凑排列对于占用空间大于8字节的数据项按照高位在前的方式分割成多个8字节进行存储Class文件格式里面只有两种类型无符号数、表 无符号数基本数据类型以u1、u2、u4、u8来代表几个字节的无符号数表由多个无符号和其它表构成的复合数据类型通常以_info结尾说明javap工具生成非正式的“虚拟机汇编语言”格式如下 indexopcode[operand1[operand2...]][comment]index是指令操作码在数组中的下标该数组以字节形式来存储当前方法的Java虚拟机代码也可以是相对于方法起始处的字节偏移量opcode是指令的助记码operand是操作数comment是行尾的注释constant_pool_count是从1开始的不同的常量类型用tag来区分它后面对应的info结构是不一样的L表示对象[ 表示数组、V表示voidstack方法执行时操作栈的深度Locals局部变量所需的存储空间单位是 slotslot是虚拟机为局部变量分配内存所使用的最小单位args_size参数个数为1的话因实例方法默认会传入 thislocals 也会预留一个slot来存放 ASM开发 ASM是一个Java字节码的操纵框架它能被用来动态生成类或增强既有类的功能ASM可以直接产生二进制class文件也可以在类被加载入虚拟机之前动态改变类行为ASM从类文件中读取信息后能够改变类行为分析类信息甚至根据类的要求产生新类目前许多框架如cglib、Hibernate、Spring都直接或间接地使用ASM操作字节码ASM编程模型Core API提供了基于事件形式的编程模型 该模型不需要一次性将整个类的结构读取到内存中因此这种方式更快需要的内存更少但这种编程方式难度较大Tree API提供了基于树型的编程模型 该模型需要一次性将一个类的完整结构全部读取到内存中所以这种方法需要更多的内存这种编程方式较简单ASM的Core APIASM Core ApI 中操纵字节码的功能基于 ClassVisitor 接口这个接口中的每个方法对应了class文件中的每一项ASM 提供了三个基于 ClassVisitor 接口的类来实现class文件的生成和转换ClassReaderClassReader解析一个类的class字节码ClassAdapterClassAdapter是ClassVisitor的实现类实现要变化的功能ClassWriterClassWriter也是ClassVisitro的实现类可以用来输出变化后的字节码ASM给我们提供了 ASMifier 工具来帮助开发可使用ASMifier工具生成ASM结构来对比