【发布时间】:2016-12-04 09:46:15
【问题描述】:
如果这可能是重复的,我很抱歉,但我找不到任何适合我的问题的答案。因此,如果您可以参考一个好的来源,我将非常乐意查看。
这就是问题所在,我在运行我的应用程序时一直在观察细微的内存泄漏。所以运行 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 小时后。这对我来说没有任何意义,因为引用是递归的,来回跳转并且不会导致任何具体对象。
我应该如何调试这个问题?
感谢任何帮助。
【问题讨论】:
标签: java android multithreading memory-leaks