应用、进程与Java虚拟机的对应关系及Java与安卓应用的差异
Android 应用、进程、虚拟机三者对应关系说明
1. Android 平台下的对应逻辑
默认规则非常清晰:
- 无特殊配置的场景下,一个Android应用对应一个进程,对应一个独立的ART虚拟机实例(Android 5.0之前为Dalvik虚拟机,均属于Android定制的Java虚拟机实现),应用内所有组件、业务逻辑都运行在这个进程和虚拟机实例中。
- 如果你给
<activity>/<service>/<content-provider>/<broadcast-receiver>组件配置了android:process属性指定自定义进程,每启动一个新的自定义进程,系统都会为这个进程分配独立的内存空间、独立的ART虚拟机实例,此时就会出现单个Android应用对应多个进程、多个虚拟机实例的情况。
多进程场景下需要注意:同一个应用的不同进程之间内存完全隔离,静态变量、单例缓存、Application实例都仅在所属进程内生效,跨进程数据交互必须借助IPC机制。
2. 和普通Java应用的核心差异
普通Java应用的对应逻辑是:每次执行java <主类名>命令启动应用,就对应一个操作系统进程、一个独立的标准JVM实例,默认单进程单JVM运行。
两者的差异主要有以下几点:
- 多进程支持逻辑不同:Android应用原生支持单应用多进程,仅需在Manifest中配置属性即可实现,同应用的多个进程由系统统一调度管理;普通Java应用要实现多进程需要手动多次执行启动命令创建独立进程,多个进程之间没有应用层面的绑定关系。
- 虚拟机实现不同:Android采用ART/Dalvik作为虚拟机实现,针对移动设备做了预编译、内存优化、低功耗适配等定制改造,和标准OpenJDK的JVM实现并不相同。
- 进程生命周期管理不同:Android的应用进程由系统ActivityManagerService统一管理,系统会根据进程优先级、当前内存占用情况主动销毁低优先级进程回收资源;普通Java应用的进程生命周期由操作系统或启动方管理,没有系统侧的主动回收策略。
内容的提问来源于stack exchange,提问作者aoyun
相关产品推荐
相关产品推荐

