Android虚拟机

JVM结构解析

在这里插入图片描述

编译流程

在这里插入图片描述

类加载器

在这里插入图片描述

加载流程

在这里插入图片描述
Loading:类的信息从文件中获取并且载入到JVM的内存里
Verifying:检查读入的结构是否符合jvm规范的描述
Preparing:分配一个结构用来存储类信息
Resolving:把这个类的常量池中的所有的符号引用改变成直接引用
Initializing:执行静态初始化程序,把静态变量初始化成指定的值

JVM内存管理

Java栈区

作用:它存放的是java方法执行时的所有的数据
组成:由栈帧组成,一个栈帧代表一个方法的执行

作用:
每个方法从调用到执行完成就对应一个栈帧在虚拟机栈中入栈到出栈。

局部变量表、栈操作数、动态链接、方法出口。

本地方法栈

作用:本地方法栈是专门为native方法服务。

方法区

存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后等数据。

堆区

作用:所有通过new创建的对象的内存都在堆中分配。

特点:是虚拟机中最大的一块内存,是GC要回收的部分。

堆区内存:
在这里插入图片描述

垃圾收集算法

引用记数算法
在这里插入图片描述

可达性算法
在这里插入图片描述

引用的类型

强引用、软引用、弱引用、虚引用
常用:强引用、弱引用

Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
obj = null;
wf.get();

垃圾回收算法

标记-清除算法
在这里插入图片描述
复制算法
在这里插入图片描述
标记-整理算法

在这里插入图片描述
jvm中三种算法结合使用。

触发回收

jvm无法再为新的对象分配内存空间了
手动调用System.gc()方法(强烈不推荐)
低优先级的GC线程,被运行时就会执行GC

Dalvik与JVM的不同

Dalvik VM:
执行的文件不同:一个是class,一个dex
类加载的系统和jvm区别较大
可以同时存在多个DVM
Dalvik是基于寄存器的(寄存器比内存更快的一个存储介质),jvm是基于栈的

ART比Dalvik的优势

DVM使用JIT来将字节码转换成机器码,效率低
ART采用了AOT预编译技术,执行速度更快
ART会占用更多的应用安装时间和存储空间

总结

对jvm整体结构有一个深入了解
对jvm的内存管理有个深入了解
对jvm的垃圾回收有个一个较深入的了解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值