Dalvik虚拟机的代码结构

Dalvik是Android程序的运行虚拟机,代码保存在Android源码中的"dalvik/"目录下,Dalvik虚拟机各个子目录的具体说明如下:

Android.mk: 是虚拟机编译的makefile文件

dalvikvm: 此目录是虚拟机命令行调用入口文件的目录,主要用来解释命令行参数,调用库函数接口等。

dexdump: 此目录是生成dex文件的反编译查看工具,主要用来查看编译出来的代码文件是否正确,查看编译出来的文件结构。

dexlist: 此目录是生成查看dex文件里所有类的方法的工具。

dexopt: 此目录是生成dex优化工具。

docs: 此目录保存的是Dalvik虚拟机相关帮助文档。

dvz: 此目录是生成从Zygote请求生成虚拟机实例的工具。

dx: 此目录是生成从java字节码转换为Dalvik机器码的工具。

hit: 此目录是生成显示堆栈信息/对象信息的工具。

libcore: 此目录是Dalvik虚拟机的核心类库,提供给上层的应用程序调用。

libcore-disabled: 此目录是一些禁用的库。

libdex: 此目录是生成主机和设备处理Dex文件的库。

libnativehelper: 此目录是Dalvik虚拟核心库的支持库函数。

MOUDLE_LICENSE_APACHE2: 这个文件是APCHE2的版权声明文件。

NOTICE: 这个文件是说明虚拟机源码的版权注意事项。

README.txt: 这个文件是说明本目录相关内容和版权。

run-core-tests.sh: 这个文件是用来运行核心库测试。

tests: 此目录保存测试相关测试用例。

tools: 此目录保存一些编译/运行相关的工具。

vm: 此目录保存虚拟机绝大部分的代码,包括指令读取,指令执行等。

时间: 2024-10-14 12:08:35

Dalvik虚拟机的代码结构的相关文章

Dalvik虚拟机中DexClassLookup结构解析

http://blog.csdn.net/roland_sun/article/details/46877563 原文如下: 在Android系统中,所有的类定义以及具体的代码都是包含在DEX文件中的.但是,一个功能丰富的程序往往都比较复杂,由很多类组成. 而每一个类,都由一个所谓类描述符(Class Descriptor)的字符串来唯一标识,两个类不可能有同一个类描述符.类描述符不仅包含类名,还包含了类所在的包名.例如,如果你的类所在包名是“com.trendmicro.mars”,且类名是“

Dalvik虚拟机【2】——Dex文件格式

整个文件的布局 文件头 索引区 string_ids type_ids proto_ids field_ids method_ids 数据区 class_def class_data_item code_item data 附录 测试用的Dex的java代码 参考资料 整个文件的布局 整个Dex文件可以分成三部分,文件头.索引区.数据区,如下图所示. 文件头 记录Dex文件的概览.包含文件大小.校验码以及其他字段的偏移和大小 索引区 记录字符串常量.类型.方法原形.域.方法的信息的索引 数据区

【分析】dalvik虚拟机启动过程(一)

源码版本:Android-4.4.4_r2 提示:大部分分析直接注释在代码内. 主要函数的调用层次: |AndroidRuntime::start |AndroidRuntime::startVm |JNI_CreateJavaVM |dvmCreateJNIEnv |dvmStartup |dvmThreadStartup |pthread_key_create |dvmAllocBitVector |allocThread |prepareThread |assignThreadId |dv

【分析】dalvik虚拟机启动过程(二)

源码版本:Android-4.4.4_r2 提示:大部分分析直接注释在代码内. 接着上一篇[分析]dalvik虚拟机启动过程(一) JNI_CreateJavaVM函数调用dvmCreateJNIEnv创建JNIEnv后,接着又调用了dvmStartup函数初始化VM: /* * VM 初始化. * VM initialization. Pass in any options provided on the command line. * Do not pass in the class nam

Dalvik虚拟机垃圾收集(GC)过程分析

前面我们分析了Dalvivk虚拟机堆的创建过程,以及Java对象在堆上的分配过程.这些知识是理解Dalvik虚拟机垃圾收集过程的基础.垃圾收集是一个复杂的过程,它要将那些不再被引用的对象进行回收.一方面要求Dalvik虚拟机能够标记出哪些对象是不再被引用的.另一方面要求Dalvik虚拟机尽快地回收内存,避免应用程序长时间停顿.本文就将详细分析Dalvik虚拟机是如何解决上述问题完成垃圾收集过程的. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Dalvi

Dalvik虚拟机为新创建对象分配内存的过程分析

在前面一文中,我们分析了Dalvik虚拟机创建Java堆的过程.有了Java堆之后,Dalvik虚拟机就可以在上面为对象分配内存了.在Java堆为对象分配内存需要解决内存碎片和内存不足两个问题.要解决内存碎片问题,就要找到一块大小最合适的空闲内存分配给对象使用.而内存不足有可能是内存配额用完引起的,也有可能是垃圾没有及时回收引起的,要区别对待.本文就详细分析Dalvik虚拟机是如何解决这些问题的. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 内存碎片问

Dalvik虚拟机Java堆创建过程分析

使用C/C++开发应用程序最令头痛的问题就是内存管理.慎不留神,要么内存泄漏,要么内存破坏.虚拟机要解决的问题之一就是帮助应用程序自动分配和释放内存.为了达到这个目的,虚拟机在启动的时候向操作系统申请一大块内存当作对象堆.之后当应用程序创建对象时,虚拟机就会在堆上分配合适的内存块.而当对象不再使用时,虚拟机就会将它占用的内存块归还给堆.Dalvik虚拟机也不例外,本文就分析它的Java堆创建过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从前面Da

Android Dalvik虚拟机概述

Dalvik虚拟机概述 Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一.它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统.Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进

【转】Dalvik虚拟机的启动过程分析

在Android系统中,应用程序进程都是由Zygote进程孵化出来的,而Zygote进程是由Init进程启动的.Zygote进程在启动时会创建一个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的Dalvik虚拟机实例.在本文中,我们就分析Dalvik虚拟机在Zygote进程中的启动过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Zygot