-
提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能。
-
所有的Android程序都运行在Android系统进程里,每个进程对应着一个Dalvik虚拟机实例。
Dalvik虚拟机与Java虚拟机的区别
1、Java虚拟机运行的是java字节码,Dalvik虚拟机运行的是Dalvik字节码。
2、Dalvik 可执行文件体积更小。
3、Java虚拟机与Dalvik虚拟机架构不同。Dalvik 汇编语言
1、Dalvik指令
指令大多由三个字符组成,前两个是数字,最后一个是字母。
第一个数字是表示指令有多少个16位的字组成。
第二个数字是表示指令最多使用寄存器的个数。特殊标记‘r’标识使用一定范围内的寄存器。
第三个字母为类型吗,表示指令用到的额外的数据的类型。
例如:22x
第一个2表示 指令有两个16位字组成
第二个2表示 指令使用到2个寄存器
第三个x表示没有使用到额外的数据
2、DEX文件反汇编工具
目前DEX可执行文件主流的反汇编工具有BakSmali与Dedexer。
指令如:
java -jar baksmali.jar -o baksmaliout hello.dex
java -jar ddx.jar -d ddxout hello.dex
3、Dalvik 寄存器
Dalvik虚拟机是作用于特定架构的CPU上运行的,在设计之初采用了ARM架构,ARM架构的CPU本身继承了多个寄存器,Dalvik将部分寄存器映射到了ARM寄存器上,还有一个部分则通过调用栈进行模拟。.
Dalvik虚拟机又是如何虚拟地使用寄存器的呢?Dalvik虚拟机为每个进程维护一个调用栈,这个调用栈其中一个作用就是用来‘虚拟’寄存器。
4、两种不同的寄存器表示方法
v 命名法采用以小写字母 ‘v’开头的方式表示函数中用到的局部变量与参数,所有的寄存器命名从v0开始,依次递增。
p 命名法对函数的局部变量寄存器命名没有影响,它的命名规则:函数中引入的参数命名从p0开始,依次递增。Dalvik字节码的类型、方法与字段
1、类型
Dalvik字节码只有两种类型,基本类型与引用类型。
2、方法
Dalvik使用方法名、类型参数与返回值来详情描述一个方法。
方法格式如下: Lpackage/name/ObjectName;->MethodName(III)Z
3、字段
Dalvik虚拟机定位字段与字节码静态分析时会用到它。
格式如下:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;Dalvik指令集
1、空操作指令的助记符为nop。它的值为00,通常nop指令被用来作对齐代码只用。
2、数据操作指令为move。move 指令根据字节码的大小与类型不同,后面会跟上不同的后缀。
3、返回指令指的是函数结尾时运行的最后一条指令。return-void、return vAA、return-wide vAA、return-object vAA
4、数据定义指令用来定义程序中用到的常量、字符串、类等数据。它的基础字节码为const。如:const/4 vA,#+B
5、锁指令多用在多线程程序中对同一对象的操作。如:
monitor-enter vAA 锁住
monitor-exit vAA 释放
6、实例操作指令包括实例的类型转换、检查以及新建等。
7、数组操作指令包括获取数组长度、新建数组、数组赋值、数组元素取值与赋值等操作。
8、异常指令集中有一条指令用来抛出异常。如:throw vAA
9、跳转指令用于从当前地址跳转到指定的偏移处。如:goto、switch、if
10、比较指令用于对两个寄存器的值进行比较。如:cmpkind vAA,vBB
11、字段操作指令用来对对象实例的字段进行读写操作。如:iinstanceop vA,vB,field@CCCC 与sstaticop vAA,field@BBBB
12、方法调用指令负责调用类实例的方法。它的基础指令为invoke。如:invoke-kind/range {vCCCC…vNNNNN}
13、数据转换指令用于将一种类型的数值转换成另一种类型。如:unop vA,vB
14、数据运算指令包括算术运算指令与逻辑运算指令。如:binop vAA,vBB,vCC 、add-type、sub-type……。Dalvik指令练习
写一个Dalvik版的Hello World。
1、编写smali文件
.class public LHelloWorld;
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
.registers 4
.parameter
.prologue
#空指令
nop
nop
nop
nop
#数据定义指令
const/16 v0, 0x8
const/4 v1, 0x5
const/4 v2, 0x3
#数据操作指令
move v1, v2
#数组操作指令
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
下面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题全套解析,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,下面只是以图片的形式给大家展示一部分。
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
[外链图片转存中…(img-IPSIrtfA-1713713225699)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!