实时的工具有profilling/monitoring等,实时的方法固然好,但有网友称吞吐量过高的时候工具本身都很难运行,效果不好。
离线分析工具首选MAT,可以集成到eclipse做插件使用,也可以从官网下载独立程序。
finalize的用法,程序重写finalize函数后,当gc程序运行时就会调用finalize,我们可以在必要的情况下在finalize函数中写自己想要回收的对象,将他们从绑定中解除。因为有很多对象一直都在使用中,开发者自己不去解绑,gc永远都无法回收。
调用System.gc()会强制执行垃圾回收程序,当然,如果不去调用它,当程序内存使用过高时会自动执行。
防范不良代码:
1、查询数据库后cursor没有关闭
Cursor cursor = null;
try {
cursor = getContentResolver().query(uri...);
if (cursor != null && cursor.moveToNext()) {
....
}
} finally {
if (cursor != null) {
try {
cursor.close();
} catch (Exception e) {
}
}
}
2、缓存convertView
public View getView(int position, Viewconvert View, ViewGroup parent)
初始化时,ListView会根据当前屏幕布局从BaseAdapter中取一定数量的view对象,同时ListView会将这些对象缓存起来,当ListView向上滚动的时候,原先位于最上边的listitem的view对象会被回收,然后被用来构造最新出现的listitem。这个构造过程就是由getView完成的。getView的第二个形参View convertView就是被缓存起来的listitem对象。初始化时缓存中没有对象则convertView是null。
public View getView(int position,Viewconvert View,ViewGroup parent){
View view = null;
if(convertView != null){
view = convertView;
populate(view , getItem(position));
...
}else{
view = new Xxx(...);
...
}
return view;
}
3、Bitmap对象释放内存
有时我们会手工操作Bitmap对象,如果一个Bitmap对象比较占内存,当它不再被占用的时候,可以调用Bitmao.recycle() 方法回收此对象的像素所占用的内存,但这不是必须的。