Android虚拟机
珠峰之巅-程序员
这个作者很懒,什么都没留下…
展开
-
Android内核和Linux内核的区别
1.Android系统层面的底层是Linux,并且在中间加上了一个叫做Dalvik的Java虚拟机,从表面层看是Android运行库。每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例。为了支持多个虚拟机在同一设备上高效运行,dalvik被改写过。Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)-该格式经过优化,以将内存好用降到最低。Andr原创 2016-12-22 20:12:47 · 22569 阅读 · 0 评论 -
开始虚拟机的准备工作
int dvmStartup(int argc,const char* const argv[],bool ignoreunrecognized,JNIEnv* pEnv){ int i,cc; assert(gDvm.initializing); LOGV("VM init args (%d):\n",argc); for(i原创 2016-12-23 16:03:57 · 560 阅读 · 0 评论 -
Dalvik虚拟机相关的可执行程序
当Java程序运行时,都是一个虚拟机解释java的字节码,将这些字节码翻译成本地CPU的指令吗,然后执行。对Java程序而言,负责解释并执行的就是一个虚拟机。 dalvikvm的作用就是创建一个虚拟机并执行参数中指定的Java类,说明该程序的使用方法: 1.首先新建一个名为Foo.java的文件 class Foo{原创 2016-12-23 15:33:53 · 580 阅读 · 0 评论 -
Dalvik Vm架构
输入.class经过Dx工具、Class Loader变为字节码,然后通过解释器,内存管理,线程管理等到host OS.Android应用编译的流程: Java文件 jdk class文件 AndroidManifest,XML Resource文件转载 2016-12-23 14:36:08 · 485 阅读 · 0 评论 -
Dalvik控制VM详解
1.扩展的JNI检测 JNI(Java native Interface)是Java本地接口,提供了Java语言程序调用本地(C/C++)代码的方法。为了能触发CheckJNI标志位,第二种特性是dalvik.vm.checkjni,它的值覆盖了ro.kernel.Android.checkjni的值。如果这个特性没有被定义,dalvik.vm.checkjni也没有设置成false,原创 2016-12-23 14:26:01 · 2090 阅读 · 0 评论 -
Dalvik VM的主要特征
在Dalvik VM中,一个应用中会定义很多类,编译完成后有很多相应的.class文件,.dex文件吧所有的.class文件内容整合到一个文件中。除了减少整体文件尺寸,I/0操作,也提高了类的查找速度。 每个Android应用都运行在一个Davik Vm实例中,每个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制、内存分配和管理、Mutex等都是依赖底层操作系统实现的。所有的And原创 2016-12-23 11:55:06 · 488 阅读 · 0 评论 -
Android虚拟机-Dalvik VM架构
Dalvik, VM会监视所有的程序APK,并且创建依赖关系熟,为每个程序优化代码并存储在Dalvik缓存中。Dalvik VM第一次加载后会生成Cache文件,加速加载,Dalvik Vm的第一次加载很慢。 dx是一套工具,可以将Java的.class文件转换成.dex格式,一个dex文档通常会有多个.class文件。由于dex有时必须进行优化,会是文件大小正价1-4倍,并以ODEX结尾原创 2016-12-23 11:32:28 · 1178 阅读 · 0 评论 -
java虚拟机的生命周期
同一台计算机上同时运行三个java程序,则会得到三个java虚拟机实例。每个java程序都运行在自己的java虚拟机实例 。在Java虚拟机内部有两种线程:守护线程与非守护线程。守护线程由自己使用的,比如执行垃圾收集任务的线程。但是,Java程序也可以把它创建的任何线程标记为守护线程。而java程序中的初始线程-就是开始于main()的,是非守护线程。原创 2016-12-23 10:30:46 · 495 阅读 · 0 评论 -
Java虚拟机的体系结构
java虚拟机由如下五个部分组成: 一组指令集 一组寄存器 一个栈 一个无用单元收集堆 一个方法区1.Java指令集 Java虚拟机支持大约248个字节码,每个字节码执行一种基本的CPU运算,例如把一个整数加到寄存器、子程序转移等。Java指令集相当于Java程序的汇编语言。 虚拟机的内层循环执行过程如下: do{原创 2016-12-23 10:23:38 · 544 阅读 · 0 评论 -
启动zygote
在init.rc中配置zygote启动参数,使用adb pull /init.rc ,文件和zygote相关配置信息如下。service zygote /system/bin/app_process -Xzygote5.2 启动Socket服务端口 当zygote服务从app_process启动后,会启动一个Dalvik虚拟机,虚拟机执行的第一个Java类时Zygoteinit.j原创 2016-12-23 16:18:17 · 453 阅读 · 0 评论