On Tue, 23 Jan 2024 04:58:00 GMT, Prasanta Sadhukhan <psadhuk...@openjdk.org> wrote:
>> src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTreeUI.java line >> 1338: >> >>> 1336: if(rendererPane != null) { >>> 1337: if (!tree.isVisible()) { >>> 1338: rendererPane.removeAll(); >> >> Wouldn't it be enough to remove `rendererPane` from and assign `null` to it? >> >> It's done this way in `BasicTableUI` and `BasicListUI`: >> https://github.com/openjdk/jdk/blob/0d8543d6773a516dad54038070dce507179d0709/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java#L1656-L1658 >> and >> https://github.com/openjdk/jdk/blob/0d8543d6773a516dad54038070dce507179d0709/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicListUI.java#L986-L988 > > It is already been done in `completeUIUninstall` called from `uninstallUI` > `rendererPane.removeAll `is done to remove all components that are added in > `getNodeDImensions` which gets removed in `paint` but if tree is not visible, > then `paint `is not called so those components are not removed, which I am > trying to do now in `uninstallUI `by checking tree visibility condition Okay, I see it. Then the added lines in `uninstallComponents` aren't needed because `rendererPane` is assigned `null` in `completeUIUninstall` which is called right after `uninstallComponents`, therefore `rendererPane` itself and all the components added into it are eligible for garbage collection. Where is the memory leak then? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/17458#discussion_r1463114166