| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android虚拟机与类加载机制 -> 正文阅读 |
|
[移动开发]Android虚拟机与类加载机制 |
一.Android虚拟机1.初代虚拟机Dalvik与JVM的不同? ①Dalvik执行dex文件DVM也是实现了JVM规范的一个虚拟器,默认使用CMS垃圾回收器(这篇文章中有讲解CMS),但是与JVM运行 Class 字节码不同,DVM执行的是Dex文件。
②DVM的指令集是基于寄存器的除了处理的文件不同,还有一点不同是:DVM的指令集是基于寄存器的,JVM的指令集是基于堆栈的。
2.ARTART是Dalvik的升级版。在了解两者的区别之前,我先详细介绍下Dalvik ①详细介绍下DalvikDalvik虚拟机执行的是dex字节码,解释执行,从Android2.2开始支持JIT即时编译。
以上是对Dalvik的介绍 ②详细介绍下ARTART是Android5.0之后的默认虚拟机。它执行的直接就是本地机器码,而不是dex文件。这个机器码是程序(APK文件)安装的时候翻译出来的。也就是预先编译机制(AOT),与JIT机制对应的。所以在那个时期,应用的安装都比较慢。
3.Android N的运作方式从Android N之后,虚拟机又变了,它将解释执行,JIT,AOT编译混合使用了。具体是什么情况呢?
那么有人会问了,JIT不是都编译了吗,为啥AOT还要编译一次呢?我认为有两个原因,一个是JIT不能持久化,只是针对一次程序运行。再一个是记录到配置文件中的是方法的信息,而不是方法本身。我认为在AOT编译之前要根据这些信息找到这些类,然后再编译成机器码。 二.Android类加载器1.介绍任何一个Java程序都是由一个或多个class文件组成,在程序运行时,需要将class文件加载到JVM中才可以使用,负责加载这些class文件的就是Java的类加载机制。ClassLoader的作用简单来说就是加载 class文件,提供给程序运行时使用。每个Class对象的内部都有一个classLoader字段来标识自己是由哪个ClassLoader加载的。Android中也有类加载机制,作用和Java中的是基本一样的。 2.Android中的类加载器有几个比较重要的类。分别是
他们之间的关系是这样的 3.双亲委托机制让我们看一下一个类是怎么被加载的。我们直接进入
①首先从缓存里面找看看这个类是否已经加载过了。因为类加载需要IO等一些比较耗时的操作,所以能从缓存中加载就从缓存中找。 ②如果缓存中没有,就从父类加载器中找。需要注意的一点是,此父非彼父,之前我们说的父类是继承关系的父类,也就是
具体到这里的程序就是遇到一个类,先问问师傅( 这就是双亲委托机制。 双亲委托机制的好处?
如果我们有双亲委托机制的话,就会加载JDK里面的 OK,让我们继续。 ③父类加载器不行,就自己加载自己加载就是执行
我们知道了 用张图总结就是
三.热修复原理学习了上面的知识后,就很容易明白热修复的原理了。 比如我的某一个类出bug了那么我可以写出更改后的class文件,将其打包成dex文件作为补丁包,如图然后再把它插到
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:13:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |