Java 基于MAT的Android内存泄漏分析

Java 基于MAT的Android内存泄漏分析,java,android,multithreading,memory-leaks,Java,Android,Multithreading,Memory Leaks,我很抱歉,如果这可能是一个潜在的重复,但我无法找到任何适当的答案为我的问题。因此,如果你能参考一个好的来源,我将非常乐意看 问题是,我一直在观察运行我的应用程序时出现的细微内存泄漏。因此,在运行16小时后,堆转储将通过Eclipse内存分析器运行,这表明内存泄漏嫌疑是大量未被垃圾收集的线程。在运行大约16小时后,堆增加了3MB 下面是我用来运行后台任务的代码: private WorkerThread mWorkerThread; private static Runnable mUpload

我很抱歉,如果这可能是一个潜在的重复,但我无法找到任何适当的答案为我的问题。因此,如果你能参考一个好的来源,我将非常乐意看

问题是,我一直在观察运行我的应用程序时出现的细微内存泄漏。因此,在运行16小时后,堆转储将通过Eclipse内存分析器运行,这表明内存泄漏嫌疑是大量未被垃圾收集的线程。在运行大约16小时后,堆增加了3MB

下面是我用来运行后台任务的代码:

private WorkerThread mWorkerThread;

private static Runnable mUploadTask = new Runnable() {
        @Override
        public void run() {
            Object[] data = dataQueue.poll();
            if( data != null ) {
                    uploadPacketviaAMQP((String)data[0], (String)data[1]);
        }
    };

    private static class WorkerThread extends HandlerThread{

    private Handler mWorkerHandler;

    public WorkerThread(String name) {
        super(name);
    }

    public void postTask(Runnable task){
        mWorkerHandler.post(task);
    }

    public void prepareHandler(){
        mWorkerHandler = new Handler(getLooper());
    }
}
下面是MAT屏幕抓图-左面板是在应用程序运行5分钟后,右面板是在16小时后。这对我来说没有任何意义,因为引用是递归的,来回跳转,没有指向任何具体对象

我应该如何调试这个问题

感谢您的帮助。

您可以尝试使用。它对于检测内存泄漏非常准确。它在Logcat中显示泄漏跟踪,并将附加活动附加到应用程序,该应用程序保存最近泄漏的历史记录。它应该有助于在代码中找到内存泄漏的可能位置,而无需挖掘转储堆