JVM指令集
概述
JVM,Java Virtual Machine,Java虚拟机器,作为一台独立的机器,一般包括独立的指令集、独立的存储体系以及适合机器自身的运算方式,本章节主要是描述JVM指令的功能与作用。
JVM的每个指令的格式是【指令 操作数1操作数2…】,其中,JVM为每个指令分配一个opcode,即操作码,使用16进制格式表示,每个操作数都对类型进行约束,JVM在运行时,执行类字节码对应指令的过程中,发生错误时都会抛出VirtualMachineError的异常信息,该异常对应的子类如下所示:
| InternalError: JVM内部错误,包括JVM执行软件的过程中发生错误、JVM底层的主机软硬件系统发生错误 |
| OutOfMemoryError: JVM堆内存溢出错误,JVM在运行过程中所需要占用的总堆内存空间大小超出JVM虚拟内存或者物理内存的总空间大小,内存管理器不能为新建的对象申请足够的内存空间大小 |
| StackOverflowError: JVM栈内存溢出错误,JVM在运行过程中一个线程所需要占用的栈内存空间大小超出事先设定的总空间大小,一般情况下,因为程序无限的递归调用而发生程序执行的错误 |
| UnknownError: JVM未知错误,JVM在运行过程中发生错误,但是JVM未能报告实际的异常或者错误 |
指令集(部分)
| 指令名称:aload 功能描述:根据数组索引位从数组中加载引用 |
| 指令名称:astore 功能描述:将引用存入到数组对应的索引位 |
| 指令名称:aload_<n> 功能描述:加载本地变量到操作数栈中,其中,n表示从0开始的正整数,表示第n个本地变量 |
| 指令名称:anewarray 功能描述:创建一个指定大小的引用数组 |
| 指令名称:areturn 功能描述:从方法中返回一个引用 |
| 指令名称:arraylength 功能描述:获取一个数组的引用 |
| 指令名称:astore 功能描述:将一个引用存储到本地变量 |
| 指令名称:astore_<n> 功能描述:将一个引用存储到本地变量,其中,n表示从0开始的正整数,表示第n个本地变量 |
| 指令名称:athrow 功能描述:抛出一个异常或者错误 |
| 指令名称:baload 功能描述:从数组中加载一个字节类型或者布尔类型 |
| 指令名称:bastore 功能描述:存储一个字节类型或者布尔类型到数组指定的索引位 |
| 指令名称:bipush 功能描述:将一个字节类型压入到操作数栈中 |
| 指令名称:caload 功能描述:从字符数组中加载一个字符 |
| 指令名称:castore 功能描述:将一个字符存储到字符数组中 |
| 指令名称:checkcast 功能描述:检查一个引用是否是给定的类型,其中,引用类型包括类、数组或者接口 |
| 指令名称:d2f 功能描述:将一个double类型转换成float类型 |
| 指令名称:d2i 功能描述:将一个double类型转换成int类型 |
| 指令名称:d2l 功能描述:将一个double类型转换成long类型 |
| 指令名称:dadd 功能描述:将两个double类型相加 |
| 指令名称:daload 功能描述:从double类型数组中加载一个double类型 |
| 指令名称:dastore 功能描述:将一个double类型存储到double类型的数组中 |
| 指令名称:dcmp<op> 功能描述:比较两个double类型的大小,其中,op是操作符,g表示大于,l表示小于 |
| 指令名称:dconst_<d> 功能描述:将一个double类型的常量压入操作数栈,其中,d的值包括0或者1,表示第几个常量 |
| 指令名称:ddiv 功能描述:两个double类型相除 |
| 指令名称:dload 功能描述:加载一个double类型的本地变量 |
| 指令名称:dload_<n> 功能描述:加载一个double类型的本地变量,其中,n表示从0开始的正整数,表示第n个本地变量 |
| 指令名称:dmul 功能描述:将两个double类型相乘 |
| 指令名称:dneg 功能描述:对一个double类型取负值 |
| 指令名称:drem 功能描述:对一个double类型取余 |
| 指令名称:dreturn 功能描述:在一个方法中返回一个double类型 |
| 指令名称:dstore 功能描述:将一个double类型存储到本地变量中 |
| 指令名称:dstore_<n> 功能描述:将一个double类型存储到本地变量中,其中,n表示从0开始的正整数,表示第n个本地变量 |
| 指令名称:dsub 功能描述:将两个double类型相减 |
| 指令名称:dup 功能描述:复制一个操作数栈顶的操作数类型 |
| 指令名称:dup_x1 功能描述:复制一个操作数栈顶的操作数类型,并将新复制的操作数类型插入到操作数栈顶以下的索引位2(从0开始) |
| 指令名称:dup_x2 功能描述:复制一个操作数栈顶的操作数类型,并将新复制的操作数类型插入到操作数栈顶以下的索引位2或者3(从0开始) |
指令集分类
| Constants 常量类 |
| 00 (0x00) nop 01 (0x01) aconst_null 02 (0x02) iconst_m1 03 (0x03) iconst_0 04 (0x04) iconst_1 05 (0x05) iconst_2 06 (0x06) iconst_3 07 (0x07) iconst_4 08 (0x08) iconst_5 09 (0x09) lconst_0 10 (0x0a) lconst_1 11 (0x0b) fconst_0 12 (0x0c) fconst_1 13 (0x0d) fconst_2 14 (0x0e) dconst_0 15 (0x0f) dconst_1 16 (0x10) bipush 17 (0x11) sipush 18 (0x12) ldc 19 (0x13) ldc_w 20 (0x14) ldc2_w |
| Loads 加载类 |
| 21 (0x15) iload 22 (0x16) lload 23 (0x17) fload 24 (0x18) dload 25 (0x19) aload 26 (0x1a) iload_0 27 (0x1b) iload_1 28 (0x1c) iload_2 29 (0x1d) iload_3 30 (0x1e) lload_0 31 (0x1f) lload_1 32 (0x20) lload_2 33 (0x21) lload_3 34 (0x22) fload_0 35 (0x23) fload_1 36 (0x24) fload_2 37 (0x25) fload_3 38 (0x26) dload_0 39 (0x27) dload_1 40 (0x28) dload_2 41 (0x29) dload_3 42 (0x2a) aload_0 43 (0x2b) aload_1 44 (0x2c) aload_2 45 (0x2d) aload_3 46 (0x2e) iaload 47 (0x2f) laload 48 (0x30) faload 49 (0x31) daload 50 (0x32) aaload 51 (0x33) baload 52 (0x34) caload 53 (0x35) saload |
| Stores 存储类 |
| 54 (0x36) istore 55 (0x37) lstore 56 (0x38) fstore 57 (0x39) dstore 58 (0x3a) astore 59 (0x3b) istore_0 60 (0x3c) istore_1 61 (0x3d) istore_2 62 (0x3e) istore_3 63 (0x3f) lstore_0 64 (0x40) lstore_1 65 (0x41) lstore_2 66 (0x42) lstore_3 67 (0x43) fstore_0 68 (0x44) fstore_1 69 (0x45) fstore_2 70 (0x46) fstore_3 71 (0x47) dstore_0 72 (0x48) dstore_1 73 (0x49) dstore_2 74 (0x4a) dstore_3 75 (0x4b) astore_0 76 (0x4c) astore_1 77 (0x4d) astore_2 78 (0x4e) astore_3 79 (0x4f) iastore 80 (0x50) lastore 81 (0x51) fastore 82 (0x52) dastore 83 (0x53) aastore 84 (0x54) bastore 85 (0x55) castore 86 (0x56) sastore |
| Stack 栈操作类 |
| 87 (0x57) pop 88 (0x58) pop2 89 (0x59) dup 90 (0x5a) dup_x1 91 (0x5b) dup_x2 92 (0x5c) dup2 93 (0x5d) dup2_x1 94 (0x5e) dup2_x2 95 (0x5f) swap |
| Math 运算类 |
| 96 (0x60) iadd 97 (0x61) ladd 98 (0x62) fadd 99 (0x63) dadd 100 (0x64) isub 101 (0x65) lsub 102 (0x66) fsub 103 (0x67) dsub 104 (0x68) imul 105 (0x69) lmul 106 (0x6a) fmul 107 (0x6b) dmul 108 (0x6c) idiv 109 (0x6d) ldiv 110 (0x6e) fdiv 111 (0x6f) ddiv 112 (0x70) irem 113 (0x71) lrem 114 (0x72) frem 115 (0x73) drem 116 (0x74) ineg 117 (0x75) lneg 118 (0x76) fneg 119 (0x77) dneg 120 (0x78) ishl 121 (0x79) lshl 122 (0x7a) ishr 123 (0x7b) lshr 124 (0x7c) iushr 125 (0x7d) lushr 126 (0x7e) iand 127 (0x7f) land 128 (0x80) ior 129 (0x81) lor 130 (0x82) ixor 131 (0x83) lxor 132 (0x84) iinc |
| Conversions 转换类 |
| 133 (0x85) i2l 134 (0x86) i2f 135 (0x87) i2d 136 (0x88) l2i 137 (0x89) l2f 138 (0x8a) l2d 139 (0x8b) f2i 140 (0x8c) f2l 141 (0x8d) f2d 142 (0x8e) d2i 143 (0x8f) d2l 144 (0x90) d2f 145 (0x91) i2b 146 (0x92) i2c 147 (0x93) i2s |
| Comparisons 比较类 |
| 148 (0x94) lcmp 149 (0x95) fcmpl 150 (0x96) fcmpg 151 (0x97) dcmpl 152 (0x98) dcmpg 153 (0x99) ifeq 154 (0x9a) ifne 155 (0x9b) iflt 156 (0x9c) ifge 157 (0x9d) ifgt 158 (0x9e) ifle 159 (0x9f) if_icmpeq 160 (0xa0) if_icmpne 161 (0xa1) if_icmplt 162 (0xa2) if_icmpge 163 (0xa3) if_icmpgt 164 (0xa4) if_icmple 165 (0xa5) if_acmpeq 166 (0xa6) if_acmpne |
| Control 控制类 |
| 167 (0xa7) goto 168 (0xa8) jsr 169 (0xa9) ret 170 (0xaa) tableswitch 171 (0xab) lookupswitch 172 (0xac) ireturn 173 (0xad) lreturn 174 (0xae) freturn 175 (0xaf) dreturn 176 (0xb0) areturn 177 (0xb1) return |
| References 引用类 |
| 178 (0xb2) getstatic 179 (0xb3) putstatic 180 (0xb4) getfield 181 (0xb5) putfield 182 (0xb6) invokevirtual 183 (0xb7) invokespecial 184 (0xb8) invokestatic 185 (0xb9) invokeinterface 186 (0xba) invokedynamic 187 (0xbb) new 188 (0xbc) newarray 189 (0xbd) anewarray 190 (0xbe) arraylength 191 (0xbf) athrow 192 (0xc0) checkcast 193 (0xc1) instanceof 194 (0xc2) monitorenter 195 (0xc3) monitorexit |
| Extended 扩展类 |
| 196 (0xc4) wide 197 (0xc5) multianewarray 198 (0xc6) ifnull 199 (0xc7) ifnonnull 200 (0xc8) goto_w 201 (0xc9) jsr_w |
| Reserved 预留类 |
| 202 (0xca) breakpoint 254 (0xfe) impdep1 255 (0xff) impdep2 |
相关文章:
JVM指令集
概述 JVM,Java Virtual Machine,Java虚拟机器,作为一台独立的机器,一般包括独立的指令集、独立的存储体系以及适合机器自身的运算方式,本章节主要是描述JVM指令的功能与作用。 JVM的每个指令的格式是【指令 操作数1操…...
如何用SSH克隆GitHub项目
诸神缄默不语-个人CSDN博文目录 使用场景:由于不可知的网络问题,无法用HTTPS克隆GitHub项目。 报错fatal: unable to access https://github.com/PolarisRisingWar/llm-throught-ages.git/: GnuTLS recv error (-110): The TLS connection was non-pro…...
sqlx库使用指南
sqlx库使用指南 在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子,介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。 sqlx介绍 在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认为是Go…...
算法篇汇总
文章浏览 I https://leetcode.cn/problems/article-views-i/description/?envTypestudy-plan-v2&envId30-days-of-pandas&langpythondata 我的题解: import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:dfviews[views[auth…...
typeScript 学习笔记(二)
类接口 TypeScript 入门教程 (xcatliu.com) 十四.类 ① 类 类:定义了一件事物的抽象特点,包含它的属性和方法对象:类的实例,通过new生成面向对象(OOP)的三大特性:封装、继承、多态封装&…...
redis集群架构详解
一、集群架构搭建 1、配置 在一台机器上模拟多台机器搭建redis集群,一个集群代表一台物理机 集群1路径: /usr/local/redis/redis-cluster/cluster1/9001/redis.conf/usr/local/redis/redis-cluster/cluster1/9004/redis.conf/usr/local/redis/redis-…...
nodejs设置镜像
1、npm镜像地址配置 -- 查看 npm 安装目录 npm root -g-- 查看 npm 配置信息 npm config list-- 查询当前镜像配置 npm get registry-- 或者仅修改 npm 命令镜像 -- 设置为淘宝镜像 npm config set registry https://registry.npmmirror.com -- 修改为官方镜像 npm config set…...
CSS中如何在table中隐藏表格中从第4个开始的多个 <tr> 元素
隐藏指定行 使用 CSS 的 nth-child 选择器来选择表格中的特定行,并隐藏它们。 以下是一个示例 CSS 规则,用于隐藏表格中的第 4 个和第 5 个行(索引从 1 开始): table tr:nth-child(4), table tr:nth-child(5) {displ…...
【类和对象】③友元类
文章目录 1.初始化列表2.static静态成员3.友元 1.初始化列表 我们知道在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然调用构造函数之后,对象中已经有了一个初始值,但是不能将其称为对对象中成…...
算法通关村第十六关:黄金挑战:滑动窗口与堆结合
黄金挑战:滑动窗口与堆结合 堆的大小一般是有限的,能直接返回当前位置下的最大值或者最小值 该特征与滑动窗口结合,可以解决一些特定场景的问题 1. 滑动窗口与堆问题的结合 LeetCode239 https://leetcode.cn/problems/sliding-window-maxi…...
6.2.2 【MySQL】InnoDB中的索引方案
上边之所以称为一个简易的索引方案,是因为我们为了在根据主键值进行查找时使用二分法快速定位具体的目录项而假设所有目录项都可以在物理存储器上连续存储,但是这样做有几个问题: InnoDB 是使用页来作为管理存储空间的基本单位,也…...
划片机实现装片、对准、切割、清洗到卸片的自动化操作
划片机是一种用于切割和分离材料的设备,通常用于光学和医疗、IC、QFN、DFN、半导体集成电路、GPP/LED氮化镓等芯片分立器件、LED封装、光通讯器件、声表器件、MEMS等行业。划片机可以实现从装片、对准、切割、清洗到卸片的自动化操作。 以下是划片机实现这些操作的步…...
OpenCV(二十五):边缘检测(一)
目录 1.边缘检测原理 2.Sobel算子边缘检测 3.Scharr算子边缘检测 4.两种算子的生成getDerivKernels() 1.边缘检测原理 其原理是基于图像中灰度值的变化来捕捉图像中的边界和轮廓。梯度则表示了图像中像素强度变化的强弱和方向。 所以沿梯度方向找到有最大梯度值的像素&…...
上行取消指示 DCI format 2_4
上篇介绍了DCI format 2_1的DL传输中断的内容,这篇就看下DCI format 2_4有关的UL 传输取消机制,值得注意的是这里的UL传输针对的是PUSCH和SRS传输。 UL cancellation DCI format 2_4相关机制引入的背景与DCI format 2_1一样,都是因为URLLC和e…...
百望云蝉联2023「Cloud 100 China 」榜单 综合实力再获认可
9月7日,2023 Cloud 100 China 榜单于上海中心正式发布,榜单由靖亚资本与崔牛会联合推出,百望云凭借着过硬的综合实力与卓越的技术创新能力,再次荣登榜单,位居第六位。 本届评选,Top 100 企业的数据指标的权…...
力扣刷题班第1节:Python语法常遗漏的知识
以下仅仅记录和后面力扣刷题相关的、且平常会遗漏的语法知识。 下面这些笔记都是点到为止,不进行深入解释。大多数学过python的朋友看到就知道什么意思的,我就不解释了 字符串 str "I am a cook"# 按照空格切分 str.split(" ") …...
GET 和 POST请求的区别是什么
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你轻轻松松的给出了一个“标准答案”: GET在浏览器回退时是无害的…...
Python数据分析实战-表连接-merge四种连接方式用法(附源码和实现效果)
实现功能 表连接-merge四种连接方式用法, 将两个pandas表根据一个或者多个键(列)值进行连接。 实现代码 import pandas as pddf1 pd.DataFrame({key: [a, b, d],data1: range(3)}) print(df1)df2 pd.DataFrame({key: [a, b, c, a, b],dat…...
NFTScan 浏览器再升级:优质数据服务新体验来袭
当前,高质量的 NFT 数据服务已成为区块链用户和开发者的必需。为满足用户数据需求,NFTScan 主站近日进行全面升级,优化了数据服务板块的页面结构,实现更清晰简洁的布局和交互。 NFTScan 的改版充分考虑用户和开发者的数据体验&am…...
C# 去除utf-8 BOM头
static void Main(string[] args) {var a1 Encoding.UTF8.GetBytes("<");var a2 Encoding.UTF8.GetBytes("<");Console.WriteLine("去除utf-8 bom之前");Console.WriteLine(Encoding.UTF8.GetString(a1));Console.WriteLine(…...
Phi-4-mini-reasoning部署教程:SSL证书配置实现https安全访问Web界面
Phi-4-mini-reasoning部署教程:SSL证书配置实现https安全访问Web界面 1. 环境准备 在开始配置SSL证书前,请确保您已经完成以下准备工作: 已部署Phi-4-mini-reasoning模型并正常运行拥有服务器管理员权限已获取有效的域名(可以是…...
从零开发Shell补全脚本:学习git-flow-completion的代码架构
从零开发Shell补全脚本:学习git-flow-completion的代码架构 【免费下载链接】git-flow-completion Bash, Zsh and fish completion support for git-flow. 项目地址: https://gitcode.com/gh_mirrors/gi/git-flow-completion 掌握Shell补全脚本开发是提升命令…...
北京做网站SEO优化有什么技巧_北京做网站关键词优化需要多长时间
北京做网站SEO优化有什么技巧 在北京这样一个竞争激烈的市场,做网站SEO优化显得尤为重要。SEO(Search Engine Optimization,搜索引擎优化)是提升网站在搜索引擎结果中排名的关键手段,而北京的市场竞争尤其激烈&#x…...
彻底搞懂ScheduledThreadPoolExecutor
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
芯片行业的高门槛本质上是一次性固定成本极高导致的
AI 工具这波热潮里,芯片圈有个声音:以后一个人能不能做一颗芯片?很多人讨论的时候跑偏了,一直在聊人效、聊 AI 能替代多少工程师。真正的瓶颈根本不在这里。做过项目的人都知道,一个芯片项目的成本结构大概长这样&…...
水产养殖自动控制系统:远程操控,鱼塘24小时在线守护
在我国水产养殖产业快速发展的今天,“产量高、品质优、成本低、更环保”已成为养殖从业者的核心追求。但传统养殖模式中,人工巡检效率低、水质调控凭经验、投喂施肥不精准等问题,不仅增加了劳动强度,还易导致养殖生物应激、病害频…...
多车环境下车载毫米波雷达是否会相互干扰?
在汽车工业迈向智能化与自动化的进程中,毫米波雷达已然成为了车辆感知体系中不可或缺的一部分。这种波长介于1毫米至10毫米之间的电磁波进行探测的装置,凭借其能够穿透雨雪、浓雾及强光直射的全天候工作能力,为高级驾驶辅助系统提供了关键的距…...
怎么将AI生成的图片转成可编辑的矢量图?
做科研的宝子们谁懂啊!绘制科研插图真的太费时间了😭 要么得花几天啃专业绘图软件,要么找素材拼凑导致视觉割裂、标注出错,好不容易用AI生成一张满意的图,却发现无法编辑、分辨率不足,连期刊投稿的基本要求…...
如何通过GDScript游戏开发入门成为独立游戏开发者
如何通过GDScript游戏开发入门成为独立游戏开发者 【免费下载链接】learn-gdscript Learn Godots GDScript programming language from zero, right in your browser, for free. 项目地址: https://gitcode.com/gh_mirrors/le/learn-gdscript 对于许多游戏爱好者来说&am…...
ZYNQ调试别再傻等Program FPGA了!一个函数搞定PL端软复位(Vitis 2021.2)
ZYNQ高效调试:用软复位替代FPGA重编程的技术解析 调试ZYNQ项目时,最令人抓狂的莫过于每次修改代码后漫长的Program FPGA等待。作为一名长期与ZYNQ打交道的工程师,我深知这种重复操作不仅消耗时间,更会加速Flash芯片的老化。本文将…...
