zoukankan      html  css  js  c++  java
  • 2. Android系统启动流程



    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为单位进行编译
        经常执行的代码分支会缓存























  • 相关阅读:
    浅谈莫比乌斯反演/杜教筛/狄利克雷卷积
    bzoj3944:Sum
    bzoj3994:[SDOI2015]约数个数和
    bzoj2820:YY的GCD
    bzoj5323:[Jxoi2018]游戏
    bzoj5324:[Jxoi2018]守卫
    斐波那契和矩阵快速幂
    CF1278C-Berry Jam-(前缀和)
    CF1278B-A and B-(简单数学)
    CF92B-Binary Number-(思维)
  • 原文地址:https://www.cnblogs.com/bingghost/p/5769271.html
Copyright © 2011-2022 走看看