How to find memory usage of my android application written C++ using NDK

cha*_*han 6 c++ android porting memory-management android-ndk

I am porting a game written in C++ to Android using NDK. I need to know how much memory it consumes while running. I am looking for programmatically way to find the memory usage of Android application written in C++.

Wiz*_*Wiz 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上这些java方法本身就是本机方法.根据http://androidxref.com/source/xref/frameworks/base/core/jni/android_os_Debug.cpp(cpp-source),您可以使用`mallinfo()`然后读取`uordblks`的值(` getNativeHeapAllocatedSize()`)和`usmblks`(`getNativeHeapSize()`) (4认同)