2dalvik虚拟机的运行过程分析

2dalvik虚拟机的运行过程分析

ID:19870274

大小:314.86 KB

页数:22页

时间:2018-10-07

2dalvik虚拟机的运行过程分析_第1页
2dalvik虚拟机的运行过程分析_第2页
2dalvik虚拟机的运行过程分析_第3页
2dalvik虚拟机的运行过程分析_第4页
2dalvik虚拟机的运行过程分析_第5页
资源描述:

《2dalvik虚拟机的运行过程分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Dalvik虚拟机的运行过程分析分类:Android2013-05-2000:5723620人阅渎评论(17)收藏举报AndroidDalvikRun运行在前曲一篇文章中,我们分析丫Dalvik虚拟机在Zygote进程中的启动过程。Dalvik虚拟机启动完成之后,也就是在各个子模块初始化完成以及加载了相应的Java核心类库之后,就是可以执行Java代码了。当然,Dalvik虚拟机除了可以执行Java代码之外,还可以执行Native代码,也就是C和C++代码。在本文巾,我们就将继续以Zygote进程的启动过程为例,来分析Dalvik虚拟机的运行过程。从

2、前面Dalvik虚拟机的启动过程分析一文可以知道,Dalvik虚拟机在Zygote进程中启动完成之后,就会获得一个JavaVM实例和一个JN旧nv实例。其中,获得的JavaVM实例就是川米描述Zygote进程的Dalvik虚拟机实例,而获得的JNIEnv实例描述的足Zygote进程的主线程的JNI环境。紧接着,Zygote进程就会通过前获得的JNIEnv实例的成员函数CallStaticVoidMethod来调用com.android.internal.os.Zygotelnit类的静态成员函数main。这就相当于是将com.android.inte

3、rnal.os.Zygotelnit类的静态成员函数main作为Java代码的入口点。接不來,我们就从JN旧nv类的成员函数CallStaticVoidMethod开始,分析Dalvik虚拟机的运行过程,如图1所示:JNIEnv11:CallStaticVoic

4、v1ethodinteractionRunDalvik[RunDalvik]IJNINativelnterfaceiJ了

5、

6、St?k

7、

8、int了p

9、mterp2:CallStaticVoidMethodV3:CallStaticVoidMethodV>4:dvmCallMet^odV5:dv

10、mlnterprjet6:dvmlnterpret^td7:invokeDirect8:invokeMethod9:returnFromMethod图1Dalvik虚拟机的运行过程这个过程可以分为9个步骤,接不来我们就详细分析每一个步骤。Step1.JNIEnv.CallStaticVoidMethod[cpp]viewplaincopyprint?•1.struct—〕NIEnv;3.typedef_〕NIEnvJNIEnv;4.5.6.struct—〕NIEnv{7./*donotrenamethis;itdoesnotseemtobeentir

11、elyopaque*/8.conststructJNINativelnterface*functions;9.10.11.voidCallStaticVoidMethod(jclassclazz,jmethodIDmethodID,…)12.{13.va_listargs;14.va_start(args,methodID);IS.functions->CallStaticVoidMethodV(this,clazz,methodID,args);16.va_end(args);17.}18.19.20.};这个函数定义奋:文件dalvik/libn

12、ativehelper/include/nativehelper/jni.h中。JN旧nv实际上是一个结构,它有一个成员变量functions,指M的是一个回调幽数表。这个回调函数表使川一个JNINativelnterface对象米描述。JNIEnv结构体的成员函数CallStaticVoidMethod的实现很简单,它只是调用该W调函数表中的CallStaticVoidMethodV函数米执行参数clazz和methodID所描述的Java代码。Step2.JNINativelnterface.CallStaticVoidMethodV[cpp]v

13、iewplaincopyprint?I1.structJNINativelnterface{2.3-4.void(*CallStaticVoidMethodV)(DNIEnv*?jclass,jmethodID,va一1ist);5.5.这个函数定义在文件dalvik/libnativehelper/include/nativehelper/jni.h屮。JNINativelnterface足一个结构体,它'的成似受fiCallStaticVoidMethodV足一个函数指针。从前而Dalvik虚拟机的们动过程分析一文可以知道,Dalvik虚拟机在内

14、部为Zygote进程的主线程所创建的Java环境足用一个JNIEnvExt结构体来描述的,并且这个JNIEn

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。