Android性能优化 -- Memory Monitor工具检测内存泄露

本文通过实例介绍了如何使用Android Studio的Memory Monitor工具检测内存泄露,详细讲解了Memory Monitor的使用方法、HPROF Viewer的分析过程,并提到了Allocation Tracker在追踪内存分配上的作用,帮助开发者定位和解决内存问题。
摘要由CSDN通过智能技术生成

    这里我们通过一个例子来学习Memory Monitor工具的使用。

示例

package com.android.test;

import android.content.Context;

public class UserManger {

    public static UserManger instance;

    private Context mContext;

    private UserManger(Context context) {
        mContext = context;

    }

    public static UserManger getInstance(Context context) {
        if (instance == null) {
            instance = new UserManger(context);
        }

        return instance;
    }
}
package com.android.test;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    UserManger mUserManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mUserManager = UserManger.getInstance(this);
    }
}
    我们在之前的学习中有说过, 内存泄漏产生的原因:当一个对象已经不需要再使用了,本该被回收时,但是因为有另外一个对象持有它的引用,从而导致对象不能被回收,这种导致本该被回收的对象不能被回收而停留在堆内存中,就会产生内存泄漏。

    上面的代码就是一个单例模式内存泄漏的场景,那么这篇博客的目的就是如何把代码中的内存泄漏找出来。

    分析上面的代码,我们知道发生泄漏的不是UserManager,而是MainActivity,知道为什么吗?因为UserManager中有一个静态成员instance,其生命周期和应用程序的生命周期是一致的,当退出应用时,才会被销毁;当MainActivity退出时,有可能发生GC,GC时就会回收MainActivity,因为MainActivity的对象(this)被UserManager对象所引用,UserManager本身是不能被干掉的,所有就会发生内存泄漏。

Memory Monitor

    Android Studio自导的Memory Monitor可以方便的观察堆内存的分配情况,并且可以粗略的观察有没有发生Memory Leak。

Mem

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值