RFR: 8341687: Memory leak in TableView after interacting with TableMenuButton

Andy Goryachev angorya at openjdk.org
Mon Nov 18 16:23:49 UTC 2024


On Sat, 16 Nov 2024 00:58:47 GMT, Marius Hanl <mhanl at openjdk.org> wrote:

> There are multiple issues in the `TableMenu` logic that result in a memory leak.
> 
> The following problems are now fixed with this PR:
> - The listener, that is registered to the `col.visibleProperty()` was not weak nor was it ever unregistered
>    - The fix is to do pretty much the same that was already done with the `col.textProperty()` listener
> - The `col.visibleProperty()` and `col.textProperty()` where added again and again and again to the column when the columns changed (which happens when toggling the visibility).
>   - The fix is to add the listeners once - when the `MenuItem` is created. This way, when the `TableMenu` is rebuild and the cached `MenuItem` is used, the whole listener logic is not run again for the column

modules/javafx.controls/src/main/java/javafx/scene/control/skin/TableHeaderRow.java line 641:

> 639: 
> 640:             final CheckMenuItem _item = item;
> 641:             // fake bidrectional binding (a real one was used here but resulted in JBS-8136468)

that's JDK-8136468

modules/javafx.controls/src/test/java/test/javafx/scene/control/skin/TableViewTableHeaderRowTest.java line 233:

> 231:     /**
> 232:      * Tests that re-setting the same columns does not cause memory leaks.
> 233:      * See also: <a href="https://bugs.openjdk.org/browse/JDK-8341687">JDK-8341687</a>.

technically, this test does not test for memory leak - it seems to test the fact that the listener gets disconnected.

modules/javafx.controls/src/test/java/test/javafx/scene/control/skin/TableViewTableHeaderRowTest.java line 261:

> 259:     /**
> 260:      * Tests that toggling the column visibility does not cause memory leaks.
> 261:      * See also: <a href="https://bugs.openjdk.org/browse/JDK-8341687">JDK-8341687</a>.

same comment - does not test for memory leak.  the memory leak test might involve `JMemoryBuddy` - see for example `SystemMenuBarTest`.

modules/javafx.controls/src/test/java/test/javafx/scene/control/skin/TreeTableViewTableHeaderRowTest.java line 234:

> 232:     /**
> 233:      * Tests that re-setting the same columns does not cause memory leaks.
> 234:      * See also: <a href="https://bugs.openjdk.org/browse/JDK-8341687">JDK-8341687</a>.

same, does not test for leaks.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1640#discussion_r1846878710
PR Review Comment: https://git.openjdk.org/jfx/pull/1640#discussion_r1846882432
PR Review Comment: https://git.openjdk.org/jfx/pull/1640#discussion_r1846887787
PR Review Comment: https://git.openjdk.org/jfx/pull/1640#discussion_r1846889065


More information about the openjfx-dev mailing list