android.media.SoundPool是否会导致内存泄漏?
我发现这些代码可能会导致android 2.1的内存泄漏android.media.SoundPool是否会导致内存泄漏?,android,memory-leaks,soundpool,Android,Memory Leaks,Soundpool,我发现这些代码可能会导致android 2.1的内存泄漏 SoundPool soundPool = new SoundPool(10, 7, 0); ... ... soundPool = null; 每次执行之后,MAT插件都会告诉我们,进程堆中添加了两个字符串对象“android:unnamed_thread”。这是一个问题吗?我认为有两种可能性(很可能还有更多) 第一个(很可能)适用于所有Java对象:仅仅因为您将引用设置为null,并不意味着它后面的
SoundPool soundPool = new SoundPool(10, 7, 0);
...
...
soundPool = null;
每次执行之后,MAT插件都会告诉我们,进程堆中添加了两个字符串对象“android:unnamed_thread”。这是一个问题吗?我认为有两种可能性(很可能还有更多)
第一个(很可能)适用于所有Java对象:仅仅因为您将引用设置为null
,并不意味着它后面的对象将被垃圾收集
如果SoundPool
对象本身包含对两个线程对象的引用,则在需要空间之前,这三个对象都不需要GC'ed(当然,这取决于收集器的攻击性)
第二个(可能性较小)是Android可能足够聪明,可以缓存线程(甚至SoundPool
)对象,以防它们需要再次使用。如果对象创建比对象重新循环更昂贵,他们可能会将此作为性能优化
在这种情况下,它们仍然会在缓存中的某个位置引用对象,并且不会被视为符合垃圾收集的条件。您是否尝试运行soundPool.release()而不是soundPool=null?非常感谢。我在代码中调用了System.gc(),但这无助于清理这些对象。这是否意味着第一个可能性是不可能的?我非常确定
System.gc()
是一个垃圾收集的建议:“调用此方法意味着Java虚拟机将花费精力回收未使用的对象…”。所以我不排除有这种可能性。