以下是我个人的一些经验和总结!
1.减少内存分配,减少临时(非引用对象的生成)
阅读android,java的源码,如String,Charactor,Integer等这些小对象在每次操作时(toString,valueOf......)都是生成新的对象,在局部函数使用的过程中,基本小对象都尽量使用byte,int,char[] 等这些类型,不会造成堆回收。
尽量使用StringBuffer 代码 String 的操作(参考java performence tunning 第5章)
使用弱引用代替强引用!
使用非对象的容器库!
(最简单的例子,JDK的iteroator在查询时都会生成一个24byte的iterator对象,在利用容器计算过程中,频繁的查询和计算都会生成大量的临时对象)
不需要的对象,要确定会进入非引用状态!
2.尽量减少垃圾回收发生
Java 生成对象的速度是跟C++一样的,但是回收却是不可见的,所以分配对象时一定要深思熟虑!如使用vector时确定使用的大小范围,vector,stringbuffer等一开始是16对象容纳区间,以后是以*2的区间增长的,当这些区间移动时,会分配新的空间并重引用。
原堆对象则等待回收!
尽量重用对象!对一些使用的对象,如果是频繁使用的,可转变为成员或静态!
3.减少不必要的计算
在绘图过程或调度过程中,引入一些状态量,对一些频繁计算不变的结果进行存储!
4.优先使用android的native API!
这个可以看源码,如Paint.getFontMetrice()和 Paint.getFontMetrice( Metric metric )
Canvas.getClipBounds() 和 Canvas.getClipBound( Rect rect ) 的差别一目了然!
阅读(748) | 评论(0) | 转发(0) |