如何使用NDK查找我的Android应用程序编写C ++的内存使用情况

时间:2013-06-14 13:10:14

标签: android c++ memory-management android-ndk porting

我正在使用NDK将用C ++编写的游戏移植到Android。我需要知道它在运行时消耗了多少内存。我正在寻找以编程方式查找用C ++编写的Android应用程序的内存使用情况。

3 个答案:

答案 0 :(得分:6)

这两个功能基于JonnyBoy的回答。

static long getNativeHeapAllocatedSize(JNIEnv *env)
{
    jclass clazz = (*env)->FindClass(env, "android/os/Debug");
    if (clazz)
    {
        jmethodID mid = (*env)->GetStaticMethodID(env, clazz, "getNativeHeapAllocatedSize", "()J");
        if (mid)
        {
            return (*env)->CallStaticLongMethod(env, clazz, mid);
        }
    }
    return -1L;
}

static long getNativeHeapSize(JNIEnv *env)
{
    jclass clazz = (*env)->FindClass(env, "android/os/Debug");
    if (clazz)
    {
        jmethodID mid = (*env)->GetStaticMethodID(env, clazz, "getNativeHeapSize", "()J");
        if (mid)
        {
            return (*env)->CallStaticLongMethod(env, clazz, mid);
        }
    }
    return -1L;
}

答案 1 :(得分:5)

在Java中,您可以检查分配/使用的本机内存:

Debug.getNativeHeapAllocatedSize()
Debug.getNativeHeapSize()

请参阅:

http://developer.android.com/reference/android/os/Debug.html#getNativeHeapAllocatedSize%28%29

http://developer.android.com/reference/android/os/Debug.html#getNativeHeapSize%28%29

答案 2 :(得分:0)

Debug.getNativeHeapAllocatedSize()Debug.getNativeHeapSize()会返回有关由malloc()执行的内存分配以及相关功能的信息。您可以轻松地从C ++解析/proc/self/statm并获取 VmRSS 指标。

See details here