如果totalMemory很小,但totalPss非常大,这意味着什么?

时间:2015-11-06 06:32:52

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

我们的应用有问题。随着时间的推移,我们注意到totalPss值变得非常大(取决于设备,它将是300-700Mb):

    int pid = android.os.Process.myPid();
    int pids[] = new int[1];
    pids[0] = pid;
    android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
    if (memoryInfoArray.length > 0)
    {
        android.os.Debug.MemoryInfo thisProcessMemoryInfo = memoryInfoArray[0];

        Log.d("totalPss", thisProcessMemoryInfo.getTotalPss()+"");
    }

以下是显示典型运行结果的图表:

processMemoryInfo

但是,与此同时,totalMemory值永远不会变得非常大(最大值为40-50Mb,但GC后降至10Mb)。

    Log.d("totalMem", Runtime.getRuntime().totalMemory()+"");

这是一个图表,显示从上面的相同运行(请忽略单位,实际上是以字节为单位):

enter image description here

此设备的

getMemoryClass表示我们已为应用提供192Mb:

    Log.d("getMemoryClass", activityManager.getMemoryClass()+"");

我们的内存使用模式是随着时间的推移进行大量经常发布的大型分配。经过很长一段时间后,大量分配将失败,这通常会导致应用程序失败。

好像我们可能有碎片,这看起来是否正确?我们可以使用largeHeap属性解决这个问题(我的直觉是它不会)?是否有任何工具可以帮助诊断这一点?

0 个答案:

没有答案