安卓中常见的字节码指令介绍
问题背景
安卓开发过程中,经常要通过看一些java代码对应的字节码,来了解java代码编译后的运行机制,本文将通过一个简单的demo介绍一些基本的字节码指令。
问题分析
比如以下代码:
public class test {public static void main(String[] args) {int a = 100;int b = 100;int c = 100;a += b + c;System.out.println(a);}
}
运行结果如下:

a += b + c <==> a += (b + c),查看对应的字节码文件如下:
// class version 52.0 (52)
// access flags 0x21
public class test {// compiled from: test.java// access flags 0x1public <init>()VL0LINENUMBER 1 L0ALOAD 0INVOKESPECIAL java/lang/Object.<init> ()VRETURNL1LOCALVARIABLE this Ltest; L0 L1 0MAXSTACK = 1MAXLOCALS = 1// access flags 0x9public static main([Ljava/lang/String;)VL0LINENUMBER 3 L0BIPUSH 100ISTORE 1 // 将100存储到局部变量L1LINENUMBER 4 L1BIPUSH 100ISTORE 2 // 将100存储到局部变量L2LINENUMBER 5 L2BIPUSH 100ISTORE 3 // 将100存储到局部变量L3LINENUMBER 6 L3ILOAD 1 // 从局部变量表中加载 int 类型到操作数栈ILOAD 2 // 从局部变量表中加载 int 类型到操作数栈ILOAD 3 // 从局部变量表中加载 int 类型到操作数栈IADD // 将栈顶两个 int 类型数值相加IADD // 将栈顶两个 int 类型数值相加ISTORE 1 // 将 int 类型存储到局部变量中,这里就是把结果存储到第一个变量L4LINENUMBER 7 L4GETSTATIC java/lang/System.out : Ljava/io/PrintStream;ILOAD 1INVOKEVIRTUAL java/io/PrintStream.println (I)VL5LINENUMBER 8 L5RETURNL6LOCALVARIABLE args [Ljava/lang/String; L0 L6 0LOCALVARIABLE a I L1 L6 1LOCALVARIABLE b I L2 L6 2LOCALVARIABLE c I L3 L6 3MAXSTACK = 3MAXLOCALS = 4
}
问题总结
通过查看java代码对应的字节码,可以比较清楚的看到java代码编译后的执行流程。在安卓开发中,了解字节码知识还是非常有必要的,在关键时刻,我们查看字节码,能够很好的解答一些疑惑,下面是常见的一些字节码指令:
1. 加载和存储指令:aload:从局部变量表中加载引用类型到操作数栈。astore:将引用类型存储到局部变量表中。iload:从局部变量表中加载 int 类型到操作数栈。istore:将 int 类型存储到局部变量表中。fload:从局部变量表中加载 float 类型到操作数栈。fstore:将 float 类型存储到局部变量表中。2. 算术和逻辑指令:iadd:将栈顶两个 int 类型数值相加。isub:将栈顶两个 int 类型数值相减。imul:将栈顶两个 int 类型数值相乘。idiv:将栈顶两个 int 类型数值相除。iand:将栈顶两个 int 类型数值进行按位与操作。ior:将栈顶两个 int 类型数值进行按位或操作。3. 类型转换指令:i2l:将 int 类型转换为 long 类型。l2i:将 long 类型转换为 int 类型。f2d:将 float 类型转换为 double 类型。d2i:将 double 类型转换为 int 类型。4. 控制流指令:if_icmpeq:如果两个 int 类型数值相等,则跳转到指定位置。goto:无条件跳转到指定位置。tableswitch:根据索引值跳转到不同位置的指令。5. 方法调用和返回指令:invokevirtual:调用实例方法。invokestatic:调用静态方法。invokeinterface:调用接口方法。ireturn:从方法中返回 int 类型值。invokedynamic: 运行时动态解析并绑定方法调用
持续更新,有兴趣的小伙伴可以进一步深入研究。
相关文章:
安卓中常见的字节码指令介绍
问题背景 安卓开发过程中,经常要通过看一些java代码对应的字节码,来了解java代码编译后的运行机制,本文将通过一个简单的demo介绍一些基本的字节码指令。 问题分析 比如以下代码: public class test {public static void main…...
TCP的三次握手和四次挥手
文章目录 三次握手四次挥手TIME_WAITCLOSE_WAIT 使用wireshark观察 三次握手 握手的最终目的是主机之间建立连接 首先要有两个预备知识点 三次握手建立连接不一定会成功,其中最担心的就是最后一次握手失败,不过会有配套的解决方案建立好连接后是需要被…...
前后端分离------后端创建笔记(08)表单提交
本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...
途乐证券-KDJ分别代表什么?
KDJ是一种技能剖析东西,常见于股票、期货等商场中,它的全称是随机目标(KDJ)。KDJ目标包括三条线,分别为K线、D线和J线。那么,KDJ分别代表什么呢?本文将从多个视点进行剖析。 1. KDJ的简单介绍 …...
用C语言重写的原始Matlab OpenShoe算法:深入理解和实现步态分析的关键技术
一、引言 在许多领域,如医疗健康、体育科学、虚拟现实和机器人技术中,步态分析都是一个重要的研究领域。步态分析可以帮助我们理解人体运动的机制,评估疾病的影响,优化运动员的表现,甚至设计更自然的机器人运动。Open…...
什么开放式耳机音质好?值得推荐的开放式耳机分享
与封闭式耳机相比,开放式耳机具有更为自然、真实的音质,能够更好地还原音乐现场的声音环境。以下是几款值得推荐的开放式耳机,都来看看有哪些吧。 推荐一:NANK南卡00压开放式耳机 点评:体验最好的开放式耳机没有之一…...
mac harbor的安装
harbor的安装 为什么要整这个呢,因为我在学习k8s,但是需要一个自己的镜像仓库。于是,最开始想到的就是在本地直接部署一个,还比较安全、快速。 直接下载了官方的项目,运行脚本发现出了异常,这种异常我已经…...
SetActive和Enable有什么不同?
介绍 在Unity中,SetActive和Enable都是常用的方法,用于在运行时控制对象的可见性和功能开启状态。尽管它们的目的相似,但在使用时有一些区别。 SetActive SetActive是GameObject类的方法,用于启用或禁用游戏对象及其所有子对象…...
【Vue-Router】重定向
First.vue <template><h1>First Seciton</h1> </template>Second.vue,Third.vue代码同理 UserSettings.vue <template><h1>UserSettings</h1><router-link to"/settings/children1">children1</ro…...
vulnhub靶场之ADROIT: 1.0.1
准备: 攻击机:虚拟机kali、本机win10。 靶机:Adroit: 1.0.1,下载地址:https://download.vulnhub.com/adroit/Adroit-v1.0.1.ova,下载后直接vbox打开即可。 知识点:shell反弹(jar&…...
【非欧几里得域信号的信号处理】使用经典信号处理和图信号处理在一维和二维欧几里得域信号上应用低通滤波器研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【深入理解ES6】字符串和正则表达式
概念 字符串(String)是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol(es6新增)。 更好的Unicode支持 1. UTF-16码位 字符串里的字符有两种: 前 个码位均以16位的编码单元…...
易服客工作室:Pixwell主题 – 现代杂志/WordPress新闻主题
PixWell主题概述 Pixwell主题是一个强大、多用途和现代的WordPress杂志主题,具有像素完美的设计、出色的功能、完全响应和移动友好。它非常灵活,非常适合食谱、时尚、旅行、技术、个人或任何其他很棒的杂志和博客网站。 该主题与 Elementor、Cooked&am…...
iOS手机无法安装Charles 的ssl证书
问题描述 iOS客户端安装证书时一直卡在下载这一步,无法抓包 1、打开Charles,选择help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser 2、按照步骤1中的提示进行操作,手机连接电脑代理,…...
Promise处理异步操作
Promise是一种在JavaScript中处理异步操作的技术。Promise对象表示一个尚未完成的异步操作,它可以在将来的某个时候产生结果。Promise对象的状态可以是未完成、已完成或已拒绝。当Promise对象处于未完成状态时,我们可以附加一个或多个处理程序࿰…...
jpa查询返回自定义对象、返回指定VO、POJO
jpa查询返回自定义对象、返回指定VO、POJO jpa查询返回自定义对象、返回指定VO、POJO,JPA查询前会做大量处理,还有线程通知的操作。若并发大,处理性能直线下降。但是jpa就因为做了大量处理,对多数据库兼容极好,操作方…...
抖音小程序开发,收银台支付回调通知
大家好,我是小悟 关于抖音小程序收银台支付,可阅读【抖音小程序开发,唤起收银台,包括抖音支付、支付宝支付、微信支付】。 做支付功能最重要的一步就是异步回调通知,所谓回调通知就是唤起收银台支付,支付…...
selenium 爬虫
selenium 可以动态爬取网页数据,就像真实用户操作浏览器一样,从终端用户的角度测试应用程序,WebDriver通过原生浏览器支持或者浏览器扩展直接控制浏览器 webdriver下载 因为selenuim对浏览器的版本存在兼容问题,顾需要针对指定浏…...
亚商投资顾问 早餐FM/0815生成式人工智能服务管理
01/亚商投资顾问 早间导读 商务部等9部门:促进农村大宗商品消费更新换代中央财办等九部门印发指导意见推动农村流通高质量发展《生成式人工智能服务管理暂行办法》今起施行 02/亚商投资顾问 新闻早餐 // 热点聚焦 // 商务部等9部门印发《县域商业三年行动计划&…...
C语言题目的多种解法分享 2之字符串左旋和补充题
前言 有的时候,这个系列专栏中的解法之间并无优劣,只是给大家提供不同的解题思路 我决定将代码实现的过程写成注释,方便大家直接找到对应的函数,只有需要补充说明的知识才会单拿出来强调 这个系列的文章会更的比较慢࿰…...
Flutter Widgets组件详解:从基础到高级
Flutter Widgets组件详解:从基础到高级 一、Widget基础概念 在Flutter中,一切都是Widget。Widget是Flutter应用的基本构建块,它们描述了UI在某个特定时刻的外观。Flutter的Widget树是应用界面的核心结构。 1.1 Widget的分类 Flutter Widget主…...
云安全与合规
云安全与合规 1. 技术分析 1.1 云安全概述 云安全是云计算的关键考量: 云安全维度数据安全: 加密、访问控制网络安全: 防火墙、VPN身份管理: IAM、SSO合规性: GDPR、SOC2安全责任:服务商: 基础设施安全用户: 数据和应用安全1.2 云安全架构 安全层次物理层: 数据…...
QrazyBox终极指南:专业二维码修复工具拯救你的损坏二维码
QrazyBox终极指南:专业二维码修复工具拯救你的损坏二维码 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾因打印模糊、水渍污染或屏幕划痕导致的重要二维码无法扫描而焦急…...
Google 广告场景下 Uniswap 钓鱼攻击机理与 Web3 防御体系研究
摘要 2026 年 5 月 22 日,GoPlus 安全团队发布预警,针对 Web3 领域头部去中心化交易平台 Uniswap 的搜索引擎钓鱼攻击呈规模化爆发态势。攻击者通过购买 Google Ads 关键词广告,将高仿钓鱼网站置顶于搜索结果前列,结合视觉相似域名…...
灾变瞬间生成人员分布图,为抢险决策提供可靠依据 ——视频孪生智能态势研判矿山抢险决策技术方案
灾变瞬间生成人员分布图,为抢险决策提供可靠依据——视频孪生智能态势研判矿山抢险决策技术方案一、方案引言煤矿井下瓦斯爆炸、顶板垮塌、透水突涌等灾害具备瞬时爆发、连锁破坏、环境骤变的典型特征。险情发生短短数分钟内,巷道结构受损变形、供电通信…...
2026年度最新主流AI写作辅助软件综合排行
本次测评结合综合运行性能、学术场景匹配度、用户实际口碑与功能完备程度,对2026年市面上热门AI论文辅助工具开展综合排序,依照综合推荐分值由高至低排列,同时逐一介绍每款工具的核心优势、特色亮点以及适合的使用场景。第一梯队:…...
DeepSeek隐私保护能力首次第三方穿透测试报告(CNAS认证机构出具,仅限本期披露3项核心缺陷)
更多请点击: https://intelliparadigm.com 第一章:DeepSeek数据隐私保护能力概览 DeepSeek系列大模型在设计与部署阶段即深度融入隐私优先(Privacy-by-Design)原则,其数据处理机制严格遵循最小化采集、本地化计算、端…...
鸣潮自动化脚本终极指南:解放双手的完整解决方案
鸣潮自动化脚本终极指南:解放双手的完整解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦了在《鸣潮…...
百度网盘直链解析:终极免费提速解决方案
百度网盘直链解析:终极免费提速解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘非会员的龟速下载而烦恼吗?今天我要向你介绍一个…...
保姆级教程:在Windows电脑上免梯子安装GPT4All最新版(附模型下载避坑指南)
Windows系统本地部署GPT4All全流程指南:从零基础到高效运行最近半年,开源大语言模型生态中最令人兴奋的变化之一,就是像GPT4All这样的工具让普通开发者也能在消费级硬件上运行强大的AI模型。作为一名长期关注AI本地化部署的技术顾问ÿ…...
