JVM的基础,class文件的理解(2)

本文是“深入学习JVM”系列的第二篇文章,主要介绍class文件的数据结构。
我是蚊子码农,欢迎各位的点赞、关注和收藏,有了你们的激励,我会带来更好的作品。

一、前言

class文件,通常由Java编译器编译得到,用于JVM的工作。
我们按功能研究其数据结构。
不过,我们首先要知道,class文件用无符号整型表示所有数据。
为了方便组织,用多个无符号整型,组成一张表。
整个class文件,本质上就是一张表。

二、概括

按照功能,class文件可以被分为9个数据区,分别是

  1. 魔数 – 验证class文件的正确性;
  2. 版本号 – 标识生成class文件的编译器版本;
  3. 常量池 – 最重要的地方,大多数数据的存储位置;
  4. 访问标识 – 描述这个资源是类还是接口,访问的权限是public、private等,
  5. 类索引 – 描述这个类的全限定名;
  6. 父类索引、接口索引集合 – 描述这个类的父子结构
  7. 字段表 – 描述这个类定义的成员变量和变量属性;
  8. 方法表 – 描述这个类定义的方法和方法属性;
  9. 属性表 – 描述class文件的附带信息;

三、按功能详解class文件

第一,魔数
  1. 功能:用于验证class文件正确性
第二,版本号
  1. 功能:说明编译class文件的编译器的版本。
  2. 原因:高级编译器生成的class文件,无法由低级JVM执行。【即:保证运行成功】
第三,常量池
  1. 功能:存放大量常量资源。
  2. 组成:
    1. 常量池计数器:记录常量池中有多少个常量【从1开始,1表示没有常量】
    2. 常量池数组:真实的常量值。
第四,访问标识
  1. 功能:描述当前类(或接口)的访问修饰符【比如public、private、识别当前文件是类还是接口等等】
第五,类索引
  1. 功能:确定该类的全限定名
第六,父类索引和接口索引集合
  1. 功能:确定这个类的父类的全限定名,和所有实现接口的全限定名
  2. 备注:由于Java是单继承,多实现,所以允许实现多个接口,因此,采用数组的结构,存储接口索引;
  3. 接口索引集合的组成:
    1. 接口计数器:记录显式接口索引的个数【显式接口:也就是在Java源文件中,我们实现的接口,比如我们implements接口A,A可能有个父接口B,B就不属于显式接口】
    2. 接口索引表数组:存放接口信息
第七,字段表集合
  1. 功能:描述接口或类中声明的变量【包括所有显式变量】
  2. 备注:不会列出从父类、实现的接口中继承的字段【但是由于Java有内部类的机制,所以为了保持访问性,可能会有不存在的字段】
  3. 字段表集合的组成:
    1. 字段计数器:记录字段的个数;
    2. 字段表数组:存放字段信息
第八,方法表集合
  1. 功能:描述接口或类中声明的方法;
  2. 备注:不会列出父类父接口的方法,除非本类重写了它们的方法。
  3. 组成:
    1. 方法计数器:记录方法的个数;
    2. 方法表:存放方法信息
第九,属性表
  1. 功能:描述class文件所携带的辅助信息,在JVM运行时,会使用这些信息进行某些活动

四、结语

我是蚊子码农,如有补充或者疑问,欢迎在评论区留言。个人的知识体系可能没有那么完善,希望各位多多指正,谢谢大家。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

策略为王股票软件源代码-----如何修改为自己软件62----资讯菜单修改-----举例---------调用同花顺F10资讯------

//char szInfoF10[] "http://www.f10.com.cn/ggzx/ggzl.asp?zqdm%s"; char szInfoF10[] "http://basic.10jqka.com.cn/601899/"; // MENUITEM "F10资讯(&F)", ID_INFO_F10 MENUITEM &…

14-26 剑和侠客 – 预训练模型三部曲3 – 机器人时代来临

概述 在第 1 部分和第 2 部分中,我们讨论了适用于文本和图像任务的预训练模型,并探索了当今常用的模型。我们分析了这些模型的架构以及如何将它们用于特定任务。实现 AGI 所需的两个主要支柱是语言理解和机器的视觉能力。有许多任务与这两种能力有关。 …

Unity中使用VectorGraphics插件时,VectorUtils.RenderSpriteToTexture2D方法返回结果错误的解决方法

Unity中使用VectorGraphics插件时,如果使用VectorUtils.BuildSprite方法创建Sprite,那么得到的Sprite往往是一个三角网格数比较多的Sprite,如果想要得到使用贴图只有两个三角面的方形Sprite,可以使用该插件提供的VectorUtils.Rend…

基于顺序表的通讯录实现

一、前言 基于已经学过的顺序表,可以实现一个简单的通讯录。 二、通讯录相关头文件 //Contact.h #pragma once#define NAME_MAX 20 #define TEL_MAX 20 #define ADDR_MAX 20 #define GENDER_MAX 20typedef struct PersonInfo {char name[NAME_MAX];char gender[G…

统一视频接入平台LntonCVS视频监控平台具体功能介绍

LntonCVS视频监控平台是一款基于H5技术开发的安防视频监控解决方案,专为全球范围内不同品牌、协议及设备类型的监控产品设计。该平台提供了统一接入管理,支持标准的H5播放接口,使其他应用平台能够快速集成视频功能。无论开发环境、操作系统或…

适用于Mac和Windows的最佳iPhone恢复软件

本文将指导您选择一款出色的iPhone数据恢复软件来检索您的宝贵数据。 市场上有许多所谓的iPhone恢复程序。各种程序很难选择并选择其中之一。一旦您做出了错误的选择,您的数据就会有风险。 最好的iPhone数据恢复软件应包含以下功能。 1.安全可靠。 2.恢复成功率高…

NoSQL 之 Redis 配置与常用命令

一、关系型数据库与非关系型数据库 1、数据库概述 (1)关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记 录。 SQL 语句(标准数据查询语言&am…

2024年地理信息技术与应用技能大赛·决赛(2024年地理信息技术与应用能力水平考试·中级)

目录 1 请将所有数据的空间参考统一。(2分) 1.1 题目要求 1.2 详细解析 2 制作台风轨迹图。(10分) 2.1 题目要求 2.2 详细解析 3 分析台风影响城市,并将结果以独立专题图的形式展示。(13分&#xff…

实例演示kafka stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…

笔记13:switch多分支选择语句

引例&#xff1a; 输入1-5中的任意一共数字&#xff0c;对应的打印字符A,B,C,D,E int num 0; printf("Input a number[1,5]:"); scanf("%d"&#xff0c;&num); if( num 1)printf("A\n"); else if(num2)printf("B\n"); else i…

【大数据】—FIFA世界杯探索性分析(EDA)

引言 足球&#xff0c;作为全球最受欢迎的运动之一&#xff0c;拥有庞大的粉丝群体和深远的文化影响。自1930年首届FIFA世界杯举办以来&#xff0c;这项赛事已经成为全球体育盛事&#xff0c;吸引了数十亿观众的目光。世界杯不仅是各国足球技艺的较量&#xff0c;更是国家荣誉…

02STM32环境搭建新建工程

STM32环境搭建&新建工程 软件安装&#xff1a;开发方式&新建工程步骤&架构 个人心得 软件安装&#xff1a; 安装Keil5 MDK 安装器件支持包 软件注册 安装STLINK驱动 安装USB转串口驱动 开发方式&新建工程步骤&架构 STM32开发方式&#xff1a; 1.寄存器 …

笔记14:程序中的循环结构

生活中的循环现象&#xff1a; -日复一日&#xff0c;年复一年 -春夏秋冬&#xff0c;四季交替 -周日&#xff0c;周一&#xff0c;周二&#xff0c;周三&#xff0c;周四&#xff0c;周五&#xff0c;周六 -人生是一个轮回&#xff0c;多年后&#xff0c;又会回到最初的原点 …

APP渗透-android12夜神模拟器+Burpsuite实现

一、夜神模拟器下载地址&#xff1a;https://www.yeshen.com/ 二、使用openssl转换证书格式 1、首先导出bp证书 2、将cacert.der证书在kali中转换 使用openssl生成pem格式证书,并授予最高权限 openssl x509 -inform der -in cacert.der -out cacert.pem chmod 777 cacert…

容器:queue(队列)

以下是关于queue容器的总结 1、构造函数&#xff1a;queue [queueName] 2、添加、删除元素: push() 、pop() 3、获取队头/队尾元素&#xff1a;front()、back() 4、获取栈的大小&#xff1a;size() 5、判断栈是否为空&#xff1a;empty() #include <iostream> #include …

解决 MEX 文件 ‘xxx.mexw64‘ 无效: 找不到指定的模块。的问题

1.问题描述 在matlab R2021b中运行编译好后的gptoolbox工具箱中的函数[SVtemp,SFtemp,IF] selfintersect(V,F);报错如下 MEX 文件 E:\MATLAB_File\gptoolbox\mex\selfintersect.mexw64 无效: 找不到指定的模块。出错 offset_bunny (第 15 行) [SVtemp,SFtemp,IF] selfinter…

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类)

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类&#xff09; 分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类…

MySQL基础篇(三)数据库的修改 删除 备份恢复 查看连接情况

对数据库的修改主要指的是修改数据库的字符集&#xff0c;校验规则。 将test1数据库字符集改为gbk。 数据库的删除&#xff1a; 执行完该数据库就不存在了&#xff0c;对应数据库文件夹被删除&#xff0c;级联删除&#xff0c;里面的数据表全部被删除。 注意&#xff1a;不要随…

线程同步66666

1. 概述 当有多个线程访问同一个共享资源&#xff08;临界资源&#xff09;时&#xff0c;且不允许同时访问&#xff0c;那么就需要线程同步。常见的线程同步方式&#xff1a;互斥锁、读写锁、条件变量、信号量。 2. 互斥锁 互斥锁的方式可以简单概括为&#xff1a;锁定操作…

ros1仿真导航机器人 navigation

仅为学习记录和一些自己的思考&#xff0c;不具有参考意义。 1navigation导航框架 2导航设置过程 &#xff08;1&#xff09;启动仿真环境 roslaunch why_simulation why_robocup.launch &#xff08;2&#xff09;启动move_base导航、amcl定位 roslaunch why_simulation nav…