美文网首页
类加载机制

类加载机制

作者: _一叶孤帆 | 来源:发表于2021-03-04 17:54 被阅读0次

    JVM 与 Dalvik

    Android 应用程序运行在 Dalvik / ART 虚拟机上,每个应用程序都有一个单独的虚拟机实例。Dalvik 虚拟机也是一个 Java 虚拟机,只不过执行的是 dex (一个 dex 包含多个 class ) 文件,而不是 class (一个class 就是一个文件) 文件

    JVM 是基于栈的虚拟机,dalvik 是基于寄存器的虚拟机。

    基于栈的虚拟机

    对于基于栈的虚拟器来说,每一个运行时的线程,都有一个独立的栈,每一次方法调用,都会产生一个栈帧。 栈帧中存在一个操作数栈,而基于栈的虚拟机就是通过操作数栈来进行操作。

    基于寄存器的虚拟机

    寄存器是 CPU 的组成部分。寄存器是有限存贮容量的告诉存贮部件,可以用来暂存指令、数据和位址。

    基于寄存器的虚拟机中没有操作数栈,担忧很多虚拟寄存器,这些寄存器也存放在运行时栈中,本质上就是一个数组,在 Dalvim VM 中每个线程都有自己的 PC 和调用栈,方法调用的活动记录以帧为单位保存在调用栈上。

    ClassLoader

    每个类都有自己的类加载器。

    getClass().getClassLoader()
    

    双亲委派机制

    某个类加载器在加载类时,首先将加载任务委托给父类加载器,依次递推,如果父类加载器可以完成类加载任务,就成功返回,只有父类加载器无法完成此加载任务或者没有父类加载器时,自己才去加载。

    1. 避免重复加载
    2. 安全

    区分类加载

    loadClass

    findClass

    简单热修复

    在类加载之前加载自己的 dex 文件来覆盖要修复的类。

    相关文章

      网友评论

          本文标题:类加载机制

          本文链接:https://www.haomeiwen.com/subject/choqqltx.html