java内存分析

实时的工具有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() 方法回收此对象的像素所占用的内存,但这不是必须的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值