内存泄露解决

1.内存泄露介绍

  定义:内存中存在已经没有用的对象

  表现:内存抖动、可用内存逐渐变少 

  危害:内存不足、GC频繁、OOM

1.1 Memory Analyzer(mat工具)

  https://www.eclipse.org/mat/downloads.php

  转换:hprof-conv原文件路径--- 转换后文件路径

 

2.内存泄露解决实战

  public interface CallBack{

    void dpOperate();

  }

  public class CallbackManager{

    public static ArrayList<CallBack> sCallBacks = new ArrayList<>();

    public static void addCallBack(CallBack callBack){

      sCallBacks.add(callBack);

    }

    public static void removeCallBack(CallBack callBack){

      sCallBacks.remove(callBack);

    }

  }

 

  public class MemeryLeakActivity extends AppCompatActivity implements CallBack{

    @override

    protected void onCreate(@Nullable Bundle savedInstanceState){

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_memoryleak);

      ImageView imageView = findViewById(R.id.iv_memoryleak);

      Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawble.test);

      imagView.setImageBitmap(bitmap);

      CallBackManager.addCallBack(this);

    }

    

    @Override

    protected void onDestroy(){

      super.onDestroy();

      CallBackManager.removeCallBack(this);//通过调用这个方法来解决内存泄露问题

    }

    @Override

    public void dpOperate(){ 

    }

  }

 

  运行后,打开profiler,下载heap信息

  在终端输入命令:

 

 

 

3.总结

  使用Memory Profiler初步观察

  通过Memory Analyzer结合代码确认

 

posted @   白一粥  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示