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(六)类文件结构的更多相关文章

  1. JVM(4) 类文件结构

    一.实现“平台无关性” 字节码(ByteCode)存储格式和虚拟机是实现语言无关性的基础.Java虚拟机不和包括Java在内的任何语言绑定,它只与“Clas”文件这种特定的二进制文件格式所关联,Cla ...

  2. JVM小结--类文件结构

    字节码是构成Java平台无关性的基石.实现语言无关性的基础是虚拟机和字节码存储格式. Java语言中的各种变量.关键字和运算符的语义最终是由多条字节码命令组成,因此字节码命令所能提供的语义描述能力肯定 ...

  3. 深入理解JVM(六) -- GC执行原则和方案

    上篇文章中,我们了解了Java虚拟机垃圾回收的思路和策略,这篇文章我们将了解Java是如何实现高效的回收算法的. 我们需要了解,内存回收必须要保证“一致性”,意思就是在执行GC分析的时候,系统看起来要 ...

  4. 《深入理解java虚拟机》第六章 类文件结构

    第六章 类文件结构   6.2 无关性的基石 各种不同平台的虚拟机与所有的平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石.java虚拟机不和包括java在内的任何语言 ...

  5. JVM学习笔记-第六章-类文件结构

    JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...

  6. 《深入理解Java虚拟机》类文件结构

    上节学习回顾 在上一节当中,主要以自己的工作环境简单地介绍了一下自身的一些调优或者说是故障处理经验.所谓百变不离其宗,这个宗就是我们解决问题的思路了. 本节学习重点 在前面几章,我们宏观地了解了虚拟机 ...

  7. 【搞定Jvm面试】 面试官:谈谈 JVM 类文件结构的认识

    类文件结构 一 概述 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机.Java 语言通过字节码的方式,在一定程度上解决 ...

  8. 四、JVM — 类文件结构

    类文件结构 一 概述 二 Class 文件结构总结 2.1 魔数 2.2 Class 文件版本 2.3 常量池 2.4 访问标志 2.5 当前类索引,父类索引与接口索引集合 2.6 字段表集合 2.7 ...

  9. 《深入理解java虚拟机》笔记——简析java类文件结构

    一直不太搞得明确jvm究竟是如何进行类载入的,在看资料的过程中迷迷糊糊.在理解类载入之前,首先看看java的类文件结构究竟是如何的,都包含了哪些内容. 最直接的參考当然是官方文档:The Java® ...

随机推荐

  1. 彻底放弃没落的MFC,对新人的忠告!--吃瓜群众围观撕逼

    http://bbs.csdn.net/topics/391817496 完全没想到10多年后还有人纠结要不要学MFC,我花点时间给新人们一个总结. 第1种观点 学习完MFC,你会更理解编程的思想,再 ...

  2. html动态元素点击事件添加

    很多时候,页面的元素是后期异步动态添加在页面上.页面点击事件无效. 非动态的元素直接$().click();便可以直接触发点击事件,而动态元素需要事先注册事件. $(document).on('cli ...

  3. Redis为什么可以支持那么大的并发访问量?为什么redis没有单点并发瓶颈?

    一是redis使用内存 而是redis使用多路复用的IO模型: 现代的UNIX操作系统提供了select/poll/kqueue/epoll这样的系统调用,这些系统调用的功能是:你告知我一批套接字,当 ...

  4. 知识点:Mysql 基本用法之流程控制

    流程控制 一. 条件语句 if 语句实例: delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = ...

  5. ArrayList add方法(转)

    由于 BrowerList 输出结果都是最后一条记录,后来网上查到了 if (dRead.HasRows) { List<Class_RejectQuery> BrowerList = n ...

  6. 深度森林DeepForest

    级联森林(Cascade Forest) 级联森林结构的图示.级联的每个级别包括两个随机森林(蓝色字体标出)和两个完全随机树木森林(黑色). 假设有三个类要预测,因此,每个森林将输出三维类向量,然后将 ...

  7. 常用命令npm,gulp, node

    npm常用命令: 检查npm模块的安装情况:(以常用模块 grunt为例说明) 1) 检查是否全局安装了模块Grunt: $npm list -g grunt 2) 列出所有已经全局安装的模块:$np ...

  8. Vue 父组件调用子组件函数的方法

    parent.vue(父组件的内容): <template> <div @click="divClick"> <info-wnd ref=" ...

  9. java效率取随机不重复数

    //效率取随机不重复数 public int[] takeRandom(int num) { Random rd = new Random(); int[] rds = new int[num];// ...

  10. HDFS 常用命令行:

    1. 查看各库的存储大小 hdfs dfs -du -h /user/hive/warehouse 2. 删除HDFS 文件 hdfs dfs -rmr 绝对路径名 例如:hdfs dfs -rmr ...