`
铁面大侠
  • 浏览: 1696 次
社区版块
存档分类
最新评论

JVM class文件结构

阅读更多
Class文件是一组以8位字节为基础的二进制流,各个数据项目严格按照顺序亲凑排列在Class文件当中。
  Java虚拟机规范说,Class文件格式采用一种类似C语言结构体的伪结构来存储数据,这种伪数据只有两种数据类型,无符号数和表
(1) 无符号数属于基本的数据类型,以u1,u2,u4,u8来分别代表一个字节两个字节四个字节和八个字节,无符号数可以用来描述数字,索引引用,数量值或按照UTF-8编码构成字符串。
(2) 表是有多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性的以“_info”结尾,表用于描述有层次关系的复合结构的数据,整个class文件本质上就是一张表。
下边具体说一下Class文件各部分的内容
1每个Class文件的头四个字节成为魔数(Migic Number),
它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。
2常量池
常量池可以理解为Class文件之中的资源仓库。
常量池中主要放置两大常量:字面量和符号引用。
(1) 字面量比较接近于JAVA语言层面的常量概念,如文本字符串,声明为final的常量值等。
(2) 符号引用包括三类常量:
类和接口的全限定名
字段的名称和描述符
方法的名称和描述符
Class文件不会保存各个方法,字段的最终内存布局信息。
3访问标志
   用于标示类或者接口层次的访问信息,包括:
(1) 这个Class文件是类还是接口
(2) 是类还是注解
(3) 是类还是枚举
(4) 是否定义为public类型
(5) 是否定义为abstract类型
(6) 如果是类的话是否声明为final等。
4类索引,父类索引与接口索引集合。
顾明意思,存放三个数据来确定class文件对应的类的继承关系
类索引用于确定这个类的全限定名
父类索引用于确定这个类的父类的全限定名
接口索引用来描述这个类实现了哪些接口,一个集合
5,字段表集合
   字段表(field_info)用于描述类或者接口中声明的变量。字段包括类级变量以及实例级变量(不包括方法体内的局部变量)
   一个字段可以包括的信息:
            字段作用域(public等)
            是否是实例变量(是否有static修饰)
            是否可变(final)
            并发可见性(volatile,是否强制从主内存中读写)
          可否被序列化(transient修饰符)
          字段数据类型(基本类型,对象,数组)
          字段名称
6,方法表集合
主要包括:
访问标志(public…)
是否static
是否final
是否为synchronzied
是否为native
是否为abstract
是否为strictfy
(注意volatile和transient只能修饰属性,不能修饰方法)
(方法的代码在方法属性表集合中的一个名为Code的属性里面)
7,属性表集合
在class文件和字段表和方法表都可以携带自己的属性表集合,以用于描述某些场景专有的信息。
其内容可以包括(只列出部分内容,未列全):
    Java代码编译成的字节码指令(方法体)
    final关键字定义的常量值
    被声明为deprecated的方法和字段
    方法抛出的异常
    局部类或者匿名类
    内部类列表
    Java源码行号与字节码指令的对应关系
    方法的局部变量描述
    表示方法或字段为编译器自动生成
    注解信息
    用于保存invokedynamic指令引用的引导方法限定符
分享到:
评论

相关推荐

    jvm 加载class文件

    ### JVM加载Class文件详解 #### 一、Java与JVM中的Class文件加载机制概述 Java作为一种动态性极强的解释型编程语言,在程序运行时,Java虚拟机(JVM)负责将编译生成的`.class`文件加载到内存中进行执行。在Java...

    class文件结构浅析

    Class文件的结构非常严谨,每个字段都有固定的含义,这对于JVM来说至关重要,因为它需要能够准确地解析并执行这些文件中的指令。 Class文件的主要组成部分包括:魔术码、版本号、常量池、访问标志、类索引、父类...

    JVM-CLASS文件分析脑图

    JVM-CLASS文件分析脑图的知识点涵盖了Java类文件的结构、组成、以及如何解析这些结构。class文件是Java虚拟机(JVM)能够识别和加载的二进制格式,它包含了一个Java类或者接口的定义。 首先,class文件以一个魔术数...

    深入理解JVM之Class类文件结构详解

    Class文件结构是JVM的核心组件之一,对于Java开发者来说,理解Class文件结构是非常重要的。本文将深入解释Class文件结构的详细信息,包括Class文件的组成部分、常量池、访问标志、类索引、字段表集合、方法表集合、...

    JVM加载class文件的原理机制

    JVM加载class文件的原理机制 JVM加载class文件的原理机制是Java中的核心机制之一,由于Java中的所有类必须被装载到JVM中才能运行,这个装载工作是由JVM中的类装载器完成的。类装载器所做的工作实质是把类文件从硬盘...

    jvm解析编译过的class文件

    另外,` jclasslib`是一款可视化的字节码查看器,它提供了更直观的方式查看和分析.class文件,包括类结构、常量池、字段和方法的详细信息。使用这样的工具可以帮助我们更好地理解JVM的内部工作原理。 此外,学习...

    class文件结构组成.doc

    ### Class文件结构组成详解 #### 一、Class文件概述 ...通过上述分析可以看出,Class文件结构设计严谨且高度组织化,使得JVM能够高效地加载和执行Java程序。理解这些细节有助于深入掌握Java编程语言和JVM的工作原理。

    jvm的基本原理及结构

    2. **类加载机制**:JVM使用类加载器(ClassLoader)将.class文件加载到内存中,类加载器体系结构包括Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader,它们分别负责加载不同的类库。...

    JavaClass文件的结构分析及其校验.pdf

    JavaClass文件的校验过程是为了确保加载到Java虚拟机(JVM)上的Class文件具有正确的内部结构,从而保障所定义类型的可用性和安全性,同时确保不同Class文件之间的一致性。Java文件校验器通过四次独立扫描完成校验...

    小菜鸟系列-JVM体系结构

    类加载器负责将.class文件加载到JVM内存中。Java的类加载机制采用双亲委托模型,即先由父加载器尝试加载,如果失败再由子加载器进行加载。类加载器分为引导类加载器、扩展类加载器和应用程序类加载器,以及用户...

    JVM加载class文件的原理机制.pdf

    JVM加载class文件的原理机制 JVM加载class文件的原理机制是Java虚拟机中一个非常重要的组件,负责将class文件加载到内存中,以便Java程序的执行。下面是JVM加载class文件的原理机制的详细介绍: 类加载的原理 在...

    class文件结构参照表全集.pdf

    ### Class文件结构详解 #### 一、概述 `class`文件是Java编译器生成的目标文件格式,也是Java虚拟机执行的基本单位。每个`.class`文件代表了一个Java类或者接口的定义,包含了类的元数据(如常量池、访问标志、类...

    class文件结构(简单class文件)

    class文件是Java编译后的字节码文件,是Java虚拟机(JVM)能够理解和执行的指令...理解class文件结构,可以帮助开发者更好地编写、调试和优化Java程序,同时,这也有助于理解JVM的工作原理和Java虚拟机如何处理字节码。

    深入JVM整理文档

    类装载器负责将.class文件加载到JVM中,并且还负责验证被导入类的正确性、为类变量分配内存并初始化、帮助解析符号引用等。这些操作遵循以下顺序: 1. **装载**:查找并装载类型的二进制数据。 2. **连接**:包含...

    JVM之用Java解析class文件共10页.pdf.zi

    总结起来,"JVM之用Java解析class文件"这一主题涵盖了从class文件的结构到JVM加载机制的多个层面。通过学习这一领域,开发者可以更好地理解Java程序的生命周期,提高问题诊断能力,并能利用字节码技术实现高级编程...

    第一章:class文件结构.mmap

    第一章:class文件结构.mmap

    Jvm之用C#解析class文件

    总的来说,使用C#解析Java的class文件是一项挑战性的任务,它需要对Java字节码格式有深入理解,并熟练掌握C#的IO和数据结构处理。通过这样的实践,开发者不仅可以提升自己的跨语言编程技能,还能增进对Java字节码和...

    JVM-整体结构原理深度解析

    当Java源代码被编译成字节码(.class文件)后,这些字节码文件可以被部署到任何安装了兼容JVM的平台上执行。需要注意的是,尽管Java语言本身具有良好的跨平台性,但JVM本身并不是跨平台的——不同操作系统上的JVM...

Global site tag (gtag.js) - Google Analytics