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

Material setting images cost too much memory also cause application slow

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P4 P4
    • 9
    • 8u25
    • javafx
    • Windows 7 Professional

      I write an app need to load lots of images to preform 3D view.

      When I load a lot of different images into the app, the app become really slow. After I profile this app, I find out when I add a 7M image into my app, the Total memory cost will increase about 100M.

      So here I changed the simple code from ORACLE to do some test : http://docs.oracle.com/javase/8/javafx/graphics-tutorial/sampleapp3d.htm.

      My changed code is in MoleculeSampleApp.java:
          ---------------------------------------------------------------------------------------------
      private void buildMolecule() throws FileNotFoundException, IOException {
             //------------------------------------ I load three big images here------------------
              String path1 = "large1.jpg";
              String path2 = "large2.jpg";
              String path3 = "large3.jpg";
              InputStream stream1 = new FileInputStream(path1);
              Image image1 = new Image(stream1);
              stream1.close();
              InputStream stream2 = new FileInputStream(path2);
              Image image2 = new Image(stream2);
              stream2.close();
              InputStream stream3 = new FileInputStream(path3);
              Image image3 = new Image(stream3);
              stream3.close();
              //---------------------------------------------------------------------------
              
             final PhongMaterial redMaterial = new PhongMaterial();
              redMaterial.setDiffuseColor(Color.DARKRED);
              redMaterial.setSpecularColor(Color.RED);
              // Add image1 to redMeterial
              redMaterial.setSpecularMap(image1);
       

              final PhongMaterial whiteMaterial = new PhongMaterial();
              whiteMaterial.setDiffuseColor(Color.WHITE);
              whiteMaterial.setSpecularColor(Color.LIGHTBLUE);
              //Add image2 to whiteMaterial
              whiteMaterial.setSpecularMap(image2);
              
              final PhongMaterial greyMaterial = new PhongMaterial();
              greyMaterial.setDiffuseColor(Color.DARKGREY);
              greyMaterial.setSpecularColor(Color.GREY);
              //Add image3 to greyMaterial
              greyMaterial.setSpecularMap(image3);
              ...........................

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

      Each of the images is about 14M.

      Then I begin to profile the code with the profile tool in NetBeans.

      First
      I comment these three lines and profile the code:
      redMaterial.setSpecularMap(image1);
      whiteMaterial.setSpecularMap(image2);
      greyMaterial.setSpecularMap(image3);

      The Total Memroy cost is 49M and Used Memroy is 8M.
      **********************************************************************

      Second
      I comment two lines and profile the code :
      whiteMaterial.setSpecularMap(image2);
      greyMaterial.setSpecularMap(image3);

      image1 is 13.2M

      The Total Memroy cost is 283M and Used Memroy is 236M.
      **********************************************************************

      Third
      I comment one line and profile the code:
      greyMaterial.setSpecularMap(image3);

      image1 and image2 together is 26.9M

      The Total Memroy cost is 550M and Used Memroy is 502M.

      **********************************************************************

      Fourth
      I profile the code and three images are all added to each node.

      The three images is 44.5M

      The Total Memroy cost is 696 and Used Memroy is 650M.

      *********************************************************************
      Also after adding the images, the camera moving and zooming will not work as smoothly as the one without set images(app slow).

      I don't know whether this is normal for the 3D things. But adding images to JAVAFX codes will cost too much space and slow down the application.

            ekleyman Elina Kleyman (Inactive)
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: