0

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

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

当然没有内存泄漏,因为我检查了它并且本机内存会不断增加。

android是否保留某种缓存?

此外,如果在应用程序中我使用库 ex 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)");
4

1 回答 1

0

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

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

于 2018-10-24T11:23:49.973 回答