android dalvik (1)

来源:互联网 发布:windows touch命令 编辑:程序博客网 时间:2024/06/05 09:45
 

 

android  dalvik (1)

Android运行库包括两部分:核心库和Dalvik虚拟机。核心库包括了最基本的类库,如data structure, network, Utilities, File system等的。

很多实现代码都是来自Apache Harmony 项目,主要目的是保证虚拟机的类库能够和Java SE的类库最大可能的兼容。

从而降低应用开发者从Java SE阵营转移到Android开发阵营的难度,增加其可用性。Dalvik虚拟机主要是完成对象生命周期的管理,堆栈的管理,线程管理,

安全和异常的管理,以及垃圾回收等等重要功能。

Dalvik 虚拟机的主要特征 Dalvik虚拟机非常适合在移动终端上使用,相对于在桌面系统和服务器系统运行的虚拟机而言,它不需要很快的CPU速度和大量的内存空间。

根据 Google的测算.64M的RAM已经能够令系统正常运转了。其中24M被用于底层系统的初始化和启动,另外20M被用于高层启动高层服务。

当然,随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必越来越大。


main.c


    for (curOpt = argIdx = 0; argIdx < argc; argIdx++) {
        if (argv[argIdx][0] != '-' && !needExtra)
            break;
        options[curOpt++].optionString = strdup(argv[argIdx]);

        /* some options require an additional arg */
        needExtra = JNI_FALSE;
        if (strcmp(argv[argIdx], "-classpath") == 0 ||
            strcmp(argv[argIdx], "-cp") == 0)
            /* others? */
        {
            needExtra = JNI_TRUE;
        }
    }

    if (needExtra) {
        fprintf(stderr, "Dalvik VM requires value after last option flag\n");
        goto bail;
    }
   
   
    对虚拟机的输入参数进行解析,每个参数以-开头
   
    其中 -classpath 和-cp 需要扩展
   
   
    typedef struct JavaVMInitArgs {
    jint        version;    /* use JNI_VERSION_1_2 or later */

    jint        nOptions;
    JavaVMOption* options;
    jboolean    ignoreUnrecognized;
} JavaVMInitArgs;

初试化参数

jni使用的是 1.4 版本 JNI_VERSION_1_4

blockSigpipe 对管道不处理

调用JNI_CreateJavaVM ,传入初试化类 创建一个VM


typedef const struct JNINativeInterface* JNIEnv;

JNI 环境实际上就是JNI的本地方法

启动的时候需要为虚拟机指定一个类

通过FindClass 找到这个类

通过GetStaticMethodID 找到这个类的main方法

确定这个方式是不是public属性

然后调用这个静态方法

最后退出的时候进行异常检测


这个是 dalvikvm 目录下main.c 的主要功能

1  解析参数 创建VM

2  调用指定类的main方法

3 退出时进行异常检测

 

原创粉丝点击