理清几个术语!
1、JAVA虚拟机
http://shenyuc629.iteye.com/blog/1698770
JAVA程序为了能一次编译之后再不同的平台上运行,就是因为在运行程序之前,把这台机器想象成了属于自己的那台熟悉的机器,即为虚拟机。
JAVA程序先在虚拟机上运行,再将程序翻译为机器指令在具体的机器上运行。
一个JAVA程序对应一个虚拟机,3个JAVA程序就有三个虚拟机。
那为什么不多个JAVA程序共用一个虚拟机呢?我也不知道
http://blog.csdn.net/bingduanlbd/article/details/8363734
看了这篇文章,我猜想是因为 一个JAVA虚拟机,它启动的时候,自己的电脑是要给它分配一段内存空间的,然后它还有自己的Java栈、程序计数寄存器(PC寄存器)等等。
然后一个JAVA程序可能会有多个线程等等。如果共用的话,要么就动态增加虚拟机的内存,要么就一开始给它很大的内存。动态增加感觉麻烦,还不如直接换一个虚拟机。
虚拟机的内存可以自己设置,如果设很大的话,那不就相当于在WINDOWS下装个UBUNTU跑了么,要是只运行一个程序,也没什么必要。一般的电脑又不会只运行JAVA程序。
http://blog.sina.com.cn/s/blog_61fbf8d101015r1z.html (JVM设置内存)
2、JRE,Java运行环境
是运行JAVA程序所必须的环境集合,包含JVM标准实现及Java核心类库。
3、ART Android Runtime
http://www.cnblogs.com/manuosex/p/3634375.html
http://blog.csdn.net/luoshengyang/article/details/39307813
android要做到在不同的设备下使用,一定要使用虚拟机,但是虚拟机是跟设备有关的。每台手机都装了对应的虚拟机,就相当于所有的android程序都在相同的机器上跑了,APP开发者只需要弄懂一套API即可,不用考虑硬件之间的差异。
但这就会引发一个问题,APP每次跑起来,都要在虚拟机上运行,然后虚拟机再将字节码翻译成机器代码,每次执行都会不断的翻译翻译翻译,即时优化过后还是会很慢。
ART模式与Dalvik模式最大的不同在于,启用ART模式后,系统在安装应用的时候会进行一次预编译,将字节码转换为机器语言(OAT,OAT文件是一种Android私有ELF文件格式,它不仅包含有从DEX文件翻译而来的本地机器指令,还包含有原来的DEX文件内容。)存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升。这种编译的方式与c++,c语言编译方式蛮像。
不深究。
Binder机制不懂
Service Manager不懂