欢迎来到天天文库
浏览记录
ID:59246290
大小:130.72 KB
页数:22页
时间:2020-09-08
《虚拟机的运行过程分析.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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实例和一个JNIEnv实例。其中,获得的JavaVM实例就是用来描述Zygote进程的Dalvik虚拟机实例,而获得的JNIEnv实例描述的是Zygote进程的主线程的JNI环境。紧接着,Zygote进程就会通过前面获得的JNIEnv实例的成员函数CallStaticVoidMethod来调用com.android.internal.os.ZygoteInit类的静态成员函数main。这就相当于是将c
3、om.android.internal.os.ZygoteInit类的静态成员函数main作为Java代码的入口点。 接下来,我们就从JNIEnv类的成员函数CallStaticVoidMethod开始,分析Dalvik虚拟机的运行过程,如图1所示:图1Dalvik虚拟机的运行过程 这个过程可以分为9个步骤,接下来我们就详细分析每一个步骤。 Step1. JNIEnv.CallStaticVoidMethod[cpp]viewplaincopyprint?1.struct _JNIEnv; 2....... 1.typede
4、f _JNIEnv JNIEnv; 2....... 3. 4.struct _JNIEnv { 5. /* do not rename this; it does not seem to be entirely opaque */ 6. const struct JNINativeInterface* functions; 7. ...... 8. 9. void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...) 10. {
5、11. va_list args; 12. va_start(args, methodID); 13. functions->CallStaticVoidMethodV(this, clazz, methodID, args); 14. va_end(args); 15. } 16. 17. ...... 18.}; struct_JNIEnv;......typedef_JNIEnvJNIEnv;......struct_JNIEnv{/*donotrename
6、this;itdoesnotseemtobeentirelyopaque*/conststructJNINativeInterface*functions;......voidCallStaticVoidMethod(jclassclazz,jmethodIDmethodID,...){va_listargs;va_start(args,methodID);functions->CallStaticVoidMethodV(this,clazz,methodID,args);va_end(args);}......}; 这个函数定义在文件da
7、lvik/libnativehelper/include/nativehelper/jni.h中。 JNIEnv实际上是一个结构,它有一个成员变量functions,指向的是一个回调函数表。这个回调函数表使用一个JNINativeInterface对象来描述。JNIEnv结构体的成员函数CallStaticVoidMethod的实现很简单,它只是调用该回调函数表中的CallStaticVoidMethodV函数来执行参数clazz和methodID所描述的Java代码。 Step2. JNINativeInterface.CallS
8、taticVoidMethodV[cpp]viewplaincopyprint?1.struct JNINativeInterface
此文档下载收益归作者所有