-
Bug
-
Resolution: Fixed
-
P4
-
8
When a node is added to the scene, and removed by the use of an MouseEvent.MOUSE_PRESSED, MouseEvent.MOUSE_RELEASED or MouseEvent.MOUSE_CLICKED. the reference to the node and all the child nodes is kept. It takes a new one of the above events to release these references. Causing to free memory not when a node is not needed anymore, but when a second time the ClickGenerator in Scene.java has kicked in.
After some searching i came across: http://hg.openjdk.java.net/openjfx/8/master/rt/file/f89b7dc932af/modules/graphics/src/main/java/javafx/scene/Scene.java with the following lines (at 3436 and 3437):
target.fillHierarchy(pressedTargets);
pickedTarget.fillHierarchy(releasedTargets);
pressedTargets and releasedTargets are not cleared after the event has fired (if conditions met or not after an MOUSE_RELEASED).
I have tested the above using the netbeans profiler with two application snapshots where:
- I took a snapshot immediately after closing the node (with MOUSE_RELEASED) and did a GC root search on the removed node showing releasedTargets with reference to the class which was the node.
- and when i did just a click somewhere else in the scene where this node resided and releasedTargets did not had the node/class reference anymore.
After some searching i came across: http://hg.openjdk.java.net/openjfx/8/master/rt/file/f89b7dc932af/modules/graphics/src/main/java/javafx/scene/Scene.java with the following lines (at 3436 and 3437):
target.fillHierarchy(pressedTargets);
pickedTarget.fillHierarchy(releasedTargets);
pressedTargets and releasedTargets are not cleared after the event has fired (if conditions met or not after an MOUSE_RELEASED).
I have tested the above using the netbeans profiler with two application snapshots where:
- I took a snapshot immediately after closing the node (with MOUSE_RELEASED) and did a GC root search on the removed node showing releasedTargets with reference to the class which was the node.
- and when i did just a click somewhere else in the scene where this node resided and releasedTargets did not had the node/class reference anymore.