Reputation: 277
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
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.
Upvotes: 1
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
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