Androidi性能优化之高效使用内存

应用生存期的绝大多数时间都在用于处理内存中的数据

性能主要取决于以下三个因素:

  a:CPU如何操作特定的数据类型

  b: 数据和指令需要占用多少存储空间

  c: 数据在内存中的布局

访问内存:

  因为访问内存会产生一些开销,CPU会把最近访问的内存内容缓存起来,无论是内存读还是内存写,事实上,CPU通常使用两级缓存:

  a:一级缓存(L1)

  b:二级缓存(L2)

  有些处理器可能还有3级缓存

垃圾回收:

  Java的一个非常重要的优点是垃圾收集,有两件非常重要的事情值得注意:

  a:还是有可能存在内存泄露

  b:垃圾回收器会帮你管理内存,它做的不仅仅是释放不用的内存。

内存泄露分析工具:

  a:DDMS视图:Heap以及Allocation Tracker 跟踪内存使用和分配情况

  b:Eclipse内存分析器:MAT ,地址www.eclipse.org/mat

  c:Android 2.3定义的StrictMode类,对检测潜在的内存泄露有很大帮助。

引用:

  Java定义了4中类型的引用:

  a:强(Strong)

  b:软(Soft)

  c:弱(Weak)

  d:虚(Phantom)

  软引用和弱引用在本质上是相似的,它们没有强到足以保持对象不被删除(或回收)的引用。不同之处在于回收时,垃圾回收器处理它们的引用的对象的积极程度不同。

  对象是软可及的,即存在一个软引用,但没有强引用,当有足够的内存保留对象时,垃圾回收器不会回收它。不过如果垃圾会收器决定需要回收更多的内存,那么它可任意回收软可及对象的内存,这种引用类型适用于缓存,它可以自动删除缓存中的条目。

提示:当使用缓存时,确保你了解它使用的是什么类型的引用,例如Android的LruCache使用强引用。

  若可及对象,也就是说,存在一个弱引用,但没有强或软引用,下次垃圾回收时基本会被收走,换而言之,垃圾回收器更加积极地回收弱可及对象的内存。这种类型的引用适用于映射,这种映射可以自动删除不再被引用的键,WeakHashMap类就是这么做的。

  虚引用最弱,几乎很少用到。

原文地址:https://www.cnblogs.com/0616--ataozhijia/p/3649427.html