Одной из утечек памяти, обнаруженных нами в нашем приложении, является закрытое статическое поле java.awt.Window.allWindows
, которое отслеживает все экземпляры Window
. У нас есть диалоговые окна, которые создаются, используются, а затем забываются, и ожидалось, что они исчезнут и будут собирать мусор. Это приватное поле сохраняет их в поле действия до бесконечности, пока к ним не будет вызван метод dispose()
. И по определению, мы не можем этого сделать, когда они вышли за рамки.
Я не понимаю, почему это так задумано. Кажется, что это противоречит духу сборки мусора, когда я должен явно сообщить системе, когда я закончу с объектом Window
. Очевидно, я с этим покончил, так как это выходит за рамки.
Я понимаю, что делает метод dispose()
: избавление от объектов одноранговой системы. Я понимаю, что это за пределами Java, и вам нужен какой-то способ сделать это, и что Swing не должен просто терять эти объекты, иначе у него будет утечка памяти. Но что достигается, когда я навсегда сохраняю ссылку на мой Window
, когда я больше никогда не буду использовать его?
Может кто-нибудь объяснить, почему это необходимо?