> The AWTEventMulticaster is a tree node with 2 children. This PR proposes 
> rebalancing that tree after 500 additions to avoid potential 
> StackOverflowErrors when trying to interact with a large AWTEventMulticaster.
> 
> In the original headful test:
> We added 8,000 checkboxes, and when their parent panel was hidden the stack 
> needed to grow to 24,000 lines. It took 8,000 lines to recursively call 
> `java.awt.AWTEventMulticaster.componentHidden`, and then 16,000 additional 
> lines to call two recursive methods to remove a listener:
> 
> java.desktop/java.awt.AWTEventMulticaster.removeInternal()
> java.desktop/java.awt.AWTEventMulticaster.remove()
> 
> 
> With this current PR the max stack size reaches 1,267 instead. (If we 
> rebalanced at EVERY addition, then that same scenario would reach a max stack 
> size of 71.)
> 
> JDK-8342782 included a headful test case, but I think the main problem it 
> demonstrated can be represented by the headless test case attached to this PR.
> 
> Depending on how this PR is received I may submit a separate ticket & PR to 
> modify AquaButtonUI so it doesn't always attach an AncestorListener. (That 
> is: if my GUI includes 8,000 checkboxes then I don't need 8,000 
> AncestorListeners.) But JDK-8342782's test case is currently written in a way 
> that should reproduce across all L&F's, so that can be discussed separately.

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

  8342782: expanding wildcard imports
  
  This is in response to:
  https://github.com/openjdk/jdk/pull/21962#discussion_r1857389973

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/21962/files
  - new: https://git.openjdk.org/jdk/pull/21962/files/ee6c059d..ed6a585a

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=21962&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=21962&range=03-04

  Stats: 3 lines in 1 file changed: 1 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/21962.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21962/head:pull/21962

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

Reply via email to