博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2. Android系统启动流程
阅读量:5024 次
发布时间:2019-06-12

本文共 761 字,大约阅读时间需要 2 分钟。

1.启动加载完内核
2.执行init进程   ----> 设备初始化工作
      a1. 读取inic.rc
      a2. 启动Zygote进程 ----> 该进程是所有进程的孵化器
           b1.  初始化dalvik虚拟机
           b2.  启动system_server进程  
                  c1. 通过socket方式发送命令给Zygote进程
           b3.  接到命令fork自身
                  c1. 创建dalvik虚拟机实例执行应用程序入口函数
Zygote提供了3种创建进程的方法
fork() 创建一个Zygote进程
forkAndSpecialize() 创建一个非Zygote进程
forkSystemServer() 创建一个系统服务进程
Dalvik虚拟机执行程序流程:
[虚拟机线程] -> [装载程序类] -> [验证字节码] -> [查找主类] -> [执行字节码流] -> [结束]
1. 首先通过loadClassFromDex()函数完成类的装载工作
    每个类成功解析后都有一个ClassObject类型的数据结构存在与运行时环境
2. 使用gDvm.loadedClasses全局哈希表来存储查询所有的装载类
3.字节码验证器使用dvmVerifyCodeFlow()函数对装入的代码进行校验
4.调用FindClass()查找并装载main方法类
5.调用dvmInterpret()函数初始化解释器并执行字节码流
关于Dalvik虚拟机的JIT(just in time即时编译)
主流的JIT包含2种字节码编译方式
1. method方式: 以函数或方法为单位进行编译
2. trace方式:以trace为单位进行编译
    经常执行的代码分支会缓存

转载于:https://www.cnblogs.com/bingghost/p/5769271.html

你可能感兴趣的文章
响应者链
查看>>
指针从函数内部带回返回值
查看>>
在使用webView播放flash或视频文件时无法关闭声音的问题
查看>>
redhat 7 源码安装 mysql5.5.49
查看>>
CCP浅谈
查看>>
NAT虚拟网络配置
查看>>
c#部分---需要实例化的内容;
查看>>
销售类
查看>>
技术项目,问题
查看>>
线程池总结
查看>>
Learning to rank (software, datasets)
查看>>
git常见问题
查看>>
.NETFramework:template
查看>>
HM16.0之帧内模式——xCheckRDCostIntra()函数
查看>>
Jmeter性能测试 入门
查看>>
安卓动画有哪几种?他们的区别?
查看>>
Nodejs学习总结 -Express入门(一)
查看>>
web前端优化
查看>>
ssh 连接原理及ssh-keygen
查看>>
vs2013编译qt程序后中文出现乱码
查看>>