5

我正在使用 NDK 将用 C++ 编写的游戏移植到 Android。我需要知道它在运行时消耗了多少内存。我正在寻找以编程方式查找用 C++ 编写的 Android 应用程序的内存使用情况。

4

3 回答 3

7

这两个函数基于 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;
}
于 2013-11-19T02:36:46.357 回答
5

在 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

于 2013-06-14T21:39:58.377 回答
1

Debug.getNativeHeapAllocatedSize()并返回有关由相关函数Debug.getNativeHeapSize()执行的内存分配的信息。您可以轻松地从 C++ 解析并获取VmRSS指标。malloc()/proc/self/statm

在此处查看详细信息

于 2017-08-14T03:08:04.097 回答