应用生存期的绝大多数时间都在用于处理内存中的数据
性能主要取决于以下三个因素:
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类就是这么做的。
虚引用最弱,几乎很少用到。