一.java内存管理机制
1.内存引用
从Java1.2版本开始引入了三种对象引用方式:SoftReference、WeakReference、PhantomReference三个引用类。如果不指定默认是强引用。
a.强引用
默认会采用强引用,GC绝对不回回收它,当内存空间不足时,JVM会抛出OOM错误
b.软引用(SoftReference)
软引用仅次与强引用,与强引用不同,软引用是可以被回收的,在GC时,内存充足它是不会被回收,当内存不足时,持有软引用的对象就会被回收。
c.弱引用(WeakReference)
弱引用是比软引用和强引用更弱的一种引用,在GC时,无论内存是否充足,发现某一对象引用只具有弱引用该对象就会被回收。
d.虚引用(PhantomReference)
不能保证其对象生命周期,其保存对象若只有虚引用,则其有效期完全随机于GC的回收,任何一个时间都可能被回收。
2.OOM产生的内存区域:重点堆内存
通常情况下我们可以把JVM的内存区域划分为程序计数器、Java虚拟机栈、堆、方法区、运行时常量池、本地方法栈6个区域
a.程序计数器
b.Java虚拟机栈
c.堆
d.方法区
e.运行时常量池
f.本地方法区
Native Heap物理内存不够
JVM GC原理
2.Android内存优化经验
Bitmap的使用优化(Glide避免内存泄露的分析,缓存策略)
多进程内存的开销
选择合适的数据结构
内存的复用
枚举内存的开销
内存检测工具:LeakCanary分析 原理分析
内存优化5R发则
如何避免OOM的产生?
网友评论