Eclipse has a good memory dump analyzer; but detecting a memory leak can be a very difficult task and requires a deep dive into the way objects are allocated by your application.
It took me 2 full days to find out that one of my custom cell classes of the JTable class allocated JDialog when creating an instance, without actually opening it, and its own part of the dialog kept the cell block instance locked, thus the table, thus the screen and, therefore, all objects of the object that were associated with it.
source share