`
glutinit
  • 浏览: 47297 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JVM摘要--Class文件格式

    博客分类:
  • JVM
阅读更多
    Class文件是JVM虚拟机可以理解的字节码文件,class文件并不是JAVA的专用文件,现在有很多语言都会生成可在JVM上运行的.class文件,比如JRuby,Groovy等等。

    这里介绍一下.class文件的具体结构。

    Class文件是二进制流,其中包含了一组8为字节为单位的基本单位,其中,各个基本元素之间都是紧密相连的,彼此之间没有空隙。当一个元素的数据大于1个字节的情况,就会按照高位在前的方式为其分配空间,将其放置在若干个字节中。

   在Class文件中,只有两种数据类型:无符号数和表。

    其中无符号数包括u1,u2,u4,u8,后面的数字代表其所占字节数,比如u4就表示4个字节。无符号数一般可表示数字,索引引用,数量值。或者按照UTF-8编码构成的字符串值。
而表则是由多个无符号数和其他表构成的复合型数据类型(无符号数和表的区别和和java语言中的基础类型与类有点类似),表习惯性的用_info结束。

    下面是Class文件格式
   
           
类型 名称 数量简要说明
u4magic1魔数,表示该文件是JVM认识的class文件,其值为0xCAFEBABE (可记忆为咖啡宝贝~)
u2minor_version1次版本号
u2major_version1主版本号
u2constant_pool_count1常量池容量计数值
cp_infoconstant_poolconstant_pool_count-1详见其他文章
u2access_flags1用于识别一些类或者接口的访问信息,比如,是否是接口,是否public等
u2this_class1类索引
u2super_class1父类索引
u2interfaces_count1接口数量
u2interfacesintercaces_count-1接口索引
u2fields_count1字段表数量
field_infofieldsfields_count-1详见其他文章
u2methods_count1方法表数量
method_infomethodsmethods_count-1详见其他文章
u2attributes_count1属性表数量
attribute_info attributes attributes _count-1详见其他文章

分享到:
评论

相关推荐

    JVM学习笔记(一)

    - `jmap -dump:format=b,file=./<filename>.hprof <pid>`:将Java堆转储为hprof二进制格式到文件。 - `jmap -heap <pid>`:打印Java堆的概要信息,包括GC算法、堆配置等。 例如: ``` jmap 24917 jmap -dump:...

    java资料夹

    在JVM加载加密class文件时,需要使用特殊的ClassLoader来完成class的解密和Class对象的生成。解密和Class对象的生成是通过C语言和JNI(Java Native Interface)实现的,从而增加了破解的难度。解密步骤中包含了一...

    corejava的学习笔记

    - `-implicit:{none,class}`:指定是否为隐式引用文件生成类文件。 - `-encoding <编码>`:指定源文件使用的字符编码。 - `-source <版本>`:提供与指定版本的源兼容性。 - `-target <版本>`:生成特定 VM 版本...

    java web开发者突击jar位置

    当应用程序尝试使用某个类时,JVM会查找相应的.class文件。如果这个文件不在当前classpath中,JVM会查找相关的JAR文件,并从中加载所需的类。 - **默认类加载器**:每个Java应用都有一个默认的类加载器,称为系统类...

    JAVA新手入门笔记-编程基础知识

    中间层是指JVM和CLASS文件,它们扮演着非常重要的角色。中间层可以屏蔽底层的复杂细节,让开发者更容易编写程序。同时,中间层也可以提供了跨平台的功能,让开发者可以在不同的操作系统上运行程序。 函数式编程 ...

    sport_M.zip

    - **编译与运行**:Java 源代码需要通过 Javac 编译器转化为字节码(.class 文件),然后由 Java 虚拟机(JVM)执行。 - **体育相关应用**:Java 可能被用来编写体育相关的软件,如比赛管理系统、运动员训练模拟器...

    Java应用开发:基础知识全书作业练习题.docx

    * Java 文件的编译命令是 javac,编译后的文件为 class 文件。 * 一个.java 文件中只能有一个公共类,class 文件的文件名和 Java 文件的文件名对应。 * Java 程序可以跨平台,基础是 JVM(Java Virtual Machine)。 ...

    韩顺平-javase-从入门到精通学习笔记

    本资源摘要信息中,我们将详细介绍 Java 语言的基础知识、Java 开发工具、Java 语言的特点、Java 开发步骤、Java 虚拟机、Java 编译器、Java 字节码文件、Java 解释执行器、Java 虚拟机等。 Java 的基础知识: ...

    java技术及其组件 论文

    Java源代码文件经过编译后,会被转换成一系列的`.class`文件,这些文件包含有Java虚拟机可以理解的字节码。不论在哪种系统上产生的`.class`文件,Java虚拟机都能够正确解析和执行。 ##### 3. Java虚拟机 (JVM) Java...

    java C++ 书籍收藏

    - Java Cryptography Extension(JCE)提供了一个框架和一系列用于加密操作的工具类,支持加密、密钥生成以及消息摘要等操作。 第二部分:Java高级特性 1. 反射 - 反射机制允许在运行时动态访问和修改类和对象的...

    韩顺平JAVA从入门到精通视频教程(94讲)全部笔记整理.doc

    2. 编译源文件为类文件(.class 文件) 3. 在虚拟机上运行 三、Java 语言特点 Java 语言有四个主要特点: 1. 简单性:Java 语言简单易学 2. 面向对象:Java 语言是面向对象的编程语言 3. 跨平台性:Java 语言可以...

    数据导入导出为EXCEL论文

    本文将详细介绍如何使用Jxl API在Java环境中操作Excel文件,包括读取、写入以及格式化的具体实现方法。 #### 关键词 Java;Excel;Jxl API;数据导入导出 ### 引言 Microsoft Office中的Excel是一款非常流行的...

    Java期末考试题及答案.pdf

    * 解释字节码成为指令并执行,提供Class文件的运行环境 * 进行运行期间垃圾回收 * 提供与硬件交互的平台 Java虚拟机是JAVA运行环境(JRE)的一部分,它提供了一个平台独立的Java运行环境,使得Java程序可以在不同的...

    java选择题java选择题.docx

    * classpath 环境变量用于指定 Java 类文件(.class 文件)或 jar 文件所在的目录。 * 配置 classpath 环境变量可以使 Java 虚拟机找到所需的类文件。 四、Java 语言的基本语法 * Java 语言的基本语法包括变量声明...

    java程序设计试题库.pdf

    2. Java 语言的字节码文件:Java 语言的字节码文件需要以 .class 为扩展名,该文件可以被 Java 虚拟机执行。 3. Java 语言的多线程机制:Java 语言具有多线程机制,允许程序员创建多个线程来并发执行任务。 本资源...

    JAVA上百实例源码以及开源项目源代码

    Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...

    Java程序设计项目教程(第二版)-参考答案.docx

    本资源摘要信息基于 Java 程序设计项目教程(第二版)- 参考答案,涵盖了 Java 语言的基础知识、Java 版本、Java 语言的特点、JVM 的概念和作用、Java 程序的基本结构、异常处理等方面的知识点。 一、Java 版本 ...

    最新Java复习题 (含答案).docx

    4. 编译 Java 应用程序源文件将产生相应的字节码文件,这些字节码文件的扩展名为 .class。 5. 定义一个类,必须使用的关键字是 class。在 Java 中,class 是用于定义类的关键字。 6. JAVA 中不属于基本数据类型的...

    java实现调用c动态库

    gcc -shared -o libmd5.so -I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux MD5Util.cpp -lssl -lcrypto ``` 5. **运行Java程序** 现在Java程序可以调用`MD5...

Global site tag (gtag.js) - Google Analytics