Debug.getNativeHeapFreeSize的真正含义是什么

gos*_*vka 7 android android-memory

我使用以下代码在我的应用程序中转储内存使用情况:

public static void dumpMemoryUsage(Context ctx) {
    try {
        MemoryInfo mi = new MemoryInfo();
        double allocated = new Double(Debug.getNativeHeapAllocatedSize());
        double available = new Double(Debug.getNativeHeapSize());
        double free = new Double(Debug.getNativeHeapFreeSize());
        ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        activityManager.getMemoryInfo(mi);
        long availableMegs = mi.availMem / 1048576L; //1MB
        long threshold = mi.threshold / 1048576L; //1MB
        String descr = String
                .format(Locale.US,
                        "+++System available MB:%d\nIs low:%b\nThreshold:%d\nMem class:%d\nallocated:%f\nfree:%f\navailable:%f\n",
                        availableMegs, mi.lowMemory, threshold,
                        activityManager.getMemoryClass(), allocated, free, available);
        L.l(descr);
    } catch (Exception e) {
        L.l(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在两个不同的设备Nexus(2011型号)和Galaxy Note 1上运行它.Galaxy Note有内存问题,并且只要添加1-2位图就会经常出现内存问题.

这是转储:
Nexus:

+++System available MB:154
Is low:false
Threshold:94
Mem class:96
allocated:5663544.000000
free:1377480.000000
available:7081984.000000
Run Code Online (Sandbox Code Playgroud)

Galaxy Note:

+++System available MB:316
Is low:false
Threshold:64
Mem class:64
allocated:5361664.000000
free:155648.000000
available:5832704.000000
Run Code Online (Sandbox Code Playgroud)

请注意,Debug.getNativeHeapFreeSize()调用在nexus上返回1377480.000000,在galaxy上返回155648.000000.怎么可能.这个电话真正意味着什么?我在一个新的应用程序安装上做了两个测试,没有应用程序完成的工作 - 只显示第一个屏幕,几乎没有几个TextViews和按钮.Galaxy Note 1的内存级别为64MB,所以我认为我没有达到这个限制.我在Nexus上没有内存问题,即使我在屏幕上添加了很多位图,所以我认为我没有使用太多的内存.