-
Bug
-
Resolution: Unresolved
-
P4
-
8
-
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);
}
}
}
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);
}
}
}