内存管理 Memory Management for Android Apps

原创 2012年03月28日 13:52:41

关键字:

memory leak 

heap is full

Garbage Collection

OutOfMemoryError


利用Eclipse Memory Analyzer 进行 Heap Dump文件分析

关键字:Eclipse插件 内存泄漏 分析报告


1. eclipse安装mat插件


2. 配置环境参数


3. 获得Heap Dump文件


VM 参数:-XX:+HeapDumpOnOutOfMemoryError     JVM 就会在发生内存泄露时抓拍下当时的内存状态

如果想手动在适当时候抓下Heap Dump文件,则在DDMS中使用“Dump HPROF file”按钮,选择保存位置保存。


4. 格式转换

The hprof file you get from Android has android specific format. You should converthprof file take from Android OS into standardhprof format. For this you can usehprof-convAndrodiSDK/tools/hprof-conv. tool that is located at

For example:

hprof-conv android.hprof mat.hpof
And then open mat.hprof in Memory Analyzer


5.打开Heap Dump文件并生成报告

window | open perspective | Memory Analysis


6.分析报告

Reports->Leak Suspects

引用:

首先我们简单回顾下 JAVA 的内存回收机制,内存空间中垃圾回收的工作由垃圾回收器 (Garbage Collector,GC) 完成的,它的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。

在垃圾回收机制中有一组元素被称为根元素集合,它们是一组被虚拟机直接引用的对象,比如,正在运行的线程对象,系统调用栈里面的对象以及被 system class loader 所加载的那些对象。堆空间中的每个对象都是由一个根元素为起点被层层调用的。因此,一个对象还被某一个存活的根元素所引用,就会被认为是存活对象,不能被回收,进行内存释放。因此,我们可以通过分析一个对象到根元素的引用路径来分析为什么该对象不能被顺利回收。如果说一个对象已经不被任何程序逻辑所需要但是还存在被根元素引用的情况,我们可以说这里存在内存泄露。

现在,让我们开始真正的寻找内存泄露之旅,点击“Details ”链接,可以看到如图 8 所示对可疑对象 1 的详细分析报告。


参考

http://www.vogella.de/articles/EclipseMemoryAnalyser/article.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html


Memory Management for Android Apps

http://my.eoe.cn/futurexiong/archive/1299.html
  • yunnywu
  • yunnywu
  • 2013年12月24日 18:33
  • 664

[iOS]Advanced Memory Management Programming Guide 高级内存管理编程指南(官方文档翻译)

应用程序的内存管理是程序运行时内存分配的过程,使用它,并当你用完它的时候释放它。写得好的程序应该尽可能少的使用内存。在Objective-C,它也可以被看作是分布 数据和代码的许多块当中的有限的内存资...
  • zyq522376829
  • zyq522376829
  • 2016年08月12日 14:42
  • 1588

Android Memory Management(内存管理)

从早期G1的192MB RAM开始,到现在动辄1G -2G RAM的设备,为单个App分配的内存从16MB到48MB甚至更多,但OOM从不曾离我们远去。这是因为大部分App中图片内容占据了50%甚至7...
  • MYBOYER
  • MYBOYER
  • 2013年03月14日 18:10
  • 505

给Unity开发者的C#内存管理(第一部分) C# Memory Management for Unity Developers (part 1 of 3)

【这篇文章要求‘中级’C#及Unity知识】在游戏开发中,我学到了一个惨痛教训:你不能完全依赖你的自动内存管理。如果你的游戏或是中间件足够的复杂并且需求较多的资源,在Unity中使用C#还不如C++。...
  • IceCracker
  • IceCracker
  • 2016年09月20日 15:51
  • 502

##Memory Management (内存管理)

Memory Management (内存管理)首先要知道为什么要进行内存管理? 资源最大化利用,众所周知,不管是计算机还是移动设备单片机等的内存都是有限的,如何在有限的内存空间运行更多更大的程序就是...
  • qq_22117913
  • qq_22117913
  • 2016年12月21日 11:33
  • 140

Memory management(内存管理)

Memory management: Overview(概述) 注意:Linux 使用glibc 函数,比如malloc,进行内存管理。要了解更多信息,请参考Linux 系统 关于malloc 的...
  • lclbc
  • lclbc
  • 2014年01月15日 16:42
  • 587

Android内存管理、监测剖析

Android内存管理机制: Android内存管理主要有:LowMemory Killer机制,Ashmem,PMEM/ION及Native内存和Dalvik内存管理管理和JVM垃圾回收机制。 ...
  • Anlegor
  • Anlegor
  • 2014年04月11日 00:35
  • 7224

Spark 1.6 内存管理模型( Unified Memory Management)分析

2016年1月4号 Spark 1.6 发布。提出了一个新的内存管理模型: Unified Memory Management。这篇文章会详细分析新的内存管理模型,方便大家做调优。 前言新的内存模型是...
  • allwefantasy
  • allwefantasy
  • 2016年01月09日 20:09
  • 2700

Oracle 11g Automatic Memory Management

In 11g, Oracle database manages the PGA and SGA by default. memory_target decides the overall memory...
  • chncaesar
  • chncaesar
  • 2013年12月15日 00:10
  • 1439

spark 内存管理

从Spark 1.6版本开始,Spark采用Unified Memory Management这样一种新的内存管理模型。 Spark中的内存使用分为两部分:执行(execution)与存储(stor...
  • wisgood
  • wisgood
  • 2016年05月17日 15:16
  • 4593
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内存管理 Memory Management for Android Apps
举报原因:
原因补充:

(最多只允许输入30个字)