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函数检查是否有异常情况出现。

 

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

 

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

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

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

  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学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  6. java学习笔记之基础篇

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

  7. Java学习笔记(04)

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

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

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

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

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

随机推荐

  1. 一个MySQL中两表联合update的例子(并带有group by分组)

    内容简介 本文主要展示了在MySQL中,使用两表联合的方式来更新其中一个表字段值的SQL语句. 也就是update table1 join table2 on table1.col_name1=tab ...

  2. 51nod1010(枚举+二分)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 题意:中文题诶- 思路:求第一个比 x (1<= ...

  3. Cogs 9. 中心台站建设

    9. 中心台站建设 ★★☆   输入文件:zpj.in   输出文件:zpj.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]     n个城市之间有通讯网络,从这n个城 ...

  4. Exadata中的dbserver_backup.sh脚本

    dbserver_backup.sh脚本在老版本的exadata中,它存放在/opt/oracle.SupportTools目录中,主要用于/根文件系统和/boot分区的备份.dbserver_bac ...

  5. [Leetcode]007. Reverse Integer

    public class Solution { public int reverse(int x) { long rev=0; while(x!=0){ rev = rev*10+x%10; x=x/ ...

  6. Angular2.0的学习(三)

    第三节课:依赖注入 1.什么是依赖注入模式及使用依赖注入的好处 2.介绍Angular的依赖注入实现:注入器和提供器 3.注入器的层级结构

  7. POJ 2361 Tic Tac Toe

    题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...

  8. (转)linux 系统下虚拟用户的作用

    原文:http://blog.csdn.net/luoshao20120430/article/details/16900653            http://blog.csdn.net/u01 ...

  9. 牛客网Java刷题知识点之构造函数与set方法、与类名同名的一般方法、构造函数中有return语句

    不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...

  10. Sqoop概述

    sqoop Sqoop 是传统数据库与 Hadoop 之间数据同步的工具,它是 Hadoop 发展到一定程度的必然产物,它主要解决的是传统数据库和Hadoop之间数据的迁移问题.这节课我们将详细介绍 ...