2013-06-14 23 views

Odpowiedz

6

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

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()') –

+0

@ super-qua, Tank You you much! – CAMOBAP

0

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.

See details here