zoukankan      html  css  js  c++  java
  • 插件化和热修复学习之路

    一、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

      

  • 相关阅读:
    【leetcode】19. Remove Nth Node From End of List
    【leetcode】18. 4Sum
    【leetcode】371. Sum of Two Integers
    【leetcode】17. Letter Combinations of a Phone Number
    【leetcode】16. 3Sum Closest
    【leetcode】13. Roman to Integer
    【leetcode】15. 3Sum
    【leetcode】14. Longest Common Prefix
    【leetcode】368. Largest Divisible Subset
    Linux学习总结(十四) 文件的打包和压缩
  • 原文地址:https://www.cnblogs.com/liunx1109/p/11439631.html
Copyright © 2011-2022 走看看