资源优化与共享:
- Zygote 进程作为 Android 系统的首个 Java 进程,通过写时拷贝(Copy - On - Write)技术实现资源优化
- Copy - on - Write(写时复制,COW)是一种内存使用优化的技术。它的核心思想是:多个进程或者线程共享同一份资源,只有在某个进程或线程尝试修改资源时,才会真正的复制一份独立的副本。这样可以减少不必要的内存复制,提升性能。
- 当 Zygote 进程启动时,它会预先加载一些共享资源,如 JNI 函数、共享库、常用的类以及主题资源等。
- system_server 进程从 Zygote 进程中 fork 出来时,它可以直接使用这些已经加载的资源,而无需重新加载,从而提高系统启动效率和资源利用率;
- 如果 system_server 进程直接由 init 进程启动,那么它需要自行加载和初始化所有必要的资源和服务。而通过 Zygote 进程启动,可以直接利用 Zygote 已经加载的资源,避免不必要的服务启动和重复的资源加载;
多线程同步与死锁问题:
- 进程的 fork 操作对多线程不友好,因为 fork 会复制整个用户空间的数据(使用 Copy - On - Write 策略)以及所有系统对象,但仅复制当前线程到子进程中;
- 如果 system_server 进程直接由 init 进程启动,并且它本身包含多个线程,那么在 fork 操作时可能会遇到多个线程同步和死锁问题。而 Zygote 进程在 fork 前后会管理线程状态,避免出现这些问题。此外,Zygote 进程不使用 Binder IPC 机制仅从进程间通信,也是为了避免多线程问题。