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

Memory Leak in java2d LCMS

XMLWordPrintable

    • 2d
    • generic
    • generic

      A DESCRIPTION OF THE PROBLEM :
      We discovered a memory leak when using the apache/pdfbox library. After investigation, we initially determined that the root cause was an off-heap memory leak in sun.java2d.cmm.lcms.LCMS#createNativeTransform() function.
      I think it's same as https://bugs.openjdk.org/browse/JDK-8181183.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      run following code long time, and check the RES with following command `loop=0; while [ "$loop" -lt 100 ]; do date ; top -b -n 1 -p <pid> | grep java ; sleep 1800; done`



      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      the pid's RES should be same for long time.
      ACTUAL -
      the RES memory continues to grow

      ---------- BEGIN SOURCE ----------
      // TestLCMLeak.java

      import java.awt.color.ColorSpace;
      import java.awt.color.ICC_ColorSpace;
      import java.awt.color.ICC_Profile;
      import java.awt.image.BufferedImage;
      import java.awt.image.ColorConvertOp;

      public class TestLCMLeak {
          public static void main(String[] args) {
              //System.out.println("testColorConvertOpLeak, pid=" + ProcessHandle.current().pid());

              ICC_Profile srcProfile = ICC_Profile.getInstance(ColorSpace.CS_sRGB);
              ICC_Profile destProfile = ICC_Profile.getInstance(ColorSpace.CS_PYCC);

              ColorSpace srcColorSpace = new ICC_ColorSpace(srcProfile);
              ColorSpace destColorSpace = new ICC_ColorSpace(destProfile);

              BufferedImage srcImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
              srcImage.getGraphics().setColor(java.awt.Color.RED);
              srcImage.getGraphics().fillRect(0, 0, 100, 100);

              long x = 0;
              while(true){
                  if (x % 100000 == 0) {
                      System.out.println("count=" + x);
                  }
                  x+=1;
                  ColorConvertOp colorConvertOp = new ColorConvertOp(srcColorSpace, destColorSpace, null);
                  colorConvertOp.filter(srcImage, null);
              }
          }
      }

            abaya Anass Baya
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: