详细说说JVM的class文件(一)

介绍

class虚拟机实现可以从文件系统(环境变量)读取也可以从JAR(或者ZIP)包提取,也可以从网上下载,从数据库加载,甚至在运行中直接生成class文件。

文件由8位字节流组成。16位和32位的数量分别通过读入两个和四个连续的8位字节来构造。多字节数据项总是以大端顺序存储,其中高字节放在前面。

结构

文件由单个结构组成:classClassFile

ClassFile {u4             magic;u2             minor_version;u2             major_version;u2             constant_pool_count;cp_info        constant_pool[constant_pool_count-1];u2             access_flags;u2             this_class;u2             super_class;u2             interfaces_count;u2             interfaces[interfaces_count];u2             fields_count;field_info     fields[fields_count];u2             methods_count;method_info    methods[methods_count];u2             attributes_count;attribute_info attributes[attributes_count];
}

各个字段含义如下:

  1. magic:提供用以分辨ClassFile格式的数,值为 0xCAFEBABE
  2. minor_version(次要版本号), major_version(主要版本号):
    1. 这个类文件的次要和主要版本号。主版本号和次版本号一起决定了类文件格式的版本。如果一个类文件的主要版本号为M,次要版本号为m,我们将其类文件格式的版本表示为M.m。
    2. 对于major_version为56或以上的类文件,minor_version必须为0或65535。对于major_version在45到55之间的类文件,minor_version可以是任何值。

  3. constant_pool_count:该项的值等于表中条目的数量加1。如果索引大于0且小于条目数,则认为索引有效,但type和常量除外。

  4. constant_pool[]:

    1. 是一个结构表,表示在结构及其子结构中引用的各种字符串常量、类和接口名、字段名和其他常量。每个表项的格式由其第一个“标记”字节表示。

    2. 表的索引从1到- 1

  5. access_flags:该项的值是用于表示该类或接口的访问权限和属性的标志的掩码

  6. this_class:该项的值必须是表中的有效索引。该索引的入口必须是一个结构体,表示这个文件定义的类或接口。

  7. super_class:

    1. 对于一个类(class),super_class 表示该类的直接超类(direct superclass)。super_class 的值必须要么是零,要么是指向表中有效位置的索引。如果 super_class 的值不为零,那么在该索引处的条目必须是表示该类的直接超类的结构。而且,该直接超类及其任何超类都不得在其结构的项目中设置标志。

    2. 如果 super_class 的值为零,那么这个类代表的是 java.lang.Object,这是唯一一个没有直接超类的类。

    3. 对于一个接口(interface),super_class 的值必须始终是一个有效的表索引。在该索引处的条目必须是表示 java.lang.Object 的结构。

  8. interfaces_count:该项的值给出了该类或接口类型的直接超接口的数量。

  9. interfaces[]:数组中的每个值必须是一个有效的表索引。对于每个值 i,其中 0 ≤ i < 数组长度,该值对应的条目必须是表示一个直接超接口(direct superinterface)的结构,这个超接口是该类或接口类型的一个直接超接口。这些超接口的顺序应该按照源代码中给定的左到右顺序排列。

  10. fields_count:该项的值给出了表中结构的数量。这些结构表示由这个类或接口类型声明的所有字段,包括类变量和实例变量。

  11. fields[]:表中的每个值必须是一个结构,给出该类或接口中字段的完整描述。该表只包含由这个类或接口声明的字段。它不包括表示从超类或超接口继承的字段的项。

  12. methods_count:该项的值给出了表中结构体的数量。

  13. methods[]:

    1. 每个表中的值必须是一个结构,给出了该类或接口中一个方法的完整描述。这个结构包括方法的访问标志(access_flags)、方法名称、描述符等信息。如果结构中的 flags 中没有设置 ACC_NATIVE 或 ACC_ABSTRACT 标志,那么还会提供实现该方法的 Java 虚拟机指令。

    2. 这些结构代表了该类或接口类型声明的所有方法,包括实例方法、类方法、实例初始化方法以及任何类或接口初始化方法。表中不包括代表从超类或超接口继承的方法的条目。

    3. method_info 结构包含了关于方法的详细信息,如方法的修饰符、名称、描述符等。每个 method_info 结构表示一个方法。

  14. attributes_count:该项的值给出了该类表中的属性数。

  15. attributes[]:

    1. 表的每个值必须是一个结构(§4.7)。attributesattribute_info

    2. 表4.7-C中列出了本规范定义的在结构表中出现的属性。attributesClassFile

    3. 关于定义在结构表中出现的属性的规则在§4.7中给出。attributesClassFile

    4. 关于结构表中非预定义属性的规则在§4.7.1中给出。attributesClassFile
       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[LeetCode][426]【学习日记】将二叉搜索树转化为排序的双向链表——前驱节点pre 和 当前节点cur 的使用

题目 426. 将二叉搜索树转化为排序的双向链表 将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 。 对于双向循环列表&#xff0c;你可以将左右孩子指针作为双向循环链表的前驱和后继指针&#xff0c;第一个节点的前驱是最后一个节点&#xff0c;最后一个节点的后继是第…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记07_价格歧视

1. 行为歧视 1.1. 单个企业通过使用数据驱动的算法&#xff0c;从而更好地实现锁定客户、开展个性化营销与定价的目的 1.2. 市场环境再次发生了变化 1.2.1. 在共谋场景中&#xff0c;定价算法提高了企业经营者在销量数据上的透明性&#xf…

通讯协议制定之常见问题、注意事项总结

文章目录 通讯协议制定之常见问题、注意事项总结1. 通讯协议制定介绍小结2. 常见的问题及注意事项总结2.1 3次握手2.2 心跳检测2.3 ACK回复及重发机制2.4 通信协议版本匹配2.5 校验的重要性2.6 最大数据传输长度2.7 大小端问题2.8 通信负载能力2.9 压力测试的重要性 通讯协议制…

【Java从入门到精通】Java异常处理

异常是程序中的一些错误&#xff0c;但并不是所有的错误都是异常&#xff0c;并且错误有时候是可以避免的。 比如说&#xff0c;你的代码少了一个分号&#xff0c;那么运行出来结果是提示是错误 java.lang.Error&#xff1b;如果你用System.out.println(11/0)&#xff0c;那么…

Java并发编程: AQS

文章目录 一、前置知识二、什么是AQS三、使用AQS框架的锁和同步器1、ReentrantLock2、ReentrantReadWriteLock3、CountDownLatch4、CyclicBarrier5、Semaphore&#xff1a;信号量 四、锁和同步器的关系1、锁&#xff1a;面向锁的使用者2、同步器&#xff1a;面向锁的实现者 五、…

四川易点慧电子商务有限公司抖音小店安全正规

在如今网络购物日益普及的时代&#xff0c;消费者对于购物平台的选择越来越挑剔。四川易点慧电子商务有限公司抖音小店以其安全正规的经营模式&#xff0c;赢得了广大消费者的信赖和好评。本文将为您详细介绍四川易点慧电子商务有限公司抖音小店的优势和特点&#xff0c;让您在…

Vue3全家桶 - Vue3 - 【2】声明响应式数据(ref + reactive + toRef + toRefs)

声明响应式数据 一、 组合式API 1.1 ref() ref() 函数&#xff0c;可以创建 任何数据类型 的 响应式数据&#xff1b;&#x1f53a;注意&#xff1a; 当值为 对象类型 时&#xff0c;会用 reactive() 自动转换它的 .value&#xff1b; ref 函数的内部实现依赖于 reactive 函…

代码随想录训练营第六天|242. 有效的字母异位词

242. 有效的字母异位词 已解答 简单 相关标签 相关企业 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…

【AI】如何创建自己的自定义ChatGPT

如何创建自己的自定义ChatGPT 目录 如何创建自己的自定义ChatGPT大型语言模型(LLM)GPT模型ChatGPTOpenAI APILlamaIndexLangChain参考推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课本文将记录如何使用OpenAI GPT-3.5模型、LlamaIndex和LangChain创建自己的…

Sqoop 学习

参考视频 大数据Sqoop教程丨从零开始讲解大数据业务及数据采集和迁移需求_哔哩哔哩_bilibili 介绍 Sqoop是Hadoop生态体系和RDBMS&#xff08;关系型数据库&#xff09;体系之间传送数据的一种工具 Hadop生态系统&#xff1a;HDFS&#xff0c;Hbase&#xff0c;Hive等 RDBMS包…

java-ssm-基于jsp商场停车服务管理信息系统

java-ssm-基于jsp商场停车服务管理信息系统

为HTTP的2024端口设置重定向

为HTTP的2024端口设置重定向 server { listen 80:2024; server_name www.test.com; # 将HTTP的2024端口请求重定向到对应的HTTPS端口 return 301 https://$host:2024$request_uri;}

Python模块和包

模块和包 为什么要有模块和包 在Python中&#xff0c;模块&#xff08;Module&#xff09;和包&#xff08;Package&#xff09;是组织和管理代码的重要工具&#xff0c;有助于将代码划分为可维护和重用的单元。 模块&#xff08;Module&#xff09; 概念&#xff1a;模块是…

Notes用户还可自助改密码

大家好&#xff0c;才是真的好。 很多时候企业对员工的安全使用进行了硬性规定&#xff0c;例如严格的就是&#xff0c;每三个月或六个月要至少更改一次密码。 在Domino 8.5以后&#xff0c;功能上多了一个新特性&#xff0c;叫ID保险库&#xff0c;其实就是把用户的id标识符…

day40 整数拆分 不同的二叉搜索树

题目1&#xff1a;343 整数拆分 题目链接&#xff1a;343 整数拆分 题意 将正整数n拆成k个正整数的和&#xff08;k>2&#xff09;使整数的乘积最大化 尽量拆成若干个数值近似相等的数&#xff0c;这使用的是数学里面的思想&#xff1a;ab<(a^2b^2)/2 (当且仅当ab时&…

开源的java 代码分析库介绍

本文将为您详细讲解开源的 Java 代码分析库&#xff0c;以及如何安装这些库、它们的特性、区别和应用场景。Java 社区提供了多种代码分析工具&#xff0c;这些工具可以帮助您在 Java 应用程序中进行代码质量评估、性能分析、安全检查等功能。 1. CheckStyle 安装 - 通过…

tsv文件在大数据技术栈里的应用场景

是的&#xff0c;\t 是指制表符&#xff08;tab&#xff09;&#xff0c;它通常用作字段分隔符在 TSV&#xff08;Tab-Separated Values&#xff09;格式的文件中。TSV是一种简单的文本格式&#xff0c;它使用制表符来分隔每一列中的值&#xff0c;而每一行则代表一个数据记录。…

http升级https需要做什么

背景&#xff1a;随着现代网络时代的高速发展&#xff0c;网络安全方面的日益更新&#xff0c;实现网站https协议的数量也在不断增多&#xff0c;完善安全方面的因素也在逐步增加。 下面从最基础的网站http协议全面升级为https协议的流程做出说明。 目录 首先带大家一起先了解…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

javascript:void(0);用法及常见问题解析

javascript:void(0);用法及常见问题解析 1. 简介 javascript:void(0); 是一种 JavaScript 代码,常用于以下几种情况: 创建一个空链接,点击后不会发生任何跳转或动作。 在需要返回值的地方,返回 undefined 值。 避免意外的副作用,例如在箭头函数中,如果函数体不使用括号…