插件化和热修复学习之路
一、Class的文件的详解
1.什么是class文件
能够被JVM虚拟机识别的文件
2.如何生成一个class文件
a. 通过IDE自动帮我们生成
b.手动通过javac去生成class文件,通过java命令去执行class文件
3.class文件的弊端
a.内存占用大,不适合移动端
b.堆栈的加栈模式,加载速度慢
c.文件IO操作多,类查找慢
二、Dex文件的详解
1.什么是dex文件
能够被DVM识别,并且加载执行的文件格式
2.生成dex文件
a.通过IDE自动生成文件
b.手动通过dx命令生成dex文件,并且手动去执行dex文件在手机上
3. dex文件会去除多余冗余的文件
三、java内存管理
1.Java栈区 : 它是存放Java方法执行时所有的数据
2.本地方法栈 : 是专门为native方法服务
3.方法区 : 存储被虚拟机加载类的信息、常量、静态变量、编译器编译后等数据
4.堆区 : 所有通过new创建的对象的内存都分配到堆中,它也是虚拟机最大的一块内存,时 GC要回收的部分
四、JVM的讲解
原理讲解:从GC Root节点开始,寻找对用所有的引用的节点,没有引用不可达的节点,说明没有被引用,就被认为是垃圾对象
1.引用类型为强引用、软引用、弱引用、虚引用
2.弱引用的创建
Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object> (obj);
obj = null;
wf.get(); ----->必须判断是否为空
3.垃圾回收算法
a.标记-清除算法 : 快速的把对象回收,但是会产生很多内存碎片
b.复制算法 : 开辟一个新的空间并复制要保留的对象,然后清除原有的,保留剩余的。但这样就需要开辟一块新的内存
3.标记-整理算法:在标记-清除算法上做了优化,把标记垃圾的对象再遍历整个空间时,会把所有存活的对象往左端移动,不存活对象往右移,并更新对应的指针。
八、AndFix的使用步骤 (热修复)
1.集成阶段
九、插件化
1.Manifest 的处理 需要了解gradle打包的原理
2. 插件类加载
a.如何自定义ClassLoader加载类文件(需要去学习更多的资源)
b.如何调用插件apk文件的类
十、理解理解Java类加载器(ClassLoader)
1.双亲委派模式的介绍
原理:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,
依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载。
好处:
a.可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次
b.也防止被其他子类随意篡改里面内容
2.四个关键函数
a.loadClass
当类加载请求到来时,先从缓存中查找该类对象,如果存在直接返回,如果不存在则交给该类加载去的父加载器去加载,倘若没有父加载则交给顶级启动类加载器去加载,
最后倘若仍没有找到,则使用findClass()方法去加载,那么我们可以直接使用this.getClass().getClassLoder.loadClass("className")
,
这样就可以直接调用ClassLoader的loadClass方法获取到class对象
b.resolveClass
c.findClass
d.defineClass
posted on 2019-08-31 16:55 zhang11111wei 阅读(229) 评论(0) 编辑 收藏 举报