Dalvik虚拟机的运行过程分析.docx

Dalvik虚拟机的运行过程分析.docx

ID:61512997

大小:97.10 KB

页数:19页

时间:2021-02-09

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

《Dalvik虚拟机的运行过程分析.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

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

2、l.os.ZygoteInit类的静态成员函数main作为Java代码的入口点。    接下来,我们就从JNIEnv类的成员函数CallStaticVoidMethod开始,分析Dalvik虚拟机的运行过程,如图1所示:图1Dalvik虚拟机的运行过程    这个过程可以分为9个步骤,接下来我们就详细分析每一个步骤。    Step1. JNIEnv.CallStaticVoidMethod[cpp] viewplaincopy1.struct _JNIEnv;  2.......  3.typedef _JNIEnv JNIEnv;  4.......  5.

3、  6.struct _JNIEnv {  7.    /* do not rename this; it does not seem to be entirely opaque */  8.    const struct JNINativeInterface* functions;  9.    ......  10.  11.    void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...)  12.    {  13.        va_list args;  14.        

4、va_start(args, methodID);  15.        functions->CallStaticVoidMethodV(this, clazz, methodID, args);  16.        va_end(args);  17.    }  18.  19.    ......  20.};      这个函数定义在文件dalvik/libnativehelper/include/nativehelper/jni.h中。     JNIEnv实际上是一个结构,它有一个成员变量functions,指向的是一个回调函数表。这个回调函

5、数表使用一个JNINativeInterface对象来描述。JNIEnv结构体的成员函数CallStaticVoidMethod的实现很简单,它只是调用该回调函数表中的CallStaticVoidMethodV函数来执行参数clazz和methodID所描述的Java代码。    Step2. JNINativeInterface.CallStaticVoidMethodV[cpp] viewplaincopy1.struct JNINativeInterface {  2.    ......  3.  1.    void        (*CallStat

6、icVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);  2.  3.    ......  4.};       这个函数定义在文件dalvik/libnativehelper/include/nativehelper/jni.h中。    JNINativeInterface是一个结构体,它的成员变量CallStaticVoidMethodV是一个函数指针。    从前面Dalvik虚拟机的启动过程分析一文可以知道,Dalvik虚拟机在内部为Zygote进程的主线程所创建的Java环境是用一个JNIEnvEx

7、t结构体来描述的,并且这个JNIEnvExt结构体会被强制转换成一个JNIEnv结构体返回给Zygote进程。     JNIEnvExt结构体定义在文件dalvik/vm/JniInternal.h中,如下所示:[cpp] viewplaincopy1.typedef struct JNIEnvExt {  2.    const struct JNINativeInterface* funcTable;     /* must be first */  3.  4.    ......  5.} JNIEnvExt;      从这里就可以看出,虽然结构体J

8、NIEnvExt和JNI

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

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

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