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

};

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

 

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

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

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

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

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

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

 

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

 

Android(java)学习笔记159:Dalivk虚拟机的初始化过程的更多相关文章

  1. Android(java)学习笔记102:Dalivk虚拟机的初始化过程

    1. 初始化下面系统函数(调用dvmStartup函数初始化所有相关的函数) 开始学习虚拟机的初始化过程,先从dvmStartup函数开始,这个函数实现所有开始虚拟机的准备工作:    dvmAllo ...

  2. Android开发学习笔记-自定义组合控件的过程

    自定义组合控件的过程 1.自定义一个View 一般来说,继承相对布局,或者线性布局 ViewGroup:2.实现父类的构造方法.一般来说,需要在构造方法里初始化自定义的布局文件:3.根据一些需要或者需 ...

  3. JAVA学习笔记-数组的三种初始化方式

      package Study; public class TestArray02 { public static void main(String[] args){//声明 int[] a; int ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  6. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  7. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

随机推荐

  1. 【HDOJ】3660 Alice and Bob's Trip

    就是一个基本的dfs.可关键问题是c/c++/g++光输入就超时了.还是写java过的,毕竟时限4s.都放弃希望了,没想到还真过了. import java.lang.*; import java.i ...

  2. java 页面url传值中文乱码的解决方法

    parent.window.location.href 和 iframe中src的乱码问题.要在这两个url地址中传中文,必须加编码,然后再解码.编码:encodeURI(encodeURI(&quo ...

  3. javascript中的 && 与 || 的运用

    a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a a || b : 将a, b转换为Boolean类型, 再执行逻辑或, tr ...

  4. Java 回调函数

    下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...

  5. [转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)

    前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IAction ...

  6. mongodb c++ driver(2.53)windows编译

    编译环境: (1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用: (2) 下载scons2.3.0,The current production release ...

  7. insertion Sort List (链表的插入排序) leecode java

    逻辑简单,代码难写,基础不劳,leecode写注释不能出现中文,太麻烦,我写了大量注释,链表问题最重要的就是你那个指针式干啥的 提交地址https://oj.leetcode.com/problems ...

  8. HDOJ-ACM1013(JAVA)

    这道题也很简单~主要是将输入转为字符串(存储大数,操作字符数组) 题意: 24 : 2 + 4 = 6  输出6 39 : 3 + 9 = 12 , 1 + 2 = 3 输出3 999: 9 + 9 ...

  9. [读书笔记]了不起的node.js+实践(一)

    环境的变化带来了技术大跃进,机遇和挑战同时到来.基于我js也没有学,只好赶鸭子上架一起学了.(>﹏<) 1.先读读书 一开始就不知死活地看<深入浅出node.js>,弄得团团转 ...

  10. Excel中VBA 连接 数据库 方法- 摘自网络

    Sub GetData() Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.R ...