¿Puede un futuro programado causar una pérdida de memoria?

Creo que tengo una pérdida de memoria en mi fondo de pantalla en vivo de Android. Cada vez que giro la pantalla, la cantidad de basura recolectada en la memoria aumenta en 50 kb y no baja. Creo que puede deberse a un futuro programado, así que presentaré un escenario para ver si ese es el caso.

Digamos que tienes una clase (llamémosla Foo) que tiene los siguientes miembros.

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

private final Runnable runnable = new Runnable() {
    public void run() {
        // Do stuff
    }
};

Y ahora se establece un futuro programado.

future = scheduler.scheduleAtFixedRate(runnable, delay, speed,
                TimeUnit.MILLISECONDS);

El futuro contiene una referencia al ejecutable, y el ejecutable mantiene una referencia al objeto Foo principal. No estoy seguro de si este es el caso, pero este hecho podría significar que si nada en el programa contiene una referencia a Foo, el recolector de basura todavía no puede recolectarlo porque hay un futuro programado. No soy muy bueno en el multihilo, por lo que no sé si el código que he mostrado significa que la tarea programada durará más que el objeto, lo que significa que no se recogerá como basura.

Si este escenario no evitará que Foo sea una recolección de basura, solo necesito que me digan eso con una explicación simple. Si evita que Foo se recoja en la basura, ¿cómo lo arreglo? Tengo que hacerfuture.cancel(true); future = null;? Es elfuture = null parte innecesaria?

Respuestas a la pregunta(3)

Su respuesta a la pregunta