关于Dalvik虚拟机你需要知道的15个问题
2012-12-30 22:10
218 查看
Dalvik是Android系统中另一个重要的部分,包括虚拟机和一组重要的运行环境。它的设计非常巧妙,是个很好的一个手机终端的底层应用。本文就简单介绍Dalvik相关的15个问题。
1、大部分jvm是基于栈的,而Dalvik是基于寄存器的。
基于栈的机器必须使用指令来载入栈上数据,或是用指令来操纵数据,因此指令集更为庞大。但是对于寄存器指令而言,又必须指定源地址和目的地址,因此,基于寄存器的jvm单个指令更大。
2、Dalvik一些特点:
a)常量池32位索引
b)默认栈12kb,3个页,每页4kb
c)默认启动堆2MB,最大值16MB,最小1MB
d)堆最大支持1024MB
e)堆和栈的参数可以通过-Xms和-Xmx更改
3、所有的android线程都对应一个linux线程。每个Android Dalvik应用程序都运行在自己的沙盒里,不同的应用在不同的进程空间里运行。
4、Dalvik相当于java的JVM,.NET的CLI,Python、Perl、Ruby的Interpreter。Dalvik定义自己的字节码为VM的指令。
5、目前Dalvik支持的功能:
a).dex文件
b)Dalvik指令集
c)J2ME CLDC API
d)多线程
6、Dalvik支持的平台有:
a)基于Unix的系统
b)Linux
c)BSD
d)Mac OSX
7、Dalvik 虚拟机实现位于 dalvik/目录下,dalvik/vm是虚拟机的实现部分,被编译为libdvm.so,而dalvik/libdex被编译成libdex.a静态库作为dex工具库;dalvik/dexdump是.dex文件的反编译工具。虚拟机的可执行程序位于dalvik/dalvikvm中,将被编译为dalvikvm可执行程序。
8、Dalvik需要的其他库:
a)OpenSSl 加密技术
b)Zlib 免费的一般目的数据压缩库
c)ICU 字符编码技术
d)java包 包括java.nio,java.lang,java.util
e)Apache Harmony classlibApache HttpClient
9、Dalvik虚拟机的运行库大部分是用可移植的C写的,除了JNI call bridge。
10、Dalvik不遵循java SE和java ME的API规范,所以不支持AWT或者Swing。
11、dalvik/vm/Dvm.mk 中会根据dvm_arch来选择编译的目标集体系结构。
12、dx工具:位于dalvik/dx目录,用于将字节码转换成.dex。
例:dx --dex --output=helloworld.dex helloworld.class
13、dexdump工具:位于dalvik/dexdump目录,用于反编译dex文件。
14、dex数据类型:
byte 8bit
ubyte 8bit
short 16bitlittle-endian
ushort 16bit little-endian
int 32bitlittle-endian
uint 32bitlittle-endian
long 64bitlittle-endian
ulong 64bitlittle-endian
sleb128 LEB128 variable-lengtha
uleb128 LEB128 variable-lengtha
uleb128p1 LEB128 variable-lengtha
LEB128类型:1~5个字节组成。所有字节组合在一起代表一个32位值。除最后一个字节最高标志位为0外,其他都为1,剩下的7位为有效负荷。有符号的LEB128的符号由最后一个字节的有效负荷最高位决定。具体算法在:dalvik/libdex/LEB128.h。
15、dex文件被映射到DexMapList,结构体定义在dalvik/libdex/DexFile.h(c) 中。
1、大部分jvm是基于栈的,而Dalvik是基于寄存器的。
基于栈的机器必须使用指令来载入栈上数据,或是用指令来操纵数据,因此指令集更为庞大。但是对于寄存器指令而言,又必须指定源地址和目的地址,因此,基于寄存器的jvm单个指令更大。
2、Dalvik一些特点:
a)常量池32位索引
b)默认栈12kb,3个页,每页4kb
c)默认启动堆2MB,最大值16MB,最小1MB
d)堆最大支持1024MB
e)堆和栈的参数可以通过-Xms和-Xmx更改
3、所有的android线程都对应一个linux线程。每个Android Dalvik应用程序都运行在自己的沙盒里,不同的应用在不同的进程空间里运行。
4、Dalvik相当于java的JVM,.NET的CLI,Python、Perl、Ruby的Interpreter。Dalvik定义自己的字节码为VM的指令。
5、目前Dalvik支持的功能:
a).dex文件
b)Dalvik指令集
c)J2ME CLDC API
d)多线程
6、Dalvik支持的平台有:
a)基于Unix的系统
b)Linux
c)BSD
d)Mac OSX
7、Dalvik 虚拟机实现位于 dalvik/目录下,dalvik/vm是虚拟机的实现部分,被编译为libdvm.so,而dalvik/libdex被编译成libdex.a静态库作为dex工具库;dalvik/dexdump是.dex文件的反编译工具。虚拟机的可执行程序位于dalvik/dalvikvm中,将被编译为dalvikvm可执行程序。
8、Dalvik需要的其他库:
a)OpenSSl 加密技术
b)Zlib 免费的一般目的数据压缩库
c)ICU 字符编码技术
d)java包 包括java.nio,java.lang,java.util
e)Apache Harmony classlibApache HttpClient
9、Dalvik虚拟机的运行库大部分是用可移植的C写的,除了JNI call bridge。
10、Dalvik不遵循java SE和java ME的API规范,所以不支持AWT或者Swing。
11、dalvik/vm/Dvm.mk 中会根据dvm_arch来选择编译的目标集体系结构。
12、dx工具:位于dalvik/dx目录,用于将字节码转换成.dex。
例:dx --dex --output=helloworld.dex helloworld.class
13、dexdump工具:位于dalvik/dexdump目录,用于反编译dex文件。
14、dex数据类型:
byte 8bit
ubyte 8bit
short 16bitlittle-endian
ushort 16bit little-endian
int 32bitlittle-endian
uint 32bitlittle-endian
long 64bitlittle-endian
ulong 64bitlittle-endian
sleb128 LEB128 variable-lengtha
uleb128 LEB128 variable-lengtha
uleb128p1 LEB128 variable-lengtha
LEB128类型:1~5个字节组成。所有字节组合在一起代表一个32位值。除最后一个字节最高标志位为0外,其他都为1,剩下的7位为有效负荷。有符号的LEB128的符号由最后一个字节的有效负荷最高位决定。具体算法在:dalvik/libdex/LEB128.h。
15、dex文件被映射到DexMapList,结构体定义在dalvik/libdex/DexFile.h(c) 中。
相关文章推荐
- 关于Dalvik虚拟机你需要知道的15个问题
- 关于Dalvik虚拟机你需要知道的15个问题
- 关于xgboost,你需要知道的问题
- 关于Chord中的每一个Node中需要知道谁的地址的问题
- 关于AnsycTask你需要知道的几个问题
- 关于VMware View Agent 需要重启的问题
- 【脚本语言系列】关于PythonGUI界面PyQT,你需要知道的事
- 【脚本语言系列】关于PythonWeb服务自动化REST,你需要知道的事
- 【脚本语言系列】关于Python统计分析statsmodel,你需要知道的事
- 关于内存泄漏的问题---哪些变量需要释放
- 关于android程序在虚拟机成功调试但是在真机闪退的问题!
- [转]关于字符编码,你所需要知道的
- 关于sql server建立索引需要注意的问题
- 【脚本编程系列】关于Python网络通讯asyncore,你需要知道的事
- 关于xen虚拟机不能解析DNS的问题
- 【脚本语言系列】关于Python音频处理WMPlayerOCX,你需要知道的事情
- 【脚本语言系列】关于 JavaScript 日志功能,你需要知道的事
- 关于C#项目”是针对”.NETFramework,Version=v4.5.2”但此计算机没有,需要修改为v4.5.1.的问题
- [译]关于iOS和OS X废弃的API你需要知道的一切
- 关于 Git 你需要知道的一些事情