【问题标题】:How to find memory usage of my android application written C++ using NDK如何查找我使用 NDK 编写的 C++ android 应用程序的内存使用情况
【发布时间】:2013-06-11 03:35:56
【问题描述】:

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

【问题讨论】:

  • 一种方法是覆盖 newdelete 运算符并做一些簿记。

标签: android c++ memory-management android-ndk porting


【解决方案1】:

这两个函数基于 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;
}

【讨论】:

  • 其实这些java方法本身就是native方法。根据androidxref.com/source/xref/frameworks/base/core/jni/…(cpp-source),您可以使用mallinfo(),然后读取uordblksgetNativeHeapAllocatedSize())和usmblksgetNativeHeapSize())的值
  • @super-qua,你太棒了!
【解决方案2】:

在 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

【讨论】:

    【解决方案3】:

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

    See details here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2021-08-26
      • 2014-11-08
      • 2011-01-18
      相关资源
      最近更新 更多