Dalvik虚拟机进程模型研究

2019-09-09 13:33孙丹
数码世界 2019年6期
关键词:线程代码进程

孙丹

摘要:不同于传统Java程序,DaMk虚拟机能够完成多个独立进程创建。基于这种认识,本文在对Dalvik虚拟机展开分析的基础上,对Dalvik虚拟机进程模型进行了探讨,发现其能够在吸收Linux和Java进程控制特点基础上,利用特有进程实现API控制,因此在DaMk虚拟机应用时还要把握这一特征,加强平台进程控制管理。

关键词:DaMk虚拟机进程模型

引言

Android平台目前是智能手机广泛应用的平台,其采用Dalvik虚拟机技术保证手机多个应用程序在运行过程中减少资源占用,并保持较高运行效率Da Mk虚拟机之所以能够实现平台程序兼容优化,与其进程创建特性有着直接关系。因此,还要加强Dalvik虚拟机进程模型分析,以便掌握Dalvik虚拟机进程创建优缺点,达到合理应用虚拟技术的目标。

1 Dalvik虚拟机概述

Dalvik虚拟机实际上就是Google公司为Android平台设计的虚拟机,是Android移动设备平台核心组成部分之一。采用Dalvik虚拟机,能够为转换为Dalvik Executable(简称,dex)格式的Java程序运行提供支持。作为Dalvik专用压缩格式,.dex能够在处理速度及内存有限的运算系统中得到应用,可以同时对多个虚拟机实例进行运用,并将每个应用当成是独立Linux进程。通过创建独立进程,能够避免虚拟机崩溃时出现所有程序被关闭问题。但与此同时,创建多个独立进程,可能导致系统运行速度减慢,因此Dalvik虚拟机被看成是拖慢Android的根本原因。

2 Dalvik虚拟机进程模型分析

2.1虚拟机进程与线程

所谓的Dalvik虚拟机进程,从通俗意义上来讲就是Android应用程序进程,实际Dalvik虚拟机在创建进程时,将对一个成员函数进行调用。而一旦发现函数为JNI方法,其将直接跳转到相应地址执行程序,即在本地操作系统上运行程序,并非利用虚拟机解释器执行操作。因此采用JNI方法,可以实现Android应用程序与本地操作系统直接通信。除了对Java代码进行执行,Dalvik虚拟机能够执行Native代码,即c/c++函数。在函数调用期间,虚拟机能够利用本地操作系统直接进行进程或线程创建,得到相应的Linux进程和线程。利用Native代码创建进程,需要对虚拟机进行加载.因此可以看成是虚拟机的一个进程。如果创建出的线程能够对Java代码进行执行,则能看成是虚拟机的一个线程。

2.2进程创建过程

Dalvik虚拟机进程能够利用Activity Manager Service服务提供。分析进程创建过程可以发现,该服务能够利用android.Os.Process类的静态成员函数start进行Zygote进程创建,然后由该进程通过dalvik.system.Zygote类的静态成员函数forkAndSpecialize实现虚拟机线程创建。相较于进程,线程占用资源少,能够与其他线程共享资源。但线程管理相对麻烦,需要解决同步问题-个线程的崩溃可能引起其他线程崩溃从Java语言层面来讲,可以利用java.lang.Thread类的成员函数start进行虚拟机线程创建。在实际创建过程中,将完成本地操作系统进程创建,得到Linux进程。不同于之前创建的Linux进程,该进程无对应虚拟机实例,因此不会自动附加到虚拟机中,而是需要对Java代码进行执行才能完成附加。

2.3创建方法比较

由Dalvik虚拟机进程创建过程可知,其基本采用本地方法实现进程创建。采用fork方法,得到的子进程仅为半初始化状态,是zygote进程。在父进程完成addNeWHeap调用的情况下,将采用写时复制方式实现进程共享,完成初始化操作。采用forkAndSpecialize方法,将单独完成子进程的创建,需要对HeapWorker线程进行启动,完成对象终结函数的执行,进行对象清理和归队引用,从而完成线程调试。通过执行addNewHeap,能够进行新堆创建,为特定任务运行提供支持。采用forkSystemServer方法,基本与forkAndSpecialize拥有相同进程创建过程,但在子进程结束后将不会进行父进程的创建。在Linux进程中,对forx进行调用,得到的父子进程堆栈不存在关联,但除dex文件以往的其他文件均能对虚拟机核心库代码进行共享,因此不仅可以使Linux进程的优势充分发挥,也能使系统内存得到节省。从比较结果来看,Dalvik虚拟机在对传统Java进程控制API方式进行保留的同时,也对Linux操作系统特点进行了汲取,能够利用特有进程实现API的控制,利用forx语义或控制信号实现进程创建,因此在系统启动时就能完成系统服务进程创建。

3结论

综上所述,在开源的Android系統中,Dalvik虚拟机能够通过加强Java应用和吸取Linux特点利用特有进程完成API控制,因此才能在大量智能移动平台上得到使用和移植。相信伴随着虚拟技术的发展,Dalvik虚拟机也将突破运行速度方面的局限性。

参考文献

[1]尹学渊,陈兴蜀,陶术松,等.一种无代理虚拟机进程监控方法[J],南京大学学报(自然科学),2019,55(02):221 230.

[2]陈佳昕,虚拟机隐藏进程检测系统设计与实现[J]现代计算机(专业版),2019(O1):93-96.

猜你喜欢
线程代码进程
多核一个都不落CPU极限这样用
快速杀掉顽固进程
不留死角 全方位监控系统
神秘的代码
Java多线程产生安全问题及对策分析
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
中外民主法制进程专题复习
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
近期连续上涨7天以上的股