jvm内存模型
核心组成部分
1 类加载器
2 运行时数据区
3 执行引擎
4 本地方法接口
5 本地方法库
6 垃圾收集器
运行时数据区组成部分(重点)
线程共享 :
方法区 归类为堆(非堆) 运行时常量池
java堆 heap
线程私有:
虚拟机栈 栈
本地方法栈
程序计数器
java堆组成及对应的GC算法(重重点)
新生代 — 复制 算法
幸存0
幸存1
老年代 —标记-清除 或者 标记-整理
元空间(永久代)
GC算法
1 引用计数法(存在循环引用的问题,不被java采纳,c++,obj-c 使用)
2 根搜索算法 (可达性分析算法)
3 虚拟机中的垃圾搜集算法:
标记-清除
复制算法(新生代)
标记-压缩(老年代)
根搜索算法(内存泄漏分析之根本—重点)
1、可达性分析 引用链(MAT的意义)
2、根(GC Roots)
栈(栈帧中的本地变量表)中引用的对象。
方法区中的静态成员。
方法区中的常量引用的对象(全局变量)
本地方法栈中JNI(一般说的Native方法)引用的对象。
虚拟机
android 一个应用对应一个虚拟机(沙箱化原理)
JVM
jvm 为.class android 的jvm 为.dex
android 一开使用的是Dalvik,在2014年6月谷歌I/O大会即Android L(5.0) 后 改为 ART
Android中的JVM
Dalvik
Dalvik下应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码
ART
基于Dalvik,ART最主要的优化是在应用安装时就预编译字节码为机器码,ART占用空间比Dalvik大(字节码变为机器码之后,可能会增加10%-20%)。