Dalvik虚拟机片面总结

1、Dalvik 基于寄存器,而 JVM 基于栈。
2、Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例
3、不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex,ex文件格式可以减少整体文件尺寸
4、所有的Android应用的线程都对应一个Linux线程
5、Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。

时间: 2024-10-27 03:11:20

Dalvik虚拟机片面总结的相关文章

Dalvik虚拟机的代码结构

Dalvik是Android程序的运行虚拟机,代码保存在Android源码中的"dalvik/"目录下,Dalvik虚拟机各个子目录的具体说明如下: Android.mk: 是虚拟机编译的makefile文件 dalvikvm: 此目录是虚拟机命令行调用入口文件的目录,主要用来解释命令行参数,调用库函数接口等. dexdump: 此目录是生成dex文件的反编译查看工具,主要用来查看编译出来的代码文件是否正确,查看编译出来的文件结构. dexlist: 此目录是生成查看dex文件里所有类

Chapter3——进入Android Dalvik虚拟机

虽然Android平台使用Java来开发应用程序,但Android程序却不是运行在标准Java虚拟机上的. 可能是出于效率和版权的考虑,Google为Android专门设计了一套虚拟机Dalvik Virtual Machine. 上面是第三章的前言,一年多以前,作者写这本书的时候,Kitkat(Android 4.4)还没有出来,作者也声明这本书默认使用的是Android4.1和Linux3.4的环境. 而4.4版本的Android的「开发者选项」中已经添加了Art模式和Dalvik模式切换的

java虚拟机与Dalvik虚拟机

Java语言的一个非常重要的特点就是与平台的无关性.而使用Java虚拟机是实现这一特点的关键.一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码.而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译.Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行.其实,Java虚拟机

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虚拟机启动过程(三)

源码版本:Android-4.4.4_r2 提示:大部分分析直接注释在代码内. 相关文章: [分析]dalvik虚拟机启动过程(一) [分析]dalvik虚拟机启动过程(二) 在AndroidRuntime::start中调用AndroidRuntime::startVm函数启动了虚拟机,然后又调用了AndroidRuntime::startReg函数注册Android函数: /* * 向 VM 注册Android本地函数. * Register android native functions

Android ART运行时与Dalvik虚拟机

这几天在做一个项目时需要在Android中使用OSGi框架(Apache Felix),于是在一个android 4.4.2 版本系统的某品牌的平板上实验. 实验内容很简单:把felix包里的felix.jar包和一些bundles的jar包用android sdk里的dx及aapt工具转化为包含dex字节码的jar 包.这样使这些jar包能在Android上跑起来.(因为Android上使用的是在Dalvik虚拟机而不是标准的java虚拟机,所以“原生”的 jar包不能直接在Android上跑

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

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