Dalvik虚拟机的进程和线程管理
2013-07-23 08:22
330 查看
一般来说,虚拟机的进程和线程都是和目标机器本地操作系统的进程和线程一一对应的,这样的好处是可以使本地操作系统来调度进程和线程。
Dalvik虚拟机运行在Linux操作系统之上。Linux操作系统并没有纯粹的线程概念,只要两个进程共享一个地址空间,那么就可以认为它们是同一个进程的两个线程。Linux系统提供了两个fork和clone调用,其中,前者是用来创建进程的,而后者是用来创建线程的。
Android应用程序进程,有两大特点:
1. 每个Android应用程序进程都有一个Dalvik虚拟机实例。这样做得好处是Android应用程序进程之间不会互相影响,也就是说,一个Android应用程序进程的意外终止,不会影响到其他的应用程序进程的正常运行。
2. 每个Android应用程序进程都是由一种称为Zygote的进程fork出来的。Zygote进程是由init进程启动起来的,也就是在系统启动的时候启动的。Zygnote进程在启动的时候,会创建一个虚拟机实例,并且在这个虚拟机实例将所有的Java核心库都加载起来。每当Zygote进程需要创建一个Android应用程序进程的时候,它就通过复制自身来实现,也就是通过fork系统调用来实现。这些被fork出来的Android应用程序进程,一方面是复制了Zygote进程中的虚拟机实例,另外一方面是与Zygote进程共享了同一套Java核心库。这样不仅Android程序进程的创建很快,而且所有的应用程序都共享同一套Java核心库而节省了内存空间。
Dalvik虚拟机运行在Linux操作系统之上。Linux操作系统并没有纯粹的线程概念,只要两个进程共享一个地址空间,那么就可以认为它们是同一个进程的两个线程。Linux系统提供了两个fork和clone调用,其中,前者是用来创建进程的,而后者是用来创建线程的。
Android应用程序进程,有两大特点:
1. 每个Android应用程序进程都有一个Dalvik虚拟机实例。这样做得好处是Android应用程序进程之间不会互相影响,也就是说,一个Android应用程序进程的意外终止,不会影响到其他的应用程序进程的正常运行。
2. 每个Android应用程序进程都是由一种称为Zygote的进程fork出来的。Zygote进程是由init进程启动起来的,也就是在系统启动的时候启动的。Zygnote进程在启动的时候,会创建一个虚拟机实例,并且在这个虚拟机实例将所有的Java核心库都加载起来。每当Zygote进程需要创建一个Android应用程序进程的时候,它就通过复制自身来实现,也就是通过fork系统调用来实现。这些被fork出来的Android应用程序进程,一方面是复制了Zygote进程中的虚拟机实例,另外一方面是与Zygote进程共享了同一套Java核心库。这样不仅Android程序进程的创建很快,而且所有的应用程序都共享同一套Java核心库而节省了内存空间。
相关文章推荐
- Dalvik虚拟机进程和线程的创建过程分析
- Android虚拟机学习总结Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- 卷二 Dalvik与Android源码分析 第二章 进程与线程 2.1 Dalvik虚拟机的进程创建机制 图书版试读--请勿转发
- Android虚拟机器学习总结Dalvik虚拟机创建进程和线程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- Dalvik虚拟机进程和线程的创建过程分析
- 3.3 进程管理_线程在Linux中的实现
- Storm系列(十一)架构分析之Supervisor-管理Worker进程的事件线程
- Dalvik虚拟机线程初始化及函数执行流程
- 【java面试系列之操作系统】进程和线程、死锁、内存管理方式