声明和分配对象时发生内存泄漏

时间:2016-06-20 21:03:21

标签: java android memory memory-management memory-leaks

请注意:这是关于我的应用的具体问题,但可能对其他新手开发者有用

我无法找到“内存泄漏”的原因。

我注意到在调试此泄漏时,简单的方向更改使用0.01mb内存。

下面这段代码占用0.04mb内存

//global
WifiManager wifiManager;
List<WifiConfiguration> wifiConfigList;
WifiInfo wifiInfo;

private void refreshWifiInfo() {
    wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
    wifiConfigList = wifiManager.getConfiguredNetworks();
    wifiInfo = wifiManager.getConnectionInfo();
}

还有一些其他的方法,都在一个线程中运行。该线程休眠并执行1000ms,每个循环的该线程的总使用量为+/- 0.09mb-0.11mb。

  • This是应用执行时的截图
  • Here该应用空闲。
  • Starting the scan thread(通过按钮点击1:24),内存开始填满,在这里我们看到内存每分钟填充+/- 3Mb。
  • Here内存堆几乎已满了

注意: 所有这些“测试”都没有输入,没有额外的对话框,弹出窗口,监视器,只是线程扫描和显示结果。没有使用位图/图像/图形!

随着时间的推移,记忆力不断增加到OutOfMemory Exception

我试过转储内存堆并使用Eclipse Memory Analyzer进行分析,它怀疑内存泄漏是arrays of bytes containing periods

我跑的另一次扫描在短时间内显示massive memory usage(+/- 1m30s)

我的主题包含:

 t = new Thread(new Runnable() {
            public void run() {

                handler = new Handler(context.getMainLooper());
                while (!bStopThread) {
                    System.gc();
                    ThreadCounter++;

                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            if (bSafe) {
                                initWiFiArrays();
                                CreateSetAdapter();
                                threadRefresh.setText("# Refreshed Times : " + String.valueOf(ThreadCounter));
                                writeResultsToFile();
                            } else
                                stopScan();
                        }
                    });
                    try {
                        Thread.sleep(scanInterval);
                    } catch (Exception x) {
                        x.printStackTrace();
                    }
                }
            }
        });
        t.start();

查看帖子开头的代码,调用:

refreshWifiInfo();

单独使用0.04mb,这似乎不正常!

没有上下文被发送到其他类,没有声明静态/最终变量,尽管我确实有全局定义的TextViews,EditTexts,一个按钮,只有在必要的地方才能完成。

我怎么能检测到这些内存泄漏,因为我不知所措?

P.S。我整天都在这里,仍然没有找到任何东西

0 个答案:

没有答案