计划的未来会导致内存泄漏吗?
我想我在我的Android动态壁纸中有一个内存泄漏。每当我旋转屏幕时,收集的内存垃圾量都会增加50kb,并且不会回落。我认为这可能是由预定的未来引起的,所以我将提出一个场景,看看情况是否如此。
假设您有一个类(我们称之为Foo),其中包含以下成员。
private ScheduledFuture<?> future;
private final ScheduledExecutorService scheduler = Executors
.newSingleThreadScheduledExecutor();
private final Runnable runnable = new Runnable() {
public void run() {
// Do stuff
}
};
现在,您设定了一个预定的未来
future = scheduler.scheduleAtFixedRate(runnable, delay, speed,
TimeUnit.MILLISECONDS);
future 包含对 runnable 的引用,runnable 包含对父 Foo 对象的引用。我不确定是否属于这种情况,但这一事实是否意味着,如果程序中没有任何内容包含对Foo的引用,垃圾回收器仍然无法收集它,因为有一个预定的未来?我不太擅长多线程处理,所以我不知道我显示的代码是否意味着计划任务将比对象存活更长时间,这意味着它最终不会被垃圾回收。
如果这种情况不会导致防止Foo成为垃圾回收,我只需要用一个简单的解释来告诉我。如果它确实可以防止Foo被垃圾回收,那么我该如何修复它?必须这样做吗?该部分是否没有必要?future.cancel(true); future = null;
future = null