相关疑难解决方法(0)

预定的未来会导致内存泄漏吗?

我想我的Android动态壁纸中有内存泄漏.每当我旋转屏幕时,收集的内存垃圾量增加50kb并且不会再次下降.我认为它可能是由预定的未来引起的,所以我将提出一个场景,看看是否是这种情况.

假设您有一个具有以下成员的类(我们称之为Foo).

private ScheduledFuture<?> future;
private final ScheduledExecutorService scheduler = Executors
        .newSingleThreadScheduledExecutor();

private final Runnable runnable = new Runnable() {
    public void run() {
        // Do stuff
    }
};
Run Code Online (Sandbox Code Playgroud)

现在你设定了预定的未来

future = scheduler.scheduleAtFixedRate(runnable, delay, speed,
                TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)

将来会对runnable进行引用,而runnable可以保存对父Foo对象的引用.我不确定是不是这种情况,但这个事实是否意味着如果程序中没有任何内容引用Foo,垃圾收集器仍然无法收集它,因为有预定的未来?我不太擅长多线程,所以我不知道我显示的代码是否意味着计划任务的寿命比对象长,这意味着它不会被垃圾收集.

如果这种情况不会导致阻止Foo被垃圾收集,我只需要通过一个简单的解释告诉它.如果它确实阻止Foo被垃圾收集,那么我该如何解决?要做future.cancel(true); future = null;什么?这future = null部分是不必要的吗?

java multithreading android memory-leaks future

14
推荐指数
2
解决办法
6940
查看次数

标签 统计

android ×1

future ×1

java ×1

memory-leaks ×1

multithreading ×1