首页 技术 正文
技术 2022年11月12日
0 收藏 842 点赞 2,803 浏览 1608 个字

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.到这里就把整个虚拟机初始化流程完成。

 

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297