Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8169525

Reduce heap usage of JavaFX WebView for web pages with many images

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Unresolved
    • Icon: P3 P3
    • tbd
    • 8, 9
    • javafx
    • JavaSE8u112 Windows+x86/x64

    • web
    • x86
    • windows

      If you go to a web page with many images, JavaFx WebView uses way too much heap to load the web page.

      For example, this particular web page has 340 images:

      https://github.com/d3/d3/wiki/Gallery

      JavaFx WebView takes around 2GB of heap in order to render the page.
      Firefox takes around 500 MB. Please reduce the heap usage as less as that of FireFox


      When using JavaSE8u112 to run attached JavaFX program,
      we get heap overflow with 1 GB heap. The backtrace of the overflow is shown below.

      Exception in thread "JavaFX Application Thread" java.lang.OutOfMemoryError: Java heap space
              at com.sun.javafx.iio.gif.GIFImageLoader2.decodePalette(GIFImageLoader2.java:323)
              at com.sun.javafx.iio.gif.GIFImageLoader2.load(GIFImageLoader2.java:234)
              at com.sun.javafx.iio.ImageStorage.loadAll(ImageStorage.java:364)
              at com.sun.javafx.iio.ImageStorage.loadAll(ImageStorage.java:274)
              at com.sun.javafx.webkit.prism.WCImageDecoderImpl.loadFrames(WCImageDecoderImpl.java:179)
              at com.sun.javafx.webkit.prism.WCImageDecoderImpl.loadFrames(WCImageDecoderImpl.java:192)
              at com.sun.javafx.webkit.prism.WCImageDecoderImpl.getImageFrame(WCImageDecoderImpl.java:292)
              at com.sun.javafx.webkit.prism.WCImageDecoderImpl.getFrame(WCImageDecoderImpl.java:251)
              at com.sun.webkit.WebPage.twkUpdateContent(Native Method)
              at com.sun.webkit.WebPage.updateDirty(WebPage.java:296)
              at com.sun.webkit.WebPage.updateContent(WebPage.java:615)
              at com.sun.javafx.sg.prism.web.NGWebView.update(NGWebView.java:74)
              at javafx.scene.web.WebView.handleStagePulse(WebView.java:999)
              at javafx.scene.web.WebView.lambda$new$29(WebView.java:280)
              at javafx.scene.web.WebView$$Lambda$257/31349198.pulse(Unknown Source)
              at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355)
              at com.sun.javafx.tk.Toolkit$$Lambda$280/1609529788.run(Unknown Source)
              at java.security.AccessController.doPrivileged(Native Method)
              at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354)
              at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:378)
              at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
              at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
              at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319)
              at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$171/463039962.run(Unknown Source)
              at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
              at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
              at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
              at com.sun.glass.ui.win.WinApplication$$Lambda$167/2002871171.run(Unknown Source)
              at java.lang.Thread.run(Thread.java:745)

            Unassigned Unassigned
            gucheng Guixin Cheng
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: