Android优化———内存优化 安卓怎么清理内存

如何清理安卓的内存(安卓优化-内存优化)
java虚拟机Java内存模型
虚拟机栈(线程私有):局部变量表、操作数栈、动态链接、方法出口等信息 。
堆(线程共享):实例对象
方法(线程共享):类信息 , 常量 , 由即时编译器编译的代码 。
程序计数器(线程私有):字节码行号指示器 , 记录当前线程已经执行了多少行 。
本地方法栈(thread private):类似于虚拟机栈 , 两者的区别在于虚拟机栈为虚拟机执行java方法服务 , 本地方法栈为虚拟机执行native方法服务 。
程序计数器如果java方法正在线程中执行 , 计数器记录当前指令的地址 , 
如果是本机方法 , 计数器记录为空
大量堆内存=新一代(1)+老一代(2)
新一代:复制算法
年龄:标记排序算法
方法区域也叫“永久生成” , 1.8以后 , 方法区被移除 , 移到直接内存 。
内存回收主要考虑堆区和方法区的回收 , 其他部分会以线程的生成和死亡为基础 。
版本差异


1.6:运行常量池在方法区 。
1.7:在堆中运行常量池
1.8:删除方法区 , 引入直接内存的概念 , meta 空 。方法区的静态变量被转移到堆中 , 只有类元数据在meta 空中 。
堆中的老龄和方法区(永久代)是绑定的 , 不管哪边满了 , 都会触发两边的GC回收 。
问题:栈和栈的区别:栈:基本数据类型变量(int、short、long、byte、float、double、boolean、char)和对象引用变量 。堆栈:java对象堆中的对象对所有线程都是可见的 , 堆栈内存只属于一个线程堆 。内存空比栈大很多 。
为什么删除方法区域?启动大小固定 , 很难调优 , 很容易在本地内存中分配OOM元空 。如果本地内存足够 , 就不会溢出 。
垃圾收集确定对象是否是活的 。计数算法(缺点:循环引用 , 技能数从不为0)
可达性算法(在二叉树中向下搜索 , 如果没有引用链 , 对象将不可用)
恢复算法标记算法:标记后回收对象 。旧时代使用的缺点:效率低 , 标记和清除效率低 , 产生大量碎片空 , 造成空的浪费 。
复制算法:将可用对象复制到新的连续空房间 , 删除之前的空房间 。缺点:浪费了50%的内存 , 复制长寿命对象的效率较低 , 所以新一代使用这种算法 。
标签排序算法:前期使用标签清除算法 , 后期使用排序算法 , 使对象按空关系排列 , 老年使用 。
代收集算法:数据分为代 , 每代执行不同的恢复算法 。
年轻一代分伊甸、s0、s1 , 分别是8: 1: 1 , 年轻一代和老一代是1: 2 。
meta 空中的Gc:如果meta 空中的类加载器存活 , 那么meta 空中的元数据也存活 。
小GC:清理年轻一代大GC:清理老一代全GC:清理整个堆空 , 包括年轻一代和永久一代 。
四大引言简介简历强引用:常用的对象方法Strong Reference不会被gc回收 。
SoftReference: softreference , 内存不足时会回收 。
WeakReference:弱引用 , 将在下一次gc中回收 。
虚拟参考:PhantomReference , 可以随时回收
在处理内存泄漏问题时 , 弱引用是应用最广泛的 , 许多源代码和框架都使用它 。
例如:
ThreadLocalMap将ThreadLocal的弱引用存储为key , 具体内容为value 。
Glide中的缓存使用activeResource , 存储图片的弱引用 。
使用弱引用解决处理程序的内存泄漏 。
理解引用【Android优化———内存优化 安卓怎么清理内存】的所有引用都继承自Reference 。以下是WeakReference的一个例子:
publicclassWeakReferenceextendsReference{/***Createsanewweakreferencethatreferstothegivenobject.Thenew*referenceisnotregisteredwithanyqueue.**@paramreferentobjectthenewweakreferencewillreferto*/publicWeakReference(Treferent){super(referent);}/***Createsanewweakreferencethatreferstothegivenobjectandis*registeredwiththegivenqueue.**@paramreferentobjectthenewweakreferencewillreferto*@paramqthequeuewithwhichthereferenceistoberegistered,*ornullifregistrationisnotrequired*/publicWeakReference(Treferent,ReferenceQueue

    推荐阅读