Przesyłam grę napisaną w C++ na Androida przy użyciu NDK. Muszę wiedzieć, ile pamięci zużywa podczas pracy. Szukam programowo sposobu na wykorzystanie pamięci aplikacji systemu Android napisanej w C++.Jak znaleźć wykorzystanie pamięci mojej aplikacji napisanej w systemie Android C++ za pomocą NDK
Odpowiedz
W Javie można sprawdzić rodzimą pamięć przydzieloną/platformach
Debug.getNativeHeapAllocatedSize()
Debug.getNativeHeapSize()
Patrz:
http://developer.android.com/reference/android/os/Debug.html#getNativeHeapAllocatedSize%28%29
http://developer.android.com/reference/android/os/Debug.html#getNativeHeapSize%28%29
Dwie funkcje w oparciu o odpowiedzi JonnyBoy użytkownika.
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;
}
W rzeczywistości te metody java są metodami natywnymi. Według http://androidxref.com/source/xref/frameworks/base/core/jni/android_os_Debug.cpp (źródło cpp) można użyć 'mallinfo()', a następnie odczytać wartości dla 'uordblks' (' getNativeHeapAllocatedSize() ') i' usmblks' ('getNativeHeapSize()') –
@ super-qua, Tank You you much! – CAMOBAP
Debug.getNativeHeapAllocatedSize()
i Debug.getNativeHeapSize()
zwrot informacji o alokacji pamięci wykonywanych przez malloc()
i powiązanych funkcji tylko. Możesz łatwo przetworzyć /proc/self/statm
z C++ i uzyskać metrykę VmRSS.
jednym ze sposobów jest zastąpić 'new' i' operatora delete' i zrobić kilka księgowości. – user1095108