美文网首页
插件化,热修复基础之虚拟机

插件化,热修复基础之虚拟机

作者: Big_Sweet | 来源:发表于2020-03-09 14:36 被阅读0次

    java虚拟机 jvm

    jvm整体结构


    image.png

    jvm内存空间

    java 栈区 它存放的是java方法执行时的所有的数据
    栈帧 一个栈帧代表一个方法 每个方法的调用就是一个栈帧在虚拟机栈中入栈和出栈

    本地方法栈:专门为nativie方法服务,也是通过栈帧调用

    方法区,存储被虚拟机加载的类信息,常量,静态变量等数据。

    java堆:所有通过new创建的对象的内存都在堆中分配,是虚拟机中最大的一块内存,是gc要回收的部分

    image.png

    gc垃圾回收机制

    垃圾收集算法
    1,引用计数算法 对象被引用 计数器加1 (老算法,存在A-B相互引用,不会被回收)

    2,可达性算法:从gcroot节点。寻找引用节点。没有引用的节点标记为垃圾节点,

    4种引用类型

    分为4种,用来控制对象的生命周期
    强引用 不会被垃圾回收期回收,会抛出oom异常
    软引用 在内存足够的情况下 不会去回收 效果和强引用一样
    弱引用 生命周期比软引用少很多,在gc回收的时候,不管内存是否足够 都会回收他
    虚引用 就是没有引用,垃圾回收期任何时候都会回收他
    refercequene 一般和软引用,弱引用关联
    如果软应用被垃圾回收期回收了 就会把这个引用加入到这个队列当中

    垃圾回收算法
    1,标记清除算法: 从根节点遍历,将不可达的引用标记,在gc执行的时候回收掉标记后的引用,缺点是会造成内存碎片
    2,复制算法:从根节点遍历,复制所有可达的引用到一个新的内存,将原来的引用内存清空,不会产生碎片,但是效率比第一种差,(适合内存存活较少的时候)
    3,标记整理算法:从根节点遍历,将不可达的标记,清除后, 更新指针,将引用对象往空闲区移动,避免产生内存碎片

    jvm虚拟机触发垃圾回收的时机
    1,java虚拟机无法在为新的对象分配内存空间的时候
    2,手动调用system.gc
    3,低优先级的gc线程被启动

    java源代码编译过程 java-class的过程如下


    image.png image.png

    dalvik和jvm的不用

    1,加载文件的格式不同一个加载class,一个加载dex
    2,jvm只能存在一个,dvm可以存在多个
    3,dvm是基于寄存器的,jvm是基于栈的

    art
    dvm使用jit将字节码转换成机器码 效率低
    art采用aot预编译技术,执行数据更快

    相关文章

      网友评论

          本文标题:插件化,热修复基础之虚拟机

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