内存泄露解决
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结合代码确认
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】