每进程一个JVM,孵化器会以fork的方式复制JVM进程。至于native process和os process我想可能是针对java进程和Linux进程说的吧,不太了解

解决方案 »

  1.   


    那你也觉得在java里面有两种进程?
      

  2.   

    android是通过zygote生这个儿子的,生儿子的方法就是fork如果纯扣理论上的原理,fork是将父进程的东西复制一份,给儿子,自己还是自己,儿子有父亲的一份拷贝,这样被创建的进程就有一个和父进程一样的jvm,不过是拷贝过来的,不是同一个。不是实际应用中,这样做太浪费了。
    至少代码去,完全是只读的,这样不管父进程还是子进程,可以共用(mmap()ed),这就是jvm中的一些 core library dex文件是这样共享的。
    还有一些,数据区的,实际操作是copy-on-write, 也就是儿进程想要写这部分数据区,才会拷贝。
    这些做法都是实际应用为兼顾效率问题,使用的小技巧而已。如果只是要理解工作原理,按照原理来理解这个运行机制即可。
    Native Process就是普通的linux进程,没什么特别的,它没有jvm,也不受zygote管理,一般native process的老爹是init进程,而java进程的老爹是zygote进程, (java进程的爷爷是init进程)