二、Java虚拟机(JVM)中常见的汇编指令(笔记)

Java笔记——Java虚拟机(JVM)从入门到实战_java jvm虚拟机 G1的整个堆会被划分成多个大小相等的区域,称之为区Region,区域不要求是连续的。如果所有的加载器都没加载过,就会层层向上委派查看是否加载过,如果都没加载过,就会由顶向下尝试进行加载,如果一个类加载器,发现这个类在自己的加载路径中,就会选择去加载这个类。1.可以通过调整年轻代和老年代的比例来适应不同类型的应用程序,提高内存的利用率和性能(假如用户比较多,有大量用户会在同一时段访问订单数据,如果新生代设置小,大量数据创建,会频繁发生minor GC,所以我们希望这些生命周期短的数据能在)。 阅读详情

大部分机器指令集都支持一下5类计算:

汇编语言本来就是机器指令的助记符

EAX:

EAX也是一种32位通用寄存器。 EAX寄存器称为累加器,AX寄存器是算术运算的主要寄存器,所有的输入、输出只使用AL或AX人作为数据寄存器。在80386及其以上的微处理器中,EAX寄存器可以用来存储单元的偏移地址。

EBX:

EBX 是”基地址”(base)寄存器, 在内存寻址时存放基地址.
EBX寄存器
EBX 是”基地址”(base)寄存器, 在内存寻址时存放基地址。
eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。

常见汇编指令

1、数据传输指令(任何硬件系统都必须支持的指令)

主要在寄存器与内存、寄存器与输入/输出端口之间传送数据
mov1 1, %eax //将自然数1传送到eax寄存器
pop %eax //将栈顶数据弹出至eax寄存器

2、算术运算指令

包括算术基本四则运算、浮点运算、数学运算(正弦、余弦)等。
//将自然数3与eax寄存器中的数累加,并将结果存储进eax中
add 3, %eax

//对于ebx寄存器中的数增1
inc %ebx

3、逻辑运算指令

与、或、非、左移、右移等指令,都属于逻辑运算指令
shl %eax, 1 //将eax中的数左移1个二进位
and a1, 00111011B //对a1寄存器中的数和操作数进行与操作

4、串指令

连续空间分配,连续空间取值,传送等,都要使用串指令。

5、程序转移指令

If···else判断、for循环、while循环、函数调用等都需要依赖程序转移指令,否则无法跳转。没有这些指令,程序不能模块化,无法被分割成一个个方法,也不存在循环操作。
常见的程序转移指令包括jmp跳转、loop循环、ret等。

JVM指令

1、数据交换指令

JVM内存分为操作数栈、局部变量表、Java堆、常量池、方法区。
数据交换指令支持数据在这些内存区域之间的传送和交换。
Java方法中访问一个静态变量时其运算过程必然伴随JVM将数据从常量池传送到操作数栈的指令调用。
JVM执行逻辑运算的主战场是操作数栈。
x86硬件平台上直接执行的程序,其内存一般分为寄存器、数据段、堆栈、常量区、代码段,CPU为了完成运算必然会涉及将这些内存区域的数据传送到寄存器的指令调用。
数据交换指令,栗子:iload,istore,iload,lstore,fload,fstore,dload,dstore,ldc,bipush等指令。

2、函数调用指令(属于程序转移指令)

栗子:invokevirtual、invokeinterface、invokespecial、invokestatic 和 return
x86中主要使用call指令和ret指令来保存现场和恢复现场,这往往会伴随CPU物理寄存器入栈和出栈。
JVM没有物理寄存器,用操作数栈和PC寄存器来代替。
JVM保存现场和恢复现场的解决方案是向Java堆栈中压入一个栈帧,函数返回的时候从Java堆栈中弹出一个栈帧。
Java函数的代码没有被放到代码段中,而是被放到一个code缓存中,每一个Java函数的代码块在这个code缓存中都会有一个索引位置,最终JVM回跳转到这个索引位置处执行Java函数调用。
Java函数一定是封装在类中的,因此JVM在执行函数调用的时候还需要通过类寻址等一系列运算,最终才能找到这个入口。

3、运算指令集

JVM和运算相关的指令集主要有算术运算、位运算、比较运算、逻辑运算等,JVM还为各种基本类型的运算提供不同的操作码;
x86和运算相关的指令集:算术运算、位运算、比较运算、逻辑运算。
所有的运算操作都是直接针对寄存器中的二进制数进行的,不区分数据类型。
JVM规范中常见的运算指令:iadd(对两个int型数据求和)、isub(对两个int型数据做减法)、fadd(对两个float浮点数进行求和)、ddiv(两个double双精度型数据相除)等。

4、控制转移指令

JVM规范提供的常见的控制转移指令:switch分支选择指令、if···else条件指令、do···while循环、for循环、foreach循环、return返回、break中断循环、continue继续循环。

5、对象创建与类型转移指令

作为一门面向对象的语言,JVM规范自然要提供一套创建对象的指令。在Java语法层使用关键字new可以实例化一个对象,而对应的字节码指令也是new。
JVM规范还提供了“窄化类型转换”指令”,与之对应的是“宽化类型转换”,还有其他的例如抛出异常指令,线程同步指令等

以上为JVM最核心的部分——run engine(执行引擎)

中文版JVM指令手册.pdf 根据官方jvm指令转化的中文版jvm指令手册,包含 java反汇编指令以及对应的机器码和操作的具体含义,对于英文吃力的人是一大福音。 立即下载

相关推荐

框架->java语言->jvm->os->汇编->硬件

NULL 博文链接:https://cici9898-007.iteye.com/blog/1813855

javap 命令查看堆栈中信息

https://www.cnblogs.com/txdcnblogs/p/4112312.html javap命令是对.java文件进行反编译,通过这个命令可以看到堆栈中是怎么压栈和出栈的已经执行顺序,这里简单解释下javap的简单的使用,下面举个例子: 题目:i++ 和++i的区别 解释:简单点说 这个问题都不难回答,这里就不说了,但是实际上堆栈中区别也是老大了(这里就用到了javap命令), 步骤: 1.在任意一个盘下面建一个名为Test.java的文件(文件名可以随意命名)代码如下: public c

荷塘月色 1498

单片机技术入门与实战:从零基础到项目开发

单片机(MCU)作为嵌入式系统的核心组件,集成了CPU、内存和各种接口电路,广泛应用于智能家居、工业控制和汽车电子等领域。其工作原理基于实时控制和低功耗设计,通过定时器、中断系统和通信接口等功能模块实现各种控制任务。在物联网和智能硬件快速发展的背景下,掌握单片机开发技术成为电子工程师的重要技能。本文以STM32和PIC系列为例,详细解析单片机的基本概念、功能模块和选型指南,并分享从入门到项目实战的系统学习方法,帮助开发者在3-6个月内快速掌握这一关键技术。

weixin_35753291的博客 654

java 查看堆栈_javap 命令查看堆栈中信息

javap命令是对.java文件进行反编译,通过这个命令可以看到堆栈中是怎么压栈和出栈的已经执行顺序,这里简单解释下javap的简单的使用,下面举个例子:题目:i++ 和++i的区别解释:简单点说 这个问题都不难回答,这里就不说了,但是实际上堆栈中区别也是老大了(这里就用到了javap命令), 步骤:1.在任意一个盘下面建一个名为Test.java的文件(文件名可以随意命名)代码如下:public...

weixin_28725959的博客 3521

论文理解【LLM-OR】——【SIRL】Solver-Informed RL: Grounding Large Language Models for Authentic Optimization M

本文提出第一种针对基于 LLM 的 OR 问题建模和求解任务的 RLVR 方法,其基于求解器得到可验证奖励,设计了 Partial KL 强化目标函数和两阶段奖励课程训练方法,达成了 SOTA 性能

佚失的诗篇 882

定制PYNQ的overlay

一、用HLS生成一个定制IP(加速器)(1)首先打开vivado hls,本人的版本是2017.2,点击创建一个新工程。(2)设置工程名和路径,顶层函数设置为add,创建一个新的C++程序,名字叫做adder.cpp,不用在testbench中添加文件。选择板子的时候搜索xc7z020clg400-1,这是PYNQ的板子号,选择完成。             (3)在左侧的菜单栏里选择Sourc...

bramblewalls的博客 1万+

JVM 汇编指令手册

Java 虚拟机汇编指令

学习笔记! 904

遗传病变异注释预测工具安装系列之------Exomiser 安装及bug处理

Exomiser是一个Java程序,它从全外显子组或全基因组测序数据中发现潜在的致病变异。 Java 版本必须为1.8以上。 Exomiser 最新版本下载 wget -c https://github.com/exomiser/Exomiser/releases/download/11.0.0/exomiser-cli-11.0.0-distribution.zip unzip ...

qq_37329349的博客 1537

JVM指令集

本篇文章转载于http://blog.youkuaiyun.com/lm2302293/article/details/6713147  JVM指令集(指令码、助记符、功能描述) 指令码 助记符 功能描述 0x00 nop 无操作   0x01

残缺的孤独 3198

Moveit Servo学习

MoveIt Servo功能与配置指南 摘要:本文介绍了MoveIt Servo的功能特性,包括支持关节速度、末端执行器速度和位置控制,以及安全功能如奇点检查、碰撞检测等。通过示例展示了如何运行伺服控制demo,详细解析了关键节点和话题。最后以睿尔曼rml_63机器人为例,讲解了如何自定义伺服配置文件,包括环境设置、输入输出参数配置、平滑滤波器和规划场景监控等关键配置项。文章提供了从基础使用到自定义机器人配置的完整指导,帮助开发者实现高效的实时运动控制。

Fisher的博客 1175

金蝶云苍穹-插件开发(一)加载数据

此系列博客是进行金蝶云苍穹开发时的插件开发的教程,一是在明年要是还要参加软件杯金蝶A6赛题的话,可以看此系列教程的博客来进行复习,同时如果要是我实验室的学弟学妹要参加的话,我这个系列的博客可以给他们提供学习参考,因为插件开发学习的路上很艰难,我学习的时候,能参照的讲解少,要花费大量工夫去猜测去调试才能学会那些语法。在插件开发上,希望我这个系列的博客能帮助到别人。这个系列的博客只专门讲解插件开发,基本的那些金蝶云苍穹的知识点在这里不多作讲解。

二狗mao的博客 3588

【JVM详解四】执行引擎

JVM的执行引擎是JVM的核心组成部分之一,负责将Java字节码转换为机器码以便CPU执行。执行引擎包括解释器、JIT编译器和垃圾收集器。解释器逐行解释字节码,而JIT编译器则对热点代码进行优化编译以提高执行效率。垃圾收集器则负责自动管理内存,释放无用对象占用的空间。这些组件共同协作,确保了Java程序的跨平台性和高效执行。

叉烧钵钵鸡的博客 1482

基于深度学习的高精度牙齿健康检测识别系统(PyTorch+Pyside6+YOLOv5模型)

近年来,机器学习和深度学习取得了较大的发展,深度学习方法在检测精度和速度方面与传统方法相比表现出更良好的性能。YOLOv5是单阶段目标检测算法YOLO的第五代,根据实验得出结论,其在速度与准确性能方面都有了明显提升,开源的代码可见https://github.com/ultralytics/yolov5。因此本博文利用YOLOv5检测算法实现一种高精度家禽猪识别检测模型,再搭配上Pyside6库写出界面系统,完成目标检测识别页面的开发。

sc1434404661的博客 5799

【jvm系列-01】初识虚拟机与java虚拟机

为了解决java的跨平台性问题,

zhenghuishengq的博客 9756

YOLOv13改进策略【注意力机制篇】| ICASSP 2023 EMA 高效多尺度注意力,跨空间学习提高远距离建模依赖

ICASSP 2023 EMA 高效多尺度注意力在 YOLOv13 的接入实战:跨空间学习提升远距离依赖建模,含原理图解、完整代码、yaml 配置与实测参数量对比(ultralytics 8.3.63)。

qq_53329130的博客 935

jre9下载 jdk9

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

五分钟学Java:如何学习Java面试必考的JVM虚拟机

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java面试中总是爱考一类问题,那就是JVM虚拟机,为什么面试官这么爱考察JVM的问题呢,这是因为,所有的Java程序本质上都是运行在JVM之上的,没有JVM虚拟机,也就没有Java语言的执行环境,只有掌握了JVM虚拟机的相关知识,你才能说你...

Java技术江湖 2986

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

常见的JVM虚拟机和Java的体系结构

常见的JVM虚拟机和Java的体系结构

菜就多练! 1025

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java 汇编指令详解

前言 随着Android开发技术不断被推到新的高度,对于Android程序员来讲越来越需要具备一些对深入的基础性的技术的理解,比如说Java汇编指令。不然,可能很难深入理解一些时下的新框架、新技术,盲目一味追新也会越来越感乏力。 本文既不求照本宣科,亦不求炫技或著文立说,仅力图以最简明、最形象生动的方式,结合例子与实战,让小白也能搞懂这门看似复杂的技术概念。 单刀直入 闲言碎语不要讲,先表...

u011679955的博客 9212

Java JVM虚拟机学习的经典书籍

1、深入理解Java虚拟机——JVM高级特性与最佳实践(第2版) 基于最新JDK1.7,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行全面而深入的分析,深刻揭示JVM的工作原理。以实践为导向,通过大量与实际生产环境相结合的案例展示了解决各种常见JVM问题的技巧和实践 2、揭秘Java虚拟机:JVM设计原理与实现 《揭秘Java虚拟机:JVM设计原理与实现》从源码角度解...

猎人在吃肉 7905

Java虚拟机JVM简介与理解(一)

Java虚拟机JVM简介与理解(一)

cucgyfjklx的博客 1万+

JVM系列——常见JVM(java虚拟机)

Sun Classic VM 世界上第一款商用java虚拟机,JDK1.4时被完全淘汰; 只有解释器 Exact VM Exact Memory Management:准确式内存管理。 只能在Solaris平台短暂使用。 HotSpot VM 甲骨文公司的,沿用至今,JDK版本默认使用的是HotSpot虚拟机, 另外两个虚拟机都没有方法区的概念。 热点代码探测技术 通过计数器找到最具有编译价值的代码,触发即时编译或者栈上替换; 通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执

m0_51660523的博客 1192

JVM_Java虚拟机<深入理解Java虚拟机>走进JVM

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。时至今日,尽管嵌入式平台已经不是Java程序的主流运行平台了(准确来说应该是HotSpotVM的宿主环境已经不局限于嵌入式平台了),那么为什么不将架构更换为基于寄存器的架构呢?栈:跨平台性、指令集小、指令多、执行性能比寄存器差言包括:Java、Scala、Groovy、Kotlin;

Coastlise的博客 1168

Java虚拟机JVM简介与理解(二)

Java虚拟机JVM简介与理解(二)

cucgyfjklx的博客 1万+

【Java-JVM虚拟机】学习笔记

目录00 章节介绍01 JVM与Java体系结构1.1 前言1.2 面向人群及参考书目1.3 Java及JVM简介1.4 Java发展的重大事件1.5 虚拟机与Java虚拟机1.6 JVM的整体机构1.7 Java代码执行流程1.8 JVM的架构模型1.9 JVM的生命周期1.10. JVM的发展历程 00 章节介绍 学习地址: 章节介绍: 01 JVM与Java体系结构 1.1 前言 1.2 面向人群及参考书目 1.3 Java及JVM简介 1.4 Java发展的重大事件 1.5 虚拟机与Java虚

qq_38734403的博客 949

JVM初学者指南:Java虚拟机基础知识 笔记

JVM(Java Virtual Machine,Java虚拟机)是运行Java字节码的虚拟机。JVM是Java"一次编写,到处运行"这一特性的关键所在。无论什么平台,只要安装了对应的JVM,就能运行Java程序。跨平台性:Java代码被编译成字节码后,可以在任何安装了JVM的设备上运行自动内存管理:通过垃圾回收机制自动释放不再使用的内存安全性:提供沙箱安全机制,限制Java程序访问本地系统资源JVM是Java生态系统的核心组件,理解JVM的工作原理对于编写高效、稳定的Java应用程序至关重要。

lenyan~的博客 788

JVM(JAVA虚拟机)笔记

JVM:Java 程序的运行环境(Java二进制字节码的运行环境)一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查多态比较:JDK(JRE + 编译工具(javac、jconsle、jmap、jps等)) > JRE(JVM + 基础类库(lang包下的String类等)) > JVM(运行字节码文件)问问自己,什么时候需要自定义类加载器1) 想加载非 classpath 随意路径中的类文件2) 都是通过接口来使用实现,希望解耦时,常用在框架设计。

多思考🤔~ 1417
上一篇: 一、记一次JVM预入门探讨(笔记)
下一篇: 三、Java字节码文件结构
玻璃水珠
博客等级 码龄17年 25粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值