【发布时间】:2013-06-11 03:35:56
【问题描述】:
我正在使用 NDK 将用 C++ 编写的游戏移植到 Android。我需要知道它在运行时消耗了多少内存。我正在寻找以编程方式查找用 C++ 编写的 Android 应用程序的内存使用情况。
【问题讨论】:
-
一种方法是覆盖
new和delete运算符并做一些簿记。
标签: android c++ memory-management android-ndk porting
我正在使用 NDK 将用 C++ 编写的游戏移植到 Android。我需要知道它在运行时消耗了多少内存。我正在寻找以编程方式查找用 C++ 编写的 Android 应用程序的内存使用情况。
【问题讨论】:
new 和 delete 运算符并做一些簿记。
标签: android c++ memory-management android-ndk porting
这两个函数基于 JonnyBoy 的回答。
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;
}
【讨论】:
mallinfo(),然后读取uordblks(getNativeHeapAllocatedSize())和usmblks(getNativeHeapSize())的值
在 Java 中,您可以检查分配/使用的本机内存:
Debug.getNativeHeapAllocatedSize()
Debug.getNativeHeapSize()
见:
http://developer.android.com/reference/android/os/Debug.html#getNativeHeapAllocatedSize%28%29
http://developer.android.com/reference/android/os/Debug.html#getNativeHeapSize%28%29
【讨论】:
Debug.getNativeHeapAllocatedSize() 和Debug.getNativeHeapSize() 返回有关由malloc() 和相关函数执行的内存分配的信息仅。您可以轻松地从 C++ 解析 /proc/self/statm 并获取 VmRSS 指标。
【讨论】: