Java 在虚拟机(即Dalvik)中运行的垃圾收集语言中的内存泄漏类型

Java 在虚拟机(即Dalvik)中运行的垃圾收集语言中的内存泄漏类型,java,android,garbage-collection,dalvik,Java,Android,Garbage Collection,Dalvik,在处理垃圾收集语言时,不是有两种类型的内存泄漏:用户编码的和运行时环境吗?也就是说,糟糕的用户代码(比如说大量的全局静态引用)与运行时的bug,或者它们被认为是同一个问题?用于查找它们的工具通常是相同的吗?运行时内存泄漏错误很少,基本上是因为很少有集合是此类错误的主要来源 您可以使用内存配置文件来查找此类内存泄漏。您可以将VisualVM用于小堆转储,但对于更大的堆,我使用像YourKit这样的商业探查器。运行时几乎没有内存泄漏错误,基本上是因为很少有集合是此类错误的主要来源 您可以使用内存配置

在处理垃圾收集语言时,不是有两种类型的内存泄漏:用户编码的和运行时环境吗?也就是说,糟糕的用户代码(比如说大量的全局静态引用)与运行时的bug,或者它们被认为是同一个问题?用于查找它们的工具通常是相同的吗?

运行时内存泄漏错误很少,基本上是因为很少有集合是此类错误的主要来源


您可以使用内存配置文件来查找此类内存泄漏。您可以将VisualVM用于小堆转储,但对于更大的堆,我使用像YourKit这样的商业探查器。

运行时几乎没有内存泄漏错误,基本上是因为很少有集合是此类错误的主要来源


您可以使用内存配置文件来查找此类内存泄漏。您可以将VisualVM用于较小的堆转储,但对于较大的堆,我使用像YourKit这样的商业探查器。

如果您使用的是成熟的语言/虚拟机,那么由于“运行时中的错误”而导致的泄漏是极不可能的。花时间查找应用程序代码中引用的滥用情况

如果您使用的是成熟的语言/虚拟机,则由于“运行时中的错误”而导致的泄漏极不可能发生。花时间查找应用程序代码中引用的滥用情况

据我所知,糟糕的用户代码是导致内存泄漏的主要问题。在Dalvik中,java堆使用dlmalloc分配内存,这可能会导致更多内存碎片;即使调用GC,VM也可能不会修剪java堆,因为Linux中每页4K是基本单元。因此,android low ram page()建议我们同时分配/释放对象以获得更连续的内存,这看起来像是手动的分代内存管理()


用户代码内存泄漏可以通过MAT工具进行分析

据我所知,糟糕的用户代码是导致内存泄漏的主要问题。在Dalvik中,java堆使用dlmalloc分配内存,这可能会导致更多内存碎片;即使调用GC,VM也可能不会修剪java堆,因为Linux中每页4K是基本单元。因此,android low ram page()建议我们同时分配/释放对象以获得更连续的内存,这看起来像是手动的分代内存管理()


用户代码内存泄漏可以通过MAT工具进行分析

如果你想以不同的方式对待他们,那么他们是不同的。解码如何对内存泄漏进行分类是一个意见问题。(有些人可能会说糟糕的用户代码分为两类:无意引用和有意引用。)如果你想区别对待它们,那么它们是不同的。解码如何对内存泄漏进行分类是一个意见问题。(有些人可能会说糟糕的用户代码分为两类:无意引用和有意引用。)@fadden还有更多建议吗?@fadden有更多建议吗?