Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别

网友投稿 810 2022-05-30

java虚拟机:

Dalvik虚拟机:

基于栈的机器必须使用指令来载入和操作栈上数据,所需指令更多更多 dalvik虚拟机是基于寄存器的

Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别

dalvik虚拟机架构:

Dalvik进程管理:

dalvik进程管理是依赖于linux的进程体系结构的,如要为应用程序创建一个进程,它会使用linux的fork机制来复制一个进程(复制进程往往比创建进程效率更高)。

Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,它通过init进程启动。首先会孵化出System_Server(android绝大多系统服务的守护进程,它会监听socket等待请求命令,当有一个应用程序启动时,就会向它发出请求,zygote就会FORK出一个新的应用程序进程).每当系统要求执行一个android应用程序时,Zygote就会运用linux的FORK进制产生一个子进程来执行该应用程序。

每当执行一个Android应用程序,Zygote就会孵化一个子线程去执行该应用程序(系统内部执行dvz指令完成的)。这样做的好处是显而易见的,Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,库的加载,预置类库的加载和初始化等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速地提供一个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,这样可以大大节省内存开销。

相对于基于堆栈的虚拟机实现,基于寄存器的虚拟机实现虽然在硬件通用性上要差一些,但是它在代码的执行效率却更胜一筹。在基于寄存器的虚拟机中,可以更加有效地减少多余指令的分发和减少内存的读写访问。

JVM和Dalvik进程管理:

linux中进程间通信的方式有很多,但是dalvik使用的是信号方式来完成进程间通信。

Android的初始化流程:

Android ARM Java 虚拟化

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Redis实现附近的人
下一篇:架构师之路 — 软件架构 — Overview
相关文章