Chinaunix首页 | 论坛 | 博客
  • 博客访问: 218427
  • 博文数量: 67
  • 博客积分: 3156
  • 博客等级: 中校
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-18 17:41
个人简介

软件工程师!

文章分类

全部博文(67)

文章存档

2015年(1)

2014年(1)

2012年(6)

2011年(16)

2010年(31)

2009年(12)

分类: Java

2011-08-10 13:45:00

以下是我个人的一些经验和总结!
 
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) |
给主人留下些什么吧!~~