对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别

虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,
谈谈加载图片的时候怎么处理大图片的,
outmemoryException
BitmapFactory.option 
垃圾回收,没有引用的对象,在某个时刻会被系统gc掉 .

Dalvik和标准Java 虚拟机 (JVM)首要差别
Dalvik 基于 寄存器 ,而 JVM 基于栈。
基于 寄存器 虚拟机 对于编译后变大的程序来说,在它们执行的时候,花费的时间更短。
Dalvik和Java运行环境的区别
1:Dalvik主要是完成对象生命周期管理, 堆栈 管理,线程管理,安全和异常管理,以及 垃圾回收 等等重要功能。
2:Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik 虚拟机 实例,其代码在虚拟机的解释下得以执行。
3:不同于Java 虚拟机 运行java 字节码 ,Dalvik虚拟机运行的是其专有的 文件格式 Dex
4:dex 文件格式 可以减少整体文件尺寸,提高I/o操作的类查找速度。
5:odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。
6:所有的Android应用的线程都对应一个Linux线程, 虚拟机 因而可以更多的依赖 操作系统 线程调度 和管理机制
7:有一个特殊的 虚拟机 进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成 虚拟机 的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的 虚拟机 实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有 虚拟机 实例都和Zygote共享一块内存区域。
8:Dalvik是由Dan Bornstein编写的,名字来源于他的祖先曾经居住过名叫Dalvík的小渔村,村子位于冰岛Eyjafjörður

许多GC实现都是在对象开头的地方留一小块空间给GC标记用。Dalvik VM则不同,在进行GC的时候会单独申请一块空间,以位图的形式来保存整个堆上的对象的标记,在GC结束后就释放该空间。 
dalvik是执行的时候编译+运行,安装比较快,开启应用比较慢,应用占用空间小ART是安装的时候就编译好了,执行的时候直接就可以运行的,安装慢,开启应用快,占用空间大用个比喻来说就是,骑自行车dalvik 是已经折叠起来的自行车,每次骑都要先组装自行车才能骑ART 是已经组装好的自行车,每次骑直接上车就能走人效率高在开启的时候,运行中的速度是差不多的

你可能感兴趣的:(android)