是不是有两种类型的内存泄漏的一个垃圾回收的语言打交道时:用户编码和运行时的环境? 也就是说,糟糕的用户代码(说很多全局静态引用)VS错误在运行时,或者他们认为在同一个? 是否使用的工具通常会发现他们一样吗?
Answer 1:
据我所知,较差的用户代码是导致内存泄漏的主要问题。 和在的Dalvik中,Java堆使用dlmalloc为allocing存储器,这可能导致更多的内存碎片; 即使你叫GC,虚拟机可能无法修整,因为在Linux中存在的基本单元每页4K的Java的堆。 所以Android的低RAM页( http://developer.android.com/training/articles/memory.html )表明我们能在同一时间更多的连续内存分配/免费对象,这看起来像代内存管理由专人( http://developer.android.com/training/articles/memory.html#AllocatingRAM )。
用户代码内存泄漏可以是由MAT工具分析。 试图了解Dalvikvm和内存泄漏
Answer 2:
有一个在运行时非常少的内存泄露的缺陷,主要是因为很少有收藏这是这样的错误的主要来源。
你会使用内存配置文件来找到这样的内存泄漏。 您可以使用VisualVM的为小堆转储,但对于更大的堆我使用商业探查像YourKit。
Answer 3:
如果您使用的是广为人知的语言/虚拟机,然后泄漏是由于“在运行时错误”是极不可能的。 花时间寻找在应用程序代码中引用的滥用。
文章来源: Types of memory leaks in a garbage-collected language running in virtual machines (ie, Dalvik)