【问题标题】:Native Memory Increase本机内存增加
【发布时间】:2019-03-28 17:46:40
【问题描述】:

我有一个问题,因为在 android 文档中找不到任何相关内容。

当我在 Android Studio 中运行一个简单的应用程序(来自 Android Studio 的通用项目或谷歌示例应用程序)时,我会检查初始本机内存。可以说它的 17 mb。如果我改变了几次方向,那么本机内存将达到 40mb,如果我强制 GC,内存将下降到 23-25。如果我这样做几次,在 GC 之后内存将保持在 23-25。那么这些额外的 MB 是从哪里来的呢?

当然没有内存泄漏,因为我检查过了,因为本机内存会不断上升。

android 是否保留某种缓存?

此外,如果在应用程序中我使用库 e.x retrofit2、glide 等,本机内存将增加,但在初始本机内存的限制内 +20mb。

日志堆:

 Log.d("tag", "debug. =================================");
                Log.d("tag", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free)");
                Log.d("tag", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory() / 1048576.0)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory() / 1048576.0)) + "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory() / 1048576.0)) + "MB free)");

【问题讨论】:

    标签: android heap-size


    【解决方案1】:

    免责声明:以下对于普通的 JVM 来说是正确的,我不确定 Android 的行为是否相同。

    类(字节码)按需加载,但从不卸载。因此,当您的应用程序启动时,您可能还没有加载所有类,只是启动所需的最低限度。应用使用得越多,加载的类就越多,直到你拥有它们为止。

    【讨论】:

    • 那么你使用的库越多,本机内存就会越多?这最终会引发 OOM 吗?
    • 不太可能,除非您使用过多的库。
    • 好的。但这并不能解释为什么仅在方向上,即使在 GC 之后,本机内存也会增加一些。在此更改期间是否加载了任何类?
    • 在改变方向时,可能会加载额外的资源(它们可能取决于方向)。
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2019-01-07
    相关资源
    最近更新 更多