插件化和热修复学习之路

一、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编辑  收藏  举报

导航