Here we follow up the investigation of the zygote process
seen in the rst project as discussed in Section 3.1. This
process loads several libraries and Java classes, pre-initializes
Dalvik virtual machine state, and listens on a socket for con-
nections from a client. To start a Java application, Android
connects to the zygote socket and requests that the process
fork. The child begins executing Java code at a particular
method of a specied class, and the parent resumes listening
on the socket. When the child forks, all memory mapped by
the parent is shared copy-on-write with the child. This in-
cludes all loaded libraries and initialized Dalvik virtual ma-
chine state. This is drastically dierent from a traditional
desktop or server where processes are spawned from a shell
or init process that has little or nothing in common with the
application being started.