深入理解JVM(六)类文件结构
6.1 关于类文件
1.class文件的一次编译,到处运行的跨平台性;
2.JVM不止有跨平台性,还有跨语言性,不管是JRuby还是Groovy写出来的程序,只要编译出符合JVM规范的class文件就可以在JVM上运行;
6.2 类文件结构
PS:任何一个Class文件都对应一个类或者接口,但是一个类或者接口不一定都得定义在文件里,因为有类加载器的存在可以;
CLass文件结构的两部分:(1)无符号数:u1、u2、u4、u8(数字代表所占的字节数),数字、索引引用;(2)表:_info;
1.魔数:
(1)每个Class文件的头四个字节u4: 0xCAFEBABE ,用于标志Class文件;
(2)第五第六字节:次版本号Minor Version,第七第八字节:主版本号:Major Version,主版本号决定了高版本JDK可以兼容运行低版本Class文件,但是低版本JDK不能运行高版本Class文件;
2.常量池:
(1)常量池入口位于主版本号之后;
(2)两大常量:①字面量(更接近Java中的常量定义);②符号引用:类和接口的全限定名(Fully-Qualified Name)、字段的名称和描述符(Descriptor)、方法的名称和描述符;
3.访问标志falg:
常量池后面两位,用于表示是否是:public、final、super、interface、abstract等修饰的类;ACC_xxxx所修饰;
4.类索引(this_class)、父索引(super_class)、接口索引(interfaces):
(1)类索引和父索引都是一个u2类型的数据,而接口索引是u2类型的数据集合;
(2)类索引和父索引各自 -> 类描述常量 CONSTANT_CLass_info -> CONSTANT_Utf8_info ;
5.字段表集合(field_info)
(1)用于描述接口或类中的变量,不包括局部变量,用于表示其:作用域(public、private、protected)、静态(static)、常量(final)、数据类型(基本数据类型、数组、对象);
(2)字段表结构:① access_flags :表示字段修饰符,u2数据类型;② name_index :简单名称(变量的名称),是对常量池的引用;③ descripter_index :描述符(描述字段的数据类型,在方法表中是描述参数的列表和返回值),也是对常量池的引用 ;④ attribute_info :最后是属性表,存储额外的信息,比如变量的初始值;
6.方法表集合
结构和字段表类似,只是用于表示方法,方法中的代码内容保存在属性表 attribute_info的Code属性中;
7.属性表集合
6.3字节码指令
JVM的字节码指令由以下构成:①操作码:一个字节长度的数字,代表着某种操作;②操作数:紧跟操作码后面的零至多个的参数,代表此操作需要的参数;
字节码指令包括:加载和存储指令(栈帧中局部变量表和操作数栈之间的来回传输),运算指令(两个操作数栈上的值进行运算加减乘除等),类型转换指令,对象创建于访问指令,操作数栈管理指令(出栈、复制栈顶、栈顶两个数值互换),控制转移指令(条件分支、复合条件分支、无条件分支),方法调用和返回指令,异常处理指令
深入理解JVM(六)类文件结构的更多相关文章
- JVM(4) 类文件结构
一.实现“平台无关性” 字节码(ByteCode)存储格式和虚拟机是实现语言无关性的基础.Java虚拟机不和包括Java在内的任何语言绑定,它只与“Clas”文件这种特定的二进制文件格式所关联,Cla ...
- JVM小结--类文件结构
字节码是构成Java平台无关性的基石.实现语言无关性的基础是虚拟机和字节码存储格式. Java语言中的各种变量.关键字和运算符的语义最终是由多条字节码命令组成,因此字节码命令所能提供的语义描述能力肯定 ...
- 深入理解JVM(六) -- GC执行原则和方案
上篇文章中,我们了解了Java虚拟机垃圾回收的思路和策略,这篇文章我们将了解Java是如何实现高效的回收算法的. 我们需要了解,内存回收必须要保证“一致性”,意思就是在执行GC分析的时候,系统看起来要 ...
- 《深入理解java虚拟机》第六章 类文件结构
第六章 类文件结构 6.2 无关性的基石 各种不同平台的虚拟机与所有的平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石.java虚拟机不和包括java在内的任何语言 ...
- JVM学习笔记-第六章-类文件结构
JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...
- 《深入理解Java虚拟机》类文件结构
上节学习回顾 在上一节当中,主要以自己的工作环境简单地介绍了一下自身的一些调优或者说是故障处理经验.所谓百变不离其宗,这个宗就是我们解决问题的思路了. 本节学习重点 在前面几章,我们宏观地了解了虚拟机 ...
- 【搞定Jvm面试】 面试官:谈谈 JVM 类文件结构的认识
类文件结构 一 概述 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机.Java 语言通过字节码的方式,在一定程度上解决 ...
- 四、JVM — 类文件结构
类文件结构 一 概述 二 Class 文件结构总结 2.1 魔数 2.2 Class 文件版本 2.3 常量池 2.4 访问标志 2.5 当前类索引,父类索引与接口索引集合 2.6 字段表集合 2.7 ...
- 《深入理解java虚拟机》笔记——简析java类文件结构
一直不太搞得明确jvm究竟是如何进行类载入的,在看资料的过程中迷迷糊糊.在理解类载入之前,首先看看java的类文件结构究竟是如何的,都包含了哪些内容. 最直接的參考当然是官方文档:The Java® ...
随机推荐
- UML 序列图详解
现在是二月,而且到如今你或许已经读到.或听到人们谈论UML 2.0 —— 包括若干进步的 UML 的新规范,所做的变化.考虑到新规范的重要性,我们也正在修改这个文章系列的基础,把我们的注意力从 OMG ...
- [UE4]CheckBox
一.CheckBox默认情况下是比较小的 二.要让CheckBox变大,最简单的方法就是直接设置Transform.Scale,但如此一来CheckBox就变得模糊了. 三.CheckBox控件是在C ...
- Vsftp安装及配置主动模式/被动模式
第一章.前言 FTP的主动模式(active mode)和被动模式(passive mode) 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯 ...
- Python有趣时刻,这些代码让你大呼"卧槽,怎么会这样"
分享一个实用问题,用python读取Excel并保存字典,如何做? 下面是该同学问题截图和代码 image.png 代码截图是下面这样的 image.png 不知道大家第一眼看了这个代码,什么感受?我 ...
- 学习笔记:SASS
SASS: http://www.sass.hk/sass-course.html SASS 2015-10-10 http://sass.bootcss.com/docs/sass-referen ...
- 机器学习算法中的准确率(Precision)、召回率(Recall)、F值(F-Measure)
摘要: 数据挖掘.机器学习和推荐系统中的评测指标—准确率(Precision).召回率(Recall).F值(F-Measure)简介. 引言: 在机器学习.数据挖掘.推荐系统完成建模之后,需要对模型 ...
- myeclipse和jdk的安装和配置
一.安装JDK 1.下载得到jdk-8u11-windows-i586.1406279697.exe,直接双击运行安装,一直next就可以,默认是安装到系统盘下面Program Files,我这里装在 ...
- idea搭建Eureka注册中心
服务的注册与发现 关系调用说明: 服务生产者启动时,向服务注册中心注册自己提供的服务 服务消费者启动时,在服务注册中心订阅自己所需要的服务 注册中心返回服务提供者的地址信息个消费者 消费者从提供者中调 ...
- C语音秋季学习总结
我对下个学期的期望就是明确自己的目标,能在下学期中学习更多的知识
- java学习-- equals和hashCode的关系
hashcode的目的就是在hashset或者hashmap等中比较两个对象相等时,减少equals的使用次数来提高效率 以下为摘录 java中hashcode和equals的区别和联系 HashSe ...