Java 基于MAT的Android内存泄漏分析
我很抱歉,如果这可能是一个潜在的重复,但我无法找到任何适当的答案为我的问题。因此,如果你能参考一个好的来源,我将非常乐意看 问题是,我一直在观察运行我的应用程序时出现的细微内存泄漏。因此,在运行16小时后,堆转储将通过Eclipse内存分析器运行,这表明内存泄漏嫌疑是大量未被垃圾收集的线程。在运行大约16小时后,堆增加了3MB 下面是我用来运行后台任务的代码:Java 基于MAT的Android内存泄漏分析,java,android,multithreading,memory-leaks,Java,Android,Multithreading,Memory Leaks,我很抱歉,如果这可能是一个潜在的重复,但我无法找到任何适当的答案为我的问题。因此,如果你能参考一个好的来源,我将非常乐意看 问题是,我一直在观察运行我的应用程序时出现的细微内存泄漏。因此,在运行16小时后,堆转储将通过Eclipse内存分析器运行,这表明内存泄漏嫌疑是大量未被垃圾收集的线程。在运行大约16小时后,堆增加了3MB 下面是我用来运行后台任务的代码: private WorkerThread mWorkerThread; private static Runnable mUpload
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中显示泄漏跟踪,并将附加活动附加到应用程序,该应用程序保存最近泄漏的历史记录。它应该有助于在代码中找到内存泄漏的可能位置,而无需挖掘转储堆