5

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++.

chandra mohan
  • 257
  • 4
  • 16

3 Answers3

6

The two functions based on JonnyBoy's answer.

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;
}
Wiz
  • 2,029
  • 18
  • 15
  • 5
    Actually these java methods are native methods themselves. According to http://androidxref.com/source/xref/frameworks/base/core/jni/android_os_Debug.cpp (the cpp-source) you could use `mallinfo()` and then read the values for `uordblks` (`getNativeHeapAllocatedSize()`) and `usmblks` (`getNativeHeapSize()`) – super-qua Apr 08 '15 at 09:43
  • @super-qua, Tank You so much! – CAMOBAP May 19 '15 at 11:17
5

In Java, you can check the native memory allocated/used with:

Debug.getNativeHeapAllocatedSize()
Debug.getNativeHeapSize()

See:

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

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

JonnyBoy
  • 1,515
  • 13
  • 24
1

Debug.getNativeHeapAllocatedSize() andDebug.getNativeHeapSize() return information about memory allocations performed by malloc() and related functions only. You can easily parse /proc/self/statm from C++ and get the VmRSS metric.

See details here