Open a284628487 opened 6 years ago
Android内存回收原则: 当它确定您的应用不再使用某些对象时,垃圾回收器会将未使用的内存释放回堆中。Android系统在进行垃圾回收时,都必须在某个时间点短暂地暂停您的代码。大多数情况下,这些暂停难以察觉。 不过,如果应用分配内存的速度比系统回收内存的速度快,则当收集器释放足够的内存以满足应用的内存分配需要时,应用可能会延迟。此延迟可能会导致应用跳帧,并使系统明显变慢。
如果存在内存泄漏,则即使应用在后台运行也会保留该内存。此行为会强制执行不必要的垃圾回收Event,因而拖慢系统的内存性能。 最后,系统被迫终止您的应用进程以回收内存。然后当用户返回您的应用时,它必须完全重启。
选中Memory区域点击并拖动一个区域,则该时间线内的内存使用情况,将自动分类显示出来。
按以下步骤操作检查分配记录:
堆转储显示在您捕获堆转储时您的应用中哪些对象正在使用内存。特别是在长时间的用户会话后,堆转储会显示您认为不应再位于内存中却仍在内存中的对象,从而帮助识别内存泄漏。 在捕获堆转储后,您可以查看以下信息:
在捕获堆转储后,仅当分析器运行时才能在 Memory Profiler 中查看数据。如果需要保存堆转储以供日后查看,可通过点击时间线下方工具栏中的 Export heap dump as HPROF file,将堆转储导出到一个 HPROF 文件中。然后,通过将此文件拖到一个空的编辑器窗口(或将其拖到文件标签栏中),可以在 Android Studio 中重新打开该文件。
要使用其他 HPROF 分析器(如 jhat),您需要将 HPROF 文件从 Android 格式转换为 Java SE HPROF 格式。 您可以使用 android_sdk/platform-tools/ 目录中提供的 hprof-conv 工具执行此操作。 运行包括以下两个参数的 hprof-conv 命令:原始 HPROF 文件和转换后 HPROF 文件的写入位置。 例如: hprof-conv heap-original.hprof heap-converted.hprof
使用 Memory Profiler 时,应对应用代码施加压力并尝试强制内存泄漏。在应用中引发内存泄漏的一种方式是,先让其运行一段时间,然后再检查堆。 泄漏在堆中可能逐渐汇聚到分配顶部。 不过,泄漏越小,越需要运行更长时间的应用才能看到泄漏。
还可以通过以下方式之一触发内存泄漏:
Android-Profiler: https://developer.android.com/studio/profile/android-profiler