类文件结构和类加载机制

Python实现国密ZUC算法:从原理到代码,一步步带你跑通加密流程 本文详细解析了国密ZUC算法的核心原理,并通过Python代码实现从初始化到密钥流生成的全流程。ZUC算法作为我国自主设计的流密码标准,结合LFSR和非线性函数F,适用于5G通信、物联网等高实时性场景。文章包含完整的代码实现、验证测试案例及性能优化技巧,帮助开发者深入理解并应用这一加密技术。 阅读详情

类文件结构:

Overview:
  • java虚拟机只和Class 文件这种特定的二进制文件格式所关联,以实现语言无关性。
  • Class文件中包含了java虚拟机指令集和符号表以及若干其他辅助信息,任何一门功能性语言都可以表示为一个能被Java虚拟机所接受的有效的Class文件
  • 字节码命令所能提供的语义描述能力要比java更加强大,java中的各种变量,关键字和运算符号的语义最终都由多条字节码命令组合而成
  • java虚拟机执行字节码引擎是基于栈的体系结构。
  • java字节码放弃了操作数长度对齐,就意味可以省略很多填充和间隔符号。
  • Class文件所具备的平台独立性(不依赖于特定的硬件和操作系统),紧凑,稳定和可扩展的特点,是Java技术体系实现平台无关,语言无关两项特性的重要支柱。
Class文件结构:
  • 任何一个class文件都对应着唯一一个类或者接口的定义信息。
  • class文件是一组以8位字节为基础单位的二进制流。
  • 整个class文件本质上就是一张表:
    • 表是由多个无符号数或者其他表作为数据项构成的复合数据类型。表用于描述有层次关系的复合结构的数据
    • 无符号数属于基本的数据类型,可以用来描述数字,索引引用,数量值或者utf-8编码的字符串
  • 魔数:4字节,表示这个文件是不是一个class文件。
  • 次要版本号和主要版本号。
  • 常量池。存放字面量和符号引用。常量中的每一项都是一个表。
  • 字面量: 字符串,声明为final的常量等
  • 符号引用:
    • 类和接口的全限定名
    • 字段的名称和描述符
    • 方法的名称和描述符
  • 虚拟机加载class文件时进行动态连接,在class文件中不保存各个方法字段的最终内存布局。 在运行的时解析。
  • Class文件格式:
    Class文件格式
字节码指令简介
  • java虚拟机指令由一个字节长度的操作码和跟随其后的零至多个此操作所需参数构成
  • java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数指令都不包含操作数,只有一个操作码
  • class文件格式放弃了编译后代码的操作数长度对齐,意味着可以省略很多填充和间隔符号,但对于超过一个字节的数据,却不得不在运行时从字节中重建出具体数据的结构,这种操作导致解释执行字节码时损失了一些性能
  • 大多数对于boolean,byte,short和char类型数据的操作,实际上都是使用相应的int类型作为运算类型

虚拟机类加载机制

overview:
  • 定义:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。
  • 特点:java语言中,类型的加载,连接和初始化过程都是在程序运行期间完成的,这样为java应用程序提供了高度的灵活性; java可以动态扩展就是依赖于运行期动态加载和动态连接两个特性实现的
  • 加载过程中各个步骤互相交叉的混合进行。

类加载过程:

这里写图片描述

  • 加载过程: 一个类必须与类加载器一起确定唯一性

    1. 通过一个类的全限定名获得定义此类的二进制字节流(字节码)**
    2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
    3. 生成java.lang.Class对象(放在方法区中),作为方法区中这个类的各种数据的访问入口。
  • 验证: 为了保证class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

    1. 文件格式验证,这阶段的验证是基于二进制字节流进行的,只有通过这个阶段,字节流才会进入内存的方法区中进行存储
    2. 元数据验证,主要目的是对类的元数据信息进行语义校验,保证元数据符合java语言规范
    3. 字节码验证,通过数据流和控制流分析,确定程序语义是合法的,如对类的方法进行校验
    4. 符号引用验证,发生在虚拟机将符号引用转化为直接引用的时候;目的是为了确保解析动作能正常执行
  • 准备:正式为类变量(static)分配内存,设置类变量(static)初始值(0值,具体的值在初始化阶段后执行,如果是final,则在此阶段赋值)的阶段。

  • 解析:虚拟机将池中的符号引用替换为直接引用的过程。
    备注:由于class会保存符号引用用于描述方法字段等,而不会储存各个方法,字段的最终内存布局,所以需要进行运行的转换才可以使用。

    符号引用(描述目标):以一组符号来描述所引用的目标,符号是任意形式的字面量。
    直接引用(找到目标):可以直接指向目标的指针,偏移量等。

  • 初始化:到了该阶段,才真正开始执行类中定义的Java程序代码。或者说初始化阶是执行类构造器()方法(由编译器收集类中的静态变量的赋动作和静语句块合并而成)的过程。

    • 对于静态字段,只有直接定义这个字段的类才会被初始化。
    • 当一个类在初始化时,要求其父类全部都已经初始化过了。
    • 一个接口在初始化的时,并不要求其父接都完成了初始化,只有在真正使用到父接口的时候才会初始化。
  • 类加载器(用于实现类的加载动作):

    • 定义:类加载器用于“通过一个类的全限定名来获取描述此类的二进制字节流”的动作。
    • 对于任意一个类,都需要由加载它的类加载器和这个类本身一起确定其在java虚拟机中的唯一性,这适用于equals,isAssignableFrom,isInstance,instanceof方法
    • 每一个类加载器,都拥有一个独立的命名空间
    • 类加载器的双亲委派模型:
      1. 2种类加载器: (1)启动类加载器,是虚拟机的一部分,c++实现 (2)独立于虚拟机外部由java实现的类加载器,都继承自java.lang.ClassLoader
      2. 一个类加载器将请求交给父亲加载器去完成,每一个层次的加载器都是如此。只父亲无法加载时,才由儿子加载。这基于前提,一个类由它自己和加载它的类加载器唯一确定;
      3. 双亲委派模型很好的解决了各个类加载器的基础类的统一问题(越基础的类由越上层的加载器进行加载)。
深度解析NXP AMCLIB状态观测器:PMSM无感FOC控制实战指南 状态观测器是现代电机控制中的核心算法,它基于电机数学模型,通过测量定子电压和电流,实时估算出转子的位置和速度,从而替代了传统的物理传感器。其原理遵循“预测-校正”的闭环结构,通过比较模型预测值与实际采样值的误差,不断修正内部状态估计。这项技术的核心价值在于实现了无传感器控制,显著降低了系统成本、提升了可靠性与紧凑性,广泛应用于伺服驱动、变频器、电动汽车和家电等领域。本文聚焦于NXP AMCLIB库中的角度跟踪观测器和反电动势观测器,深入剖析其设计思路、固定点运算实现以及参数整定方法,为工程师在永磁同步电机无 阅读详情

相关推荐

QT与Coin3D实现机器人的仿真

前言 Coin3D编程环境配置好后,开始下一步的机器人仿真任务。本文根据在研5轴机器人,完成三维模型生成与机器人的仿真。主要参考博主冯Jungle的博客,在此表示感谢。 ——2021.05.23 环境 Win10:VS2019、QT5.15.2、Coin3D、SolidWorks2016 机器人三维模型生成 目前广泛应用于因特网的VRML ( Virtual Reality Modeling Language,虚拟现实建模语言)为用户提供一种可参与的、并能对场景中对象主动做出反应的虚拟现实环境,现已成

焦露的博客 6906

字节码指令简介

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode) 以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成。由于Java虚拟机采用 面向操作数栈而不是面向寄存器的架构(这两种架构的执行过程、区别和影响将在第8章中探讨),所 以大多数指令都不包含操作数,只有一个操作码,指令参数都存放在操作数栈中。 字节码指令集可算是一种具有鲜明特点、优势和劣势均很突出的指令集架构,由于限制了Java虚 拟机操作码的长度为一个字节(即0~255),这意味着指令集

通往神秘的道路的专栏 1939

数据中心GPU芯片性能参数速查表(Nvidia+国产算力卡)

本文提供了一份数据中心GPU芯片性能参数速查表,涵盖Nvidia与国产算力卡两大阵营。文章详细解读了算力、显存、互连技术及功耗等关键性能指标,并对比了A100、H100、昇腾910B等主流型号,旨在帮助用户根据AI训练、推理等实际场景,做出高效的硬件选型与成本评估决策。

a0b1c2d3的专栏 835

读薄《深入理解 Java 虚拟机》 类文件结构

Class 文件是一组以 8 字节为基础单位的二进制流,各项数据以严格的顺序排列,中间没有任何分隔符,使得整个 class 文件中存储的内容几乎是程序运行的全部必要数据。 Class 文件格式采用一种类似于 C 语言结构体的微结构来存储数据,这种伪结构中只有两种数据结构无符号数和表。 无符号数: 基本的数据类型,以 u1,u2,u4,u8 来表示 1 个字节,2 个字节,4个字节,8个字节的无符号...

weixin_43614882的博客 165

win10离线安装.NetFrameWork3.5出现0x800F081F解决办法。

由于公司开发环境是内网,并且安装arcgis10.2又需要.NetFrameWork3.5的环境,安装.NetFrameWork3.5的又总是报错“0x800F081F”找不到源文件。折腾了两天总算解决了。 首先我们能在网上搜索到的教程,你一定看到过这样的教程,就是使用下面的命令来进行安装。 dism /online /Enable-Feature /Featu...

AIGIS的博客 1万+

大数据面试 逻辑题

逻辑题大致分为比较逻辑题、分析逻辑题、综合逻辑题、抽象逻辑题、概括逻辑题、推理逻辑题、论证逻辑题等,由于这类题比较考验综合素质,因此也一直是各大企业笔试、面试时经常喜欢考察的题目类型之一。很多童鞋认为逻辑题很难,其实不然。多做练习,打开思路,这类题还是可以轻易化解的。 下面为大家整理了网络上最全的75道逻辑判断测试题。在每道题目下方有答案,是用白色显示的,反选就可以看到啦~ 【1】假设有一个池...

zzq_0916s的博客 4421

JVM:类文件结构和类加载机制

实现语言无关性的基础是虚拟机和字节码存储格式,Java编译器可以把Java代码编译为存储字节码的class文件。   1、Calss文件结构: https://www.cnblogs.com/wade-luffy/p/5929325.html 2、类加载 虚拟机的类加载机制:虚拟机把描述类的数据从class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以在虚拟机直接...

Terry8000的博客 229

【一文搞懂几种常用推荐算法】

协同过滤:适合用户-物品交互数据丰富的场景。矩阵分解:能处理稀疏数据,适合显式评分预测。基于内容:依赖物品特征,解决冷启动问题。NMF:适用于非负数据(如点击率、购买记录)。根据实际需求选择算法,或结合多种方法构建混合推荐系统。

专注技术的博主 2635

深入理解Java虚拟机(三)-----类文件结构和类加载机制

类文件结构虚拟机在对编译代码的时候会产生字节码的文件,也就是class文件,这个字节码文件的产生是java虚拟机实战跨平台语言操作的重要原因。 首先,这个class文件是一组由8个字节为基础单位的二进制流。它里面依次包括魔数和class文件版本、常量池、访问标志、类索引、父类索引与接口索引集合、字段表集合、方法表集合、属性表集合重点理解常量池和字段表常量池:class文件的资源仓库,它里面存放着很

1Q84emo的博客 242

独立站SaaS平台源码搭建全流程指南:从零到部署

一、什么是独立站SaaS?二、搭建前的准备工作技术选型建议模块 推荐方案 备选方案前端框架 React/Vue3 + TypeScript Angular后端框架 Spring Boot (Java)/Django (Python) Node.js (NestJS)数据库 MySQL + Redis PostgreSQL/MongoDB云服务 阿里云/腾讯云/AWS 华为云容器化 Docker + Kubernetes Docker Compose环境要求。

Vx18664956126的博客 1891

从零搭建企业级AI网关:基于LiteLLM的安全防护体系设计

本文详细介绍了如何从零搭建企业级AI网关,基于LiteLLM构建全面的安全防护体系。内容涵盖分层防御架构、敏感数据处理、合规性配置与审计追踪,以及生产环境部署策略,助力企业安全高效地集成LLM技术,确保数据安全和合规性。

qq_27496129的博客 1291

深入理解Java虚拟机:Jvm总结-类文件结构以及类加载机制

代码编译的结果从本地机器码转变为字节码,冲破了平台界限。

Oceáno的博客 1496

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

类文件结构,类加载机制

   上一章讲的GC垃圾回收机制以及算法和收集器,这一章节来看一下类文件结构,类加载机制。  一.类文件结构    都知道类文件是可以由.java文件通过编译器编译成.class文件,当并非只有一种方式,java虚拟机是支持跨平台的,也可以其他语言编译生成class文件,甚至可以自己通过16进制编辑器来写class文件。弹药自己写class文件,格式掌握是必不可少的。class文件是...

dianta9252的博客 99

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【JAVA 学习笔记】java类文件及类加载 探究

前言 文章仅是笔者个人的学习笔记,存在一些只有笔者个人能看到的用词或者描述,如果有不明确的地方,欢迎留言,理性讨论。 一、类文件结构 说实话这东西真的非常枯燥,就像一个字典一样。 类文件结构(.class文件)是java平台无关性的基石。 “.class文件”也并非特指某个存在于 具体磁盘中的文件,而应当是一串二进制字节流,就是它可以不是一个确切的文件。 从定义好 .class 文件的结构开始(97年,和笔者差不多大了),这么多年它的结构一直没有大的重构过,这确实是很不容易的一件事。 不过了解了它的实现

tulensa的博客 380

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JVM——类加载与字节码技术—类文件结构

什么狗屎玩意,总结一下就是了解规则根据数字查表

测试 837

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JVM类加载机制解析

场景问题:在一个大型企业级应用中,开发团队正在使用Java语言进行系统开发。在项目初期,团队成员对JVM的加载过程理解不深,导致在项目部署和运行过程中频繁出现类加载失败、类定义冲突等问题。这些问题不仅影响了项目的进度,还增加了维护成本。为了解决这些问题,团队决定深入研究JVM的加载过程,以确保项目的稳定性和高效性。知识点介绍:介绍JVM核心知识点之加载过程:概述的重要性,是因为它是Java虚拟机执行Java程序的基础。

JavaCodePro的博客 1040

Java类加载机制

1.JDK/JRE/JVM的关系:   JDK 8是JRE 8的超集,包含了JRE 8中的所有内容,编译器和调试器等开发applet和应用程序。JRE 8提供了库、Java虚拟机(JVM)和运行用Java编程编写的applet和应用程序的其他组件语言。注意,JRE包含了Java SE不需要的组件,规范,包括标准和非标准Java组件。   目前工作中常用的JDK版本为1.8,所以定位到官网...

吴振照 1030

类文件结构&虚拟机类加载机制·虚拟机学习笔记【三】

目录class类文件结构魔数与class文件的版本(魔数:确定这个文件是否为一个能被虚拟机接受的class文件)常量池:class文件之中的资源仓库访问标志:识别一些类或者接口层次的访问信息类索引,父类索引与接口索引集合:确定这个类的继承关系字段表集合:用于描述接口或者类中声明的变量方法表集合属性表集合 class类文件结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,反过来说,类或者说接口并不一定都得定义在文件里。(比如类和接口也可以通过类加载器直接生成) 魔数与class文件的版本(魔

CSL201816080304的博客 236

JVM虚拟机深入理解----类文件结构和虚拟机加载机制

一.类文件结构 对于类文件结构,笔者认为没必要太过多的深入,意义不大,了解即可; java虚拟机提供的语言无关性,使用java编译器可以把java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器意义可以把程序代码编译成class文件,虚拟机并不关心Class的文件来自于何种语言: 二.虚拟机类加载机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命...

moxiaolin的博客 296

jvm 虚拟机执行子系统 类文件结构

虚拟机执行子系统 类文件结构 无关性基石 (了解性知识) 平台无关性 各种不同平台的Java虚拟机, 以及所有平台都统一支持的程序存储格式——字节码(Byte Code)是构成平台无关性的基石 语言无关性 仍然是虚拟机和字节码存储格式 Class文件结构 Class文件是一组以8个字节为基础单位的二进制流 各个数据项目严格按照顺序紧凑地排列在文件之中, 中间没有添加任何分隔符, 这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据, 没有空隙存在。 当遇到需要占

weixin_44577413的博客 182

类文件的结构、JVM 的类加载过程、类加载机制、类加载器、双亲委派模型

一、类文件的结构 我们都知道,各种不同平台的虚拟机,都支持 “字节码 Byte Code” 这种程序存储格式,这构成了 Java 平台无关性的基石。甚至现在平台无关性也开始演变出 “语言无关性” ,就是其他语言也可以运行在 Java 虚拟机之上,比如现在的 Kotlin、Scala 等。 实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java 虚拟机步包括 Java 语言在内的任何语言绑定,他只和 “Class 文件” 这种特定的二进制文件格式所关联,Class 文件中包含了 Java 虚拟机指令集、符

LifeGoesOn 283

【JVM|类加载】第三天

摘要:本文系统介绍了Java类文件结构与类加载机制。类文件包含魔数、版本信息、常量池等基本结构,并通过字节码示例解析了"i=i++"结果为0的原因。类加载过程分为加载、连接(验证、准备、解析)、初始化等阶段,涉及方法区InstanceKlass和堆区Class对象的创建。重点分析了双亲委派机制的工作原理及其安全性保障,包括启动类、扩展类和应用程序类加载器的协作关系。最后探讨了JDK9模块化设计带来的变化。全文通过字节码指令和内存模型深入揭示了Java类加载的底层实现原理。

MuYiLuck的博客 1113

JVM(三)类文件结构、类加载机制

Class文件结构、4种类加载器、双亲委派模型、栈帧结构

HK的博客 1280

深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)

深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎) 目录 1.类文件结构 1.1 Class类文件结构 1.2 魔数与Class文件的版本 1.3 常量池 1.4 访问标志 1.5 类索引、父索引与接口索引集合 1.6 字段表集合 1.7 方法集合 1.8 属性表集 1.8.1 Code属性 1.8.2 Exception属性 1....

weixin_30628077的博客 136
上一篇: 程序编译与代码优化
下一篇: 高效并发
登徒梦
博客等级 码龄13年 19粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值