因为最近在全方位总结安卓知识,这篇文章目录和大纲有点乱,继续写下去篇幅会特别长。所以我重新列了一个大纲,大纲会逐渐丰富其内容,从虚拟机到类加载,从堆栈内存到数据结构,从ui到网络层,大纲里的每一个知识点我都会用一篇新文章详细概述,会附有超链接,大纲新地址是:https://blog.youkuaiyun.com/weixin_42802049/article/details/115542194。还请移步新大纲地址哦~~~
虚拟机
jvm
1. 加载过程:
1,A.java经过编译器编译,生成A.class字节码文件,多个class文件会被打包成jar文件
2,程序访问A这个类时,会通过ClassLoader类加载器将A.class加载到jvm的内存中
dalvik+JIT
1. 加载过程:
1,A.java经过编译器编译,生成A.class字节码文件
2,dx工具将class文件打包成dex文件
2. JIT(Just In Time Compiler):
即时编译策略,即动态编译
缺点:
1,每次启动应用都要重新编译(没有缓存)
2,所以运行时比较耗电
art+AOT
1. AOT(Ahead Of Time)
提前编译策略,即静态编译
缺点:
1,应用首次安装和系统升级之后(需要重新编译)比较耗时
2,编译后的文件占用更多的内存空间,缓存的结果
2. JIT和AOT的区别
无非就是空间换时间
内存
dalvik内存(即java内存)
heap(堆内存):线程共享区域
1. 存储数据类型
1,成员变量
基本数据类型:其变量名及其数据值存放在堆内存中
-
引用数据类型:对象存放在堆内存中,其变量名和地址值存放在栈中,该地址值指向所引用的对象
2,局部变量
引用数据类型:对象存放在堆内存中,其变量名和地址值存放在栈中,该地址值指向所引用的对象
2. 内存释放
GC
stack(栈内存):线程私有区域
1. 存储数据类型
1,局部变量
基本数据类型:其变量名及其数据值存放在栈内存中
疑问:局部变量中的基本数据类型都是存储在栈内存中吗?
不是。
int[] array=new int[]{1,2};
由于new了一个对象,所以new int[]{1,2}这个对象是存储