zoukankan      html  css  js  c++  java
  • Android(java)学习笔记102:Dalivk虚拟机的初始化过程

    1. 初始化下面系统函数(调用dvmStartup函数初始化所有相关的函数

    开始学习虚拟机的初始化过程,先从dvmStartup函数开始,这个函数实现所有开始虚拟机的准备工作

       dvmAllocTrackerStartup函数初始化跟踪显示系统,跟踪系统主要用生成调试系统的数据包

       dvmGcStartup函数是用来初始化垃圾回收器

       dvmThreadStartup函数是初始化线程列表和主线程环境参数

       dvmInlineNativeStartup函数是分配内部操作方法的表格内存

       dvmVerificationStartup函数是初始化虚拟机的指令码相关的内容,以便检查指令是否正确

       dvmRegisterMapStartup函数是分配指令寄存器状态的内存

       dvmInstanceofStartup函数是分配虚拟机使用的缓存

       dvmClassStartup函数是初始化虚拟机最基本用的JAVA库

       dvmThreadObjStartup函数是初始化虚拟机进一步使用的JAVA类库线程类

       dvmExceptionStartup函数是初始化虚拟机使用的异常JAVA类库

       dvmStringInternStartup函数是初始化虚拟机解释器使用的字符串哈希表

       dvmNativeStartup函数是初始化本地方法库的表

       dvmInternalNativeStartup函数是初始化内部本地方法,建立哈希表,方便快速查找到

       dvmJniStartup函数是初始化JNI调用表,以便快速找到本地方法调用的入口

       dvmReflectStartup函数是缓存JAVA类库里的反射类

     

    2. 上面初始化函数处理之后,接着把下面这些类先进行初始化,如下:

    staticconst char*earlyClasses[] = {

      "Ljava/lang/InternalError;",

      "Ljava/lang/StackOverflowError;",

      "Ljava/lang/UnsatisfiedLinkError;",

      "Ljava/lang/NoClassDefFoundError;",

      NULL

    };

    初始化这些类,就是调用函数dvmFindSystemClassNoInit来初始化

     

    3. 接着调用dvmValidateBoxClasses函数来初始化JAVA基本类型库,如下:

    staticconstchar*classes[] = {

      "Ljava/lang/Boolean;",

      "Ljava/lang/Character;",

      "Ljava/lang/Float;",

      "Ljava/lang/Double;",

      "Ljava/lang/Byte;",

      "Ljava/lang/Short;",

      "Ljava/lang/Integer;",

      "Ljava/lang/Long;",

      NULL

    };

    备注:这些类调用函数(刚刚使用的dvmFindSystemClassNoInitdvmValidateBoxClasses等),不是上面使用系统函数来初始化,而是调用dvmFindClassNoInit来初始化。

     

    4. 调用dvmPrepMainForJni类调用函数准备主线程里的解释栈可以调用JNI的方法;

     调用registerSystemNatives类调用函数来注册JAVA库里的JNI方法;

     调用dvmCreateStockExceptions类调用函数分配异常出错的内存;

     调用dvmPrepMainThread类调用函数完成解释器主线程的初始化;

     调用dvmDebuggerStartup类调用函数进行调试器的初始化;

     最后调用dvmInitZygote类调用函数或者dvmInitAfterZygote类调用函数来初始化线程的模式,调用dvmCheckException函数检查是否有异常情况出现。

     

    5. 到这里就把整个虚拟机初始化流程完成。

     

  • 相关阅读:
    参数化2--CSV Data Set Config 参数化配置
    简单的数据库性能测试方法
    localStorage.getItem
    性能测试入门分析
    参数化1--jmeter参数化数据(_csvread函数、用户自定义变量等)
    Jmeter聚合报告分析
    JMeter入门(4):Java Request实例
    JMeter入门(3):录制JMeter脚本
    JMeter入门(2):一个简单实例
    JMeter入门(1):JMeter总体介绍及组件介绍
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4731850.html
Copyright © 2011-2022 走看看