This PR is new implementation of JavaEvent listener memory management.
Issue  [JDK-8088420](https://bugs.openjdk.java.net/browse/JDK-8088420?filter=-1)

1. Calling remove event listener does not free jni global references.
2. When WebView goes out of scope (disposed from app) , its Event Listeners are 
not being garbage collected.

Solution:
1.  Detached the jni global reference from JavaEventListener.
2. Create scoped ref counted wrapper class JavaObjectWrapperHandler for jni 
global reference.
3. Create unique  JavaObjectWrapperHandler object for each JavaEventListener.
4. EventListenerManager is a singleton class , which stores the 
JavaObjectWrapperHandler mapped with JavaEventListener.
5. EventListenerManager also stores the JavaEventListener mapped with DOMWindow.
6. When Event listener explicitly removed , JavaEventListener is being 
forwarded to EventListenerManager to clear the listener.
7. When WebView goes out of scope, EventListenerManager will de-registered all 
the event listeners based on the ref counts attached with WebView DOMWindow.

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

Commit messages:
 - 8088420: JavaFX WebView memory leak via EventListener, code clean up
 - 8088420: JavaFX WebView memory leak via EventListener

Changes: https://git.openjdk.java.net/jfx/pull/799/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=799&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8088420
  Stats: 1148 lines in 11 files changed: 1142 ins; 3 del; 3 mod
  Patch: https://git.openjdk.java.net/jfx/pull/799.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/799/head:pull/799

PR: https://git.openjdk.java.net/jfx/pull/799

Reply via email to