android - 大量 GC,Android 监视器锯齿波 = 内存泄漏?

标签 android memory-leaks garbage-collection

这是我的内存监视器: enter image description here

我怀疑我自己的项目存在内存问题。但我决定在 Android Studio 中测试一个新的空白项目并启动它,然后不要碰任何东西。这是同一个问题。

我的日志:

08-27 09:25:36.909    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 385K, 15% free 3118K/3664K, paused 1ms, total 1ms
08-27 09:25:37.773    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 407K, 16% free 3102K/3676K, paused 2ms, total 2ms
08-27 09:25:38.561    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 3ms, total 3ms
08-27 09:25:39.317    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 2ms, total 2ms
08-27 09:25:40.101    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 2ms, total 2ms
08-27 09:25:40.909    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 1ms, total 1ms
08-27 09:25:41.685    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 2ms, total 2ms
08-27 09:25:42.365    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 2ms, total 2ms
08-27 09:25:43.141    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 1ms, total 1ms
08-27 09:25:43.973    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 2ms, total 2ms
08-27 09:25:44.629    1276-1288/**** D/dalvikvm﹕ GC_FOR_ALLOC freed 4    08K, 16% free 3102K/3676K, paused 2ms, total 2ms

进入我的 Android 监视器,内存分析器: enter image description here

我在这个新项目中有 0 行自己的代码,它是 Android Studio 生成的全新项目。我正在运行一个虚拟设备 (Android Emulator) 4.0.3 x86。这与我的 Nexus 5 或 Genymotion 相同。

这正常吗?

编辑

感谢江永东和weston的回答,我更深入地调查了内存堆的问题:

enter image description here

因此所有分配主要来自 dumpGfxInfo()。 感谢这些信息,我能够在 StackOverFlow 上找到类似的帖子:Android: Constant memory consumption / dumpGfxInfo()这似乎是 Android Studio 的一个问题,在此处记录:https://code.google.com/p/android/issues/detail?id=182869

编辑2

现在已在 Android Studio 1.4 beta 中修复

最佳答案

首先,如果消耗的内存随时间增加,这只是内存泄漏。这些图表没有显示这一点。

其次,我认为内存锯齿纹一定是正常的。您的第一个图表具有较大的波峰和波谷,因此它指向您的项目在空项目上完成的额外分配,但它对于实际跟踪分配和垃圾收集问题并没有多大帮助。

更好的选择是在 android 设备监视器中,分配跟踪器:

Allocation Tracker

单击开始跟踪,然后获取分配。你会看到那个时期分配了什么。单击每个条目会提供分配的调用堆栈。

您可以使用它来查看空项目发生了什么,也可以查看您的项目发生了什么。

关于android - 大量 GC,Android 监视器锯齿波 = 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32243546/

相关文章:

android - ZXing生成的QR Code中的 'dot'形状是否可以更改?

android - 重复调用 LineBackgroundSpan drawBackground()

android - AudioRecord同时播放音频-访问输出播放数据

ios - UIImages 的内存泄漏

c++ - Valgrind 报告内存泄漏,但我不明白它发生在哪里

android - 应用程序 UI 因 GC 消息而卡住

Android BitmapFactory.decodeStream(...) 不在模拟器上加载 HTTPS URL

c - 为什么会泄漏内存?

java - 以 spring bean 作为属性的垃圾收集清理对象

c# - 在单声道 3.2.8 Ubuntu Server 14 上使用 HttpWebRequest