JVM有三重意思:java virtual machine specification,java virtual machine implementation, java virtual machine runtime instance. 作为Android系统的使用者,我们主要关心runtime instance,不过为了对JVM全貌有个了解,还是需要简要回顾一下JVM specification描述的模型。
因为涉及体系结构,编译器和操作系统铁三角,这个话题还是很大。不过我们的目标是理解一个APK是如何在Android JVM上运行的,所以重点关注操作系统方面,编译器和体系结构部分且当作黑盒子看待。
JVM 模型
JVM是一个抽象的计算机,在它上面运行的程序是平台无关的。JVM通过Class loader来加载class并执行其中的bytecode。执行bytecode的execution engine根据具体的实现有很大差异。JVM 可以通过native method来与host platform交互。
JVM conceptual arch:
JVM上memory包含集中类型: method area, java heap, java stack, native heap, native stack:
Runtime data areas shared among all threads:
Runtime data areas exclusive to each threads:
JVM class loader:
ART JVM runtime implementation
How did ART VM come?
- Boot-loader loads kernel and start init process;
- Init start Zygote process;
- Zygote initializes a Dalvik/ART VM which preloads and pre-initializes core libraries classes;
- Zygote keeps in an idle state by system and waits for socket requests;
- Once an application execution request occur, Zygote forks itself and create new process with pre-loaded Darvik/ART VM;