Dopo un po di test ho capito che l'aumento della VRam era dovuto al fatto che il metodo g.drawImage(image, x, y, w, h, imageObserver) per stampare l' immagine la ridimensiona ogni volta che l' immagine cambia, ma non cancella le altre immagini ridimensionate. Io uso una sola immagine, che poi passo al JPanel con il mio metodo setImage(BufferedImage image). Ho provato a settare l' immagine null prima di assegnargli quella nuova ma non funziona. Ho provato con image.flush() e sembra che funzioni abbastanza anche se la memoria è un pò altalenante. Non c'è un metodo più efficiente per eliminare le immagini ridimensionate che salva il metodo drawImage() (chiamare tutte le volte il garbage collector spreca risorse)?