Originariamente inviato da Neptune
Forse il fatto che richiamo tutto nello stesso scope (ovvero ho due oggetti pesanti dichiarati di fila nello stesso main) fa si che il gc non possa deallocare.
this.

poi se nel corso di una routine nello stesso scope una grossa collezione non ti serve piu la puoi settare a null a quel punto la GC se decide di passare (perchè c'è pressione nell'heap) troverà la collection settata a null e la candiderà per la rimozione.
La GC parte solo se ci sono pressioni in heap e candida per la rimozione tutti gli oggetti orfani.

lo stack non centra nulla con l'heap, non c'è GC. durante la ricorsione nello stack vengono memorizzati solo i riferimenti se internamente la funzione istanzia degli oggetti questi nascono e muoino man mano che si verifica la ricorsione (per via delle uscite dallo scope) e questo praticamente rappresenta un vantaggio in termini di performance dell'heap. Se avessi problemi nello stack l'exception sarebbe una StackOverflowError e non una outofmemory.