JVM 字节码是如何存储信息的?
JVM 字节码是 Java 虚拟机 (JVM) 执行的指令集,它是一种与平台无关的二进制格式,在任何支持 JVM 的平台上都可运行的Java 程序。 字节码存储信息的方式,主要通过以下几个关键组成部分和机制来实现:
1. 指令 (Opcodes) 和 操作数 (Operands):
- 指令 (Opcodes): 字节码的核心是指令集,每条指令都是一个单字节 (byte) 的数字编码,称为 操作码 (opcode)。 操作码定义了 JVM 需要执行的具体操作,例如:
- 算术运算:
iadd
(整数加法),isub
(整数减法),fmul
(浮点数乘法) 等。 - 数据加载和存储:
iload
(加载整数到操作数栈),istore
(将整数从操作数栈存储到局部变量表),getfield
(获取对象字段值) 等。 - 类型转换:
i2f
(整数转浮点数),l2i
(长整型转整型) 等。 - 方法调用:
invokevirtual
(调用虚方法),invokestatic
(调用静态方法),invokeinterface
(调用接口方法) 等。 - 控制流:
goto
(无条件跳转),ifeq
(如果等于 0 则跳转),return
(方法返回) 等。
- 算术运算:
- 操作数 (Operands): 有些指令需要额外的操作数 (operands) 来指定指令执行所需的参数或数据。 操作数紧跟在操作码之后,可以是:
- 字节 (byte): 例如,用于表示局部变量表的索引、常量池的索引等。
- 短整型 (short): 例如,用于表示分支指令的偏移量。
- 整型 (int): 例如,用于表示常量池的索引 (在某些指令中)。
- 常量池索引 (constant pool index): 指向常量池中特定项的索引,用于引用类名、方法名、字段名、字符串字面量、数值常量等。
案例:
// Java 源代码
public class Example {public static int add(int a, int b) {return a + b;}
}// 对应的 JVM 字节码 (简化表示)
// 方法 add 的字节码
0: iload_0 // 将局部变量 0 (a) 推入操作数栈
1: iload_1 // 将局部变量 1 (b) 推入操作数栈
2: iadd // 执行整数加法,栈顶两个值相加,结果推回栈顶
3: ireturn // 从方法返回,返回栈顶的整数值
在这个例子中:
iload_0
,iload_1
,iadd
,ireturn
都是操作码 (指令)。iload_0
和iload_1
的操作数是隐式的 (隐含了局部变量表的索引 0 和 1)。
2. 常量池 (Constant Pool):
- 关键的数据结构: 常量池是
.class
文件中的一个表结构,也是字节码存储信息的核心组成部分。 它存储了类、方法、字段、字符串字面量、数值常量等各种符号引用和字面量常量。 - 动态链接的基础: 常量池为 JVM 的动态链接机制提供了基础。 字节码中的指令通常通过常量池索引来引用程序中的各种符号和常量,而不是直接使用内存地址。 这使得字节码具有平台无关性,因为具体的内存地址在运行时才由 JVM 决定。
- 存储类型: 常量池中的每一项 (constant pool entry) 都有一个 tag 标识其类型,常见的类型包括:
CONSTANT_Class_info
: 类或接口的符号引用 (类名、接口名)。CONSTANT_Fieldref_info
: 字段的符号引用 (类名、字段名、字段描述符)。CONSTANT_Methodref_info
: 方法的符号引用 (类名、方法名、方法描述符)。CONSTANT_InterfaceMethodref_info
: 接口方法的符号引用。CONSTANT_String_info
: 字符串字面量。CONSTANT_Integer_info
,CONSTANT_Float_info
,CONSTANT_Long_info
,CONSTANT_Double_info
: 数值常量 (整数、浮点数、长整型、双精度浮点数)。CONSTANT_NameAndType_info
: 字段或方法名称和描述符。CONSTANT_Utf8_info
: UTF-8 编码的字符串 (用于存储类名、方法名、字段名等字符串)。- … (还有其他类型)
例子 (常量池引用):
// Java 源代码
public class Example {private String message = "Hello"; // 字符串字面量 "Hello"public void printMessage() {System.out.println(message); // 引用字段 message}
}// 对应的 JVM 字节码 (简化表示)
// ... (省略其他字节码)
// getfield 指令,操作数是常量池索引 #2
4: getfield #2 // Field Example.message:Ljava/lang/String;// 常量池 #2 项 (简化表示)
#2 = Fieldref #4.#5 // 字段引用#4 = Class #6 // 类名引用#5 = NameAndType #7:#8 // 名称和类型引用#6 = Utf8 Example // 类名字符串 "Example"#7 = Utf8 message // 字段名字符串 "message"#8 = Utf8 Ljava/lang/String; // 字段类型描述符 "Ljava/lang/String;"
在这个例子中:
getfield #2
指令使用常量池索引#2
来引用要访问的字段message
。- 常量池
#2
项是一个Fieldref
结构,它又通过其他常量池索引引用了类名、字段名和字段描述符等信息。 - 字符串字面量
"Hello"
也存储在常量池中 (例如,通过CONSTANT_String_info
和CONSTANT_Utf8_info
),并在需要时被引用。
3. 局部变量表 (Local Variable Table):
- 存储方法内的局部变量: 局部变量表是每个方法在运行时创建的栈帧 (stack frame) 的一部分。 它用于存储方法内部的局部变量,包括:
- 方法的参数 (arguments)。
- 方法体内部定义的局部变量。
- 数组结构: 局部变量表本质上是一个数组,每个数组元素可以存储一个 Java 的基本数据类型值 (int, float, long, double, byte, short, char, boolean) 或对象引用 (reference)。
- 索引访问: 字节码指令使用索引来访问局部变量表中的变量,例如
iload_0
加载索引为 0 的局部变量,istore_1
将值存储到索引为 1 的局部变量。
4. 操作数栈 (Operand Stack):
- 运算和操作的工作区: 操作数栈是每个方法栈帧的另一个重要组成部分。 它是一个后进先出 (LIFO) 的栈,用于:
- 存储指令的操作数: 指令执行时,会从操作数栈中弹出操作数。
- 存储指令的运算结果: 指令执行完毕后,会将结果压入操作数栈顶。
- 指令的执行流程: JVM 的字节码指令大多是基于栈的指令集。 指令通常会:
- 从局部变量表或常量池加载数据到操作数栈。
- 从操作数栈中弹出操作数进行运算。
- 将运算结果压入操作数栈。
- 将操作数栈顶的值存储到局部变量表或字段中,或者作为方法返回值返回。
5. 方法区 (Method Area) (元空间/永久代):
- 存储类元数据: 方法区 (在 JDK 8 及之后被元空间 Metaspace 取代,JDK 7 及之前为永久代 PermGen) 用于存储类的信息,包括:
- 类的结构信息: 例如,类的名称、父类、实现的接口、字段信息、方法信息、访问修饰符等。
- 运行时常量池 (Runtime Constant Pool): 每个类都有一个运行时常量池,它是
.class
文件常量池在运行时的表示形式,用于支持动态链接。 - 静态变量: 类的静态变量也存储在方法区中。
- JIT 编译后的代码: 即时编译器 (JIT Compiler) 编译后的本地机器码通常也存储在方法区中。
总结:
JVM 字节码通过以下方式存储信息:
- 指令集 (Opcodes): 定义了 JVM 要执行的操作,每条指令都是一个单字节编码。
- 操作数 (Operands): 为指令提供参数或数据,可以是字节、短整型、整型或常量池索引。
- 常量池 (Constant Pool): 存储了类、方法、字段、字符串字面量、数值常量等符号引用和字面量常量,是动态链接的基础。
- 局部变量表 (Local Variable Table): 存储方法内部的局部变量,包括参数和方法体内部定义的变量。
- 操作数栈 (Operand Stack): 作为指令运算和操作的工作区,存储指令的操作数和运算结果。
- 方法区 (Method Area) / 元空间 (Metaspace): 存储类的元数据信息,包括类结构、运行时常量池、静态变量等。
相关文章:
JVM 字节码是如何存储信息的?
JVM 字节码是 Java 虚拟机 (JVM) 执行的指令集,它是一种与平台无关的二进制格式,在任何支持 JVM 的平台上都可运行的Java 程序。 字节码存储信息的方式,主要通过以下几个关键组成部分和机制来实现: 1. 指令 (Opcodes) 和 操作数 …...
Linux:多路转接(上)——select
目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set exceptfds, struct timeval* timeout); 头文件:sys/time.h、sys/ty…...
如何解决DDoS攻击问题 ?—专业解决方案深度分析
本文深入解析DDoS攻击面临的挑战与解决策略,提供了一系列防御技术和实践建议,帮助企业加强其网络安全架构,有效防御DDoS攻击。从攻击的识别、防范措施到应急响应,为网络安全工作者提供了详细的操作指引。 DDoS攻击概览:…...
机器学习Python实战-第三章-分类问题-3.决策树算法
目录 3.3.1 原理简介 3.3.2 算法步骤 3.3.3 实战 3.3.4 实验 前半部分是理论介绍,后半部分是代码实践,可以选择性阅读。 决策树(decision tree)是功能强大而且相当受欢迎的分类和预估方法&…...
Spring三级缓存学习
Spring的三级缓存机制主要用于解决单例Bean的循环依赖问题。其核心在于提前暴露Bean的引用,允许未完全初始化的对象被其他Bean引用。以下是三级缓存的详细说明及其解决循环依赖的原理: 三级缓存结构 一级缓存(singletonObjects) 存…...
欧拉函数φ
函数作用 计算 1 1 1 ~ n n n中有多少个与 n n n互质的数。 函数公式 φ ( n ) n p 1 − 1 p 1 p 2 − 1 p 2 … … p m − 1 p m φ(n)n\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\times……\times\frac{p_m-1}{p_m} φ(n)np1p1−1p2p2−1……pmp…...
蓝桥杯刷题指南
蓝桥杯是中国普及性最好的计算机程序设计竞赛之一,参加者包括大学生、高中生和草根程序员等各个群体。通过刷题来提升自己的编程能力是参加蓝桥杯比赛的常见做法。下面是一些蓝桥杯常见的题型和刷题技巧,希望对大家有所帮助。 基础入门题目:…...
ctfshow WEB web12
发现只有这样一句话,应该是要看页面源代码的,右键查看页面源代码 发现可能存在代码执行漏洞,拼接一个?cmdphpinfo(); 成功显示出php信息, 说明存在代码执行漏洞 接下来遍历目录,我们要用到一个函数 glob() glob() 函数可以查找…...
ChromeOS 135 版本更新
ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命,ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization,可提供更多充电优化选项,…...
redis的缓存
redis的缓存 一.缓存简介1.缓存2.redis作为数据库(MySQL)缓存的原因 二.缓存更新策略1.定期生成2.实时生成3.内存淘汰策略1)FIFO(First In First Out) 先进先出2)LRU(Least Recently Used)淘汰最久未使用的3)LFU(Least…...
字符串与相应函数(上)
字符串处理函数分类 求字符串长度:strlen长度不受限制的字符串函数:strcpy,strcat,strcmp长度受限制的字符串函数:strncpy,strncat,strncmp字符串查找:strstr,strtok错误信息报告:strerror字符操作,内存操作函数&…...
【微知】Mellanox网卡网线插入后驱动的几个日志?(Cable plugged;IPv6 ... link becomes ready)
概要 本文是一个简单的信息记录。记录的是当服务器网卡的光模块插入后内核的日志打印。通过这种日志打印,可以在定位分析问题的时候,知道进行过一次模块插拔。 日志 截图版: 文字版: [32704.121294] mlx5_core 0000:01:00.0…...
spring security oauth2.0的四种模式
OAuth 2.0 定义了 4 种授权模式(Grant Type),用于不同场景下的令牌获取。以下是每种模式的详细说明、适用场景和对比: 一、授权码模式(Authorization Code Grant) 适用场景 • Web 应用(有后端…...
MyBatis-Plus 核心功能
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、条件构造器1、核心 Wrapper 类型基础查询示例SQL 查询使用 QueryWrapper 实现查询 更新操作示例场景一:基础更新SQL 查询使用 QueryWrapper 实现更新…...
阿里云实时计算Flink版产品体验测评
阿里云实时计算Flink版产品体验测评 什么是阿里云实时计算Flink应用场景实时计算Flink&自建Flink集群性价比开发效率运维管理企业安全 场景落地 什么是阿里云实时计算Flink 实时计算Flink大家可能并不陌生,在实时数据处理上,可能会有所接触…...
少儿编程 scratch四级真题 2025年3月电子学会图形化编程等级考试Scratch四级真题解析(判断题)
2025年3月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 11、小圆点角色的程序如下左图所示,程序运行后的效果如下右图所示,自制积木中又调用了自己,这种算法叫做递归。 答案&a…...
【连载3】基础智能体的进展与挑战综述
基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 2. 认知 人类认知是一种复杂的信息处理系统,它通过多个专门的神经回路协调运行…...
Schaefer 400图谱
图谱下载: https://github.com/ThomasYeoLab/CBIG/tree/master/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI 图 (第一行)显示了 Yeo et al. (2011) 的 7 网络和 17 网络分包。图…...
通过uri获取文件路径手机适配
青铜版本 return contentResolver.query(this, arrayOf(MediaStore.MediaColumns.DATA), null, null).let {if (it?.moveToFirst() true) {val columnIndex it.getColumnIndex(MediaStore.MediaColumns.DATA)val path it.getString(columnIndex)it.close()return path}&quo…...
Ubuntu 22.04 完美安装 ABAQUS 教程:从零到上手,解决兼容问题
教程概述与安装准备 本教程详细介绍了在 Ubuntu 22.04 系统上安装 ABAQUS 2023 及 ifort 2021 的步骤,并实现用户子程序的链接。教程同样适用于 ABAQUS 2021(需相应调整文件名和路径)以及 Ubuntu 18.04 至 22.04 系统,尽管未在所有版本上测试。需要注意的是,Intel 的 One…...
雷池WAF防火墙如何构筑DDoS防护矩阵?——解读智能语义解析对抗新型流量攻击
本文深度解析雷池WAF防火墙在DDoS攻防中的技术突破,通过智能语义解析、动态基线建模、协同防护体系三大核心技术,实现从流量特征识别到攻击意图预判的进化。结合2023年金融行业混合攻击防御案例,揭示新一代WAF如何通过协议级漏洞预判与AI行为…...
Linux权限理解
1.shell命令以及运行原理 下面来介绍一个话题,关于指令的运行原理,这里先简单理解就可以。当我们登上Linux后: yxx这里称之为用户名,VM-8-2-centos是主机名,~是当前目录,$是命令行提示符。 其中我们把上面的…...
使用labelme进行实例分割标注
前言 最近在学习实例分割算法,参考b站视频课教程,使用labelme标注数据集,在csdn找到相关教程进行数据集格式转换,按照相关目标检测网络对数据集格式的训练要求划分数据集。 1.使用labelme标注图片 在网上随便找了几张蘑菇图片&am…...
策略模式实现 Bean 注入时怎么知道具体注入的是哪个 Bean?
Autowire Resource 的区别 1.来源不同:其中 Autowire 是 Spring2.5 定义的注解,而 Resource 是 Java 定义的注解 2.依赖查找的顺序不同: 依赖注入的功能,是通过先在 Spring IoC 容器中查找对象,再将对象注入引入到当…...
PromptUp 网站介绍:AI助力,轻松创作
1. 网站定位与核心功能 promptup.net 可能是一个面向 创作者、设计师、营销人员及艺术爱好者 的AI辅助创作平台,主打 零门槛、智能化的内容生成与优化。其核心功能可能包括: AI艺术创作:通过输入关键词、选择主题或拖放模板,快速生成风格多样的数字艺术作品(如插画、海报…...
软件架构评估利器:质量效用树全解析
质量效用树是软件架构评估中的一种重要工具,它有助于系统地分析和评估软件架构在满足各种质量属性方面的表现。以下是关于质量效用树的详细介绍: 一、定义与作用 质量效用树是一种以树形结构来表示软件质量属性及其相关效用的模型。它将软件的质量目标…...
XILINX DDR3专题---(1)IP核时钟框架介绍
1.什么是Reference Clock,这个时钟一定是200MHz吗? 2.为什么APP_DATA是128bit,怎么算出来的? 3.APP :MEM的比值一定是1:4吗? 4.NO BUFFER是什么意思? 5.什么情况下Reference Clock的时钟源可…...
ubuntu 2204 安装 vcs 2018
安装评估 系统 : Ubuntu 22.04.1 LTS 磁盘 : ubuntu 自身占用了 9.9G , 按照如下步骤 安装后 , 安装后的软件 占用 13.1G 仓库 : 由于安装 libpng12-0 , 添加了一个仓库 安装包 : 安装了多个包(lsb及其依赖包 libpng12-0)安装步骤 参考 ubuntu2018 安装 vcs2018 安装该…...
Python与去中心化存储:从理论到实战的全景指南【无标题】
Python与去中心化存储:从理论到实战的全景指南 随着区块链技术和Web3理念的兴起,去中心化存储逐渐成为构建新型互联网的核心模块之一。传统中心化存储的模式存在易被攻击、单点故障和高昂成本等问题,而去中心化存储通过分布式架构实现了更高的安全性、可靠性和数据透明度。…...
C++语言程序设计——01 C++程序基本结构
目录 编程语言一、C程序执行过程二、C基础框架三、输出语句cout换行 四、注释方法 编程语言 我们知道c是一门编程语言,它是在c语言的基础上发展而来,添加了类、对象、继承、多态等概念,我们可以称为它是一种面向对象编程的语言。 不过在学习…...
Unity UI中的Pixels Per Unit
Pixels Per Unit在图片导入到Unity的时候,将图片格式设置为Sprite的情况下会出现,其意思是精灵中的多少像素对应世界中的一个单位,默认是100 1. 对于在世界坐标中 在世界坐标中,一般对于Sprite的应用是Sprite Renderer组件 使…...
(十八)安卓开发中的后端接口调用详讲解
在安卓开发中,后端接口调用是连接移动应用与服务器的重要环节,用于实现数据的获取、提交和处理。本文将详细讲解安卓开发中后端接口调用的步骤,结合代码示例和具体的使用场景,帮助你全面理解这一过程。 什么是后端接口?…...
使用freebsd-update 升级FreeBSD从FreeBSD 14.1-RELEASE-p5到FreeBSD 14.2-RELEASE
使用freebsd-update 升级FreeBSD从FreeBSD 14.1-RELEASE-p5到FreeBSD 14.2-RELEASE 先升级小版本 准备升级前,先把当前的小版本升级到顶,比如现在是FreeBSD 14.1-RELEASE-p5,先升级到最新的14.1版本,使用命令: # fr…...
基础排序算法(三傻排序)
1. 选择排序 原理:每次从未排序部分选出最小(或最大)元素,放到已排序部分的末尾。时间复杂度:O(n),效率低但实现简单,适合小规模数据。 //选择排序public static void selectSort(int[] arr){i…...
五分钟了解智能体
在2025年人工智能技术全面渗透社会的背景下,“智能体”(Agent)已成为推动第四次工业革命的核心概念之一。从自动驾驶汽车到医疗诊断系统,从智能家居中枢到金融量化交易平台,智能体正在重构人类与技术交互的方式。本文将…...
【机器学习】笔记| 通俗易懂讲解:生成模型和判别模型|01
博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾:【科研小白系列】这些基础linux命令,你都掌握了嘛?每日一言🌼: “脑袋想不明白的,就用脚想”—…...
Jieba分词的原理及应用(三)
前言 “结巴”中文分词:做最好的 Python 中文分词组件 上一篇文章讲了使用TF-IDF分类器范式进行企业级文本分类的案例。其中提到了中文场景不比英文场景,在喂给模型之前需要进行分词操作。 分词的手段有很多,其中最常用的手段还是Jieba库进行…...
神经网络背后的数学原理
神经网络背后的数学原理 数学建模神经网络数学原理 数学建模 标题民科味道满满。其实这篇小短文就是自我娱乐。 物理世界是物种多样,千姿百态。可以从不同的看待眼中的世界,包括音乐、绘画、舞蹈、雕塑等各种艺术形式。但这些主观的呈现虽然在各人眼中…...
常用图像滤波及色彩调节操作(Opencv)
1. 常用滤波/模糊操作 import cv2 import numpy as np import matplotlib.pyplot as plotimg cv2.imread("tmp.jpg") img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_g cv2.GaussianBlur(img, (7,7), 0) img_mb cv2.medianBlur(img, ksize7) #中指滤波 img_bm …...
FFMPEG和opencv的编译
首先 sudo apt-get update -qq && sudo apt-get -y install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libgnutls28-dev libmp3lame-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-de…...
用户登录不上linux服务器
一般出现这种问题,重新用root用户修改lsy用户的密码即可登录,但是当修改了还是登录不了的时候,去修改一个文件用root才能修改, 然后在最后添加上改用户的名字,例如 原本是只有user的,现在我加上了lsy了&a…...
【项目管理】第11章 项目成本管理-- 知识点整理
相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 (二)知识笔记 第11章 项目成本管理 1.管理基础…...
Python中的strip()
文章目录 基本语法:示例:1. 默认移除空白字符:2. 移除指定字符:3. 不修改原字符串: 相关方法:示例: 注意事项: 在 Python 中, strip() 是一个字符串方法,用于…...
设计模式 Day 9:命令模式(Command Pattern)完整讲解与实战应用
🔄 回顾 Day 8:策略模式 在 Day 8 中我们讲解了策略模式: 用于封装多个可切换的算法逻辑,让调用者在运行时选择合适的策略。它强调的是“行为选择”,是针对“算法或行为差异”而设计。通过 PaymentStrategy、路径规划…...
【正点原子】STM32MP257 同构多核架构下的 ADC 电压采集与处理应用开发实战
在嵌入式系统中,ADC模拟电压的读取是常见的需求。如何高效、并发、且可控地完成数据采集与处理?本篇文章通过双线程分别绑定在 Linux 系统的不同 CPU 核心上,采集 /sys/bus/iio 接口的 ADC 原始值与缩放系数 scale,并在另一个核上…...
区块链从专家到小白
文章目录 含义应用场景典型特征 含义 以非对称加密算法为基础。 每个**区块(Block)**包含: 交易数据(如转账记录、合约内容)。 时间戳(记录生成时间)。 哈希值(当前区…...
记录centos8安装宝塔过程(两个脚本)
1、切换系统源(方便使用宝塔安装脚本下载) bash <(curl -sSL https://linuxmirrors.cn/main.sh) 2、宝塔安装脚本在宝塔的官网 宝塔面板下载,免费全能的服务器运维软件 根据自己的系统选择相应的脚本 urlhttps://download.bt.cn/insta…...
DAY 42 leetcode 151--哈希表.反转字符串中的单词
题号151 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 我的解法 暴力解法,先将String转为字…...
[VTK] 四元素实现旋转平移
VTK 实现旋转,有四元数的方案,也有 vtkTransform 的方案;主要示例代码如下: //构造旋转四元数vtkQuaterniond rotation;rotation.SetRotationAngleAndAxis(vtkMath::RadiansFromDegrees(90.0),0.0, 1.0, 0.0);//构造旋转点四元数v…...
AI大模型:(二)2.2 分词器Tokenizer
目录 1.分词技术的发展 2.分词器原理 2.1.基于词分词 2.2.基于字符分词 2.3.基于子词分词 3.手搓Byte-Pair Encoding (BPE)分词及训练 3.1.Byte-Pair Encoding (BPE)分词原理 3.2.手搓Byte-Pair Encoding (BPE)分词器 4.如何选择已有的分词器 1. 常见子词分词器及特点…...