Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android.media.SoundPool是否会导致内存泄漏?_Android_Memory Leaks_Soundpool - Fatal编程技术网

android.media.SoundPool是否会导致内存泄漏?

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,并不意味着它后面的

我发现这些代码可能会导致android 2.1的内存泄漏


    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虚拟机将花费精力回收未使用的对象…”。所以我不排除有这种可能性。