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

###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预编译技术,执行数据更快

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值