Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于APP对应虚拟机 #5

Open
explorer-of-web3 opened this issue Feb 10, 2016 · 2 comments
Open

关于APP对应虚拟机 #5

explorer-of-web3 opened this issue Feb 10, 2016 · 2 comments

Comments

@explorer-of-web3
Copy link

博主在博客中说到,所谓多进程模式是一个APP对应多个虚拟机,但有的资料说Dalvik虚拟机是不同于JVM的一点就是其中可以运行多个进程,所以一个APP对应一个虚拟机,而虚拟机可以运行多个进程,这两者谁对谁错,请博主给以权威资料证明

@AnyLifeZLB
Copy link

@alighters
Copy link

@AnyLifeZLB @weifucheng 我来回答一下,若是有错了,请指教哈。

  1. 进程的问题:Android 中的第一个 Java 进程是 Zygote 进程,之后的进程(Android 每个应用的进程)都是从这个 Zygote 进程 fork 出来的,fork 出来的子进程的父进程都是 Zygote 进程。
    PS: service 指定了 process: remote 之后的进程,其父进程也是 Zygote 进程。具体可在 adb shell 下使用 ps 命令查看。

  2. 关于虚拟机的问题:在启动 Zygote 进程之前,会由 init.rc 的进程来启动 Dalvik 虚拟机。即之后的 Zygote 进程是运行在 Dalvik 虚拟机上的。这样的话,在 fork 出来的子进程,根据 fork 的原理(copy on write),子进程会拷贝一份跟父进程相同的进程地址空间,这样子进程也会有自己的 Dalvik 虚拟机代码。即每个进程便是一个个的 Dalvik 虚拟机。这样每个 App 挂掉便不会影响其他的进程。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants