chandra mohan
chandra mohan

Reputation: 277

How to find memory usage of my android application written C++ using 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++.

Upvotes: 5

Views: 6087

Answers (3)

Dmitry Shesterkin
Dmitry Shesterkin

Reputation: 360

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

Upvotes: 1

Wiz
Wiz

Reputation: 2143

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;
}

Upvotes: 8

JonnyBoy
JonnyBoy

Reputation: 1567

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

Upvotes: 5

Related Questions