RFR: 6507038: Memory Leak in JTree / BasicTreeUI [v2]

Prasanta Sadhukhan psadhukhan at openjdk.org
Wed Jan 24 05:30:45 UTC 2024


> When using a TreeCellRenterer which creates new components in getTreeCellRendererComponent() in a JTree that is not visible, changes to the nodes cause a memory leak.
> When a node is changed, the Method getNodeDimensions() is called to calculate the new dimensions for the node. In this method, getTreeCellRendererComponent() is called to obtain the renderer component (what else...) and [this component is added to rendererPane](https://github.com/openjdk/jdk/blob/36f4b34f1953af736706ec67192204727808bc6c/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTreeUI.java#L3283-L3284). It is not removed from the rendererPane afterwards. 
> Only when the tree is painted, the paint() method does a removeAll on the rendererPane [in this code](https://github.com/openjdk/jdk/blob/36f4b34f1953af736706ec67192204727808bc6c/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTreeUI.java#L1500)
> 
> FIx is added to remove the components from rendererPane when the JTree UI is changed/uninstalled only when tree is not visible since they are already removed when tree is painted in paint() method..

Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:

  Retain last component in rendererPane. Testcase added

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/17458/files
  - new: https://git.openjdk.org/jdk/pull/17458/files/923be22e..301ecbce

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=17458&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=17458&range=00-01

  Stats: 213 lines in 2 files changed: 210 ins; 3 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/17458.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17458/head:pull/17458

PR: https://git.openjdk.org/jdk/pull/17458


More information about the client-libs-dev mailing list