问题
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++.
回答1:
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
回答2:
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;
}
回答3:
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
来源:https://stackoverflow.com/questions/17109284/how-to-find-memory-usage-of-my-android-application-written-c-using-ndk