难道真的是传说中的JAVA里的BUG吗?好大的一只……高人请出手
最近用java画图……然后传到服务器上对外发布……本机测试没有任何问题……可是传到大型机……sun10000/曙光2000等机器上运行后,发现内存狂涨,出现不能回收的问题……
进行测试发现问题出在drawString()上……每次drawString后,内存都会有规律的增加,并且不回收……直到关闭服务……
机器环境为
sun10000为solaris、jsdk1.4.0,曙光2000为aix4.3 、jsdk1.3
不知道有没有朋友遇到过这类问题?给java公司发了信,也没有什么回音……
大家能不能给点意见?或者有没有遇到这种问题的??非常急……谢谢各位的帮助
代码在这里……(PC机上是没有问题的,已经测试,但一到大型机就出问题)
// FrontEnd Plus GUI for JAD
// DeCompiled : TestDrawString.class
package chicken.map;
import java.io.*;
import java.sql.*;
import java.awt.*;
import java.awt.image.*;
import java.util.ArrayList;
import java.util.Arrays;
// Referenced classes of package chicken.map:
// CtgCovStartEnd, TestDrawString
public class TestDrawString
{
final int PICWIDTH = 910;
private int picHeight = PICWIDTH;
private int imgWidth;
final int IMGWIDTH = 700;
final int IMGHEIGHT = 10;
final int TOP = 5;
final int HEAD = 100;
final int DISTANCE = 5;
private String chr_id;
private int window_start;
private int window_end;
private int CtgCov_start;private int CtgCov_end;
private String CtgCov_type;
private int showName;
private String path;
private String name;
private Connection conn;
private Statement stat;
private ResultSet rs;
private String ctgCovName = null;
private ArrayList CtgCovList = new ArrayList();
StringBuffer linkInfo = new StringBuffer();
public TestDrawString()
{
picHeight = 0;
imgWidth = 0;
chr_id = null;
window_start = 0;
window_end = 0;
CtgCov_start = 0;
CtgCov_end = 0;
CtgCov_type = null;
path = null;
name = null;
conn = null;
stat = null;
rs = null;
}
int total_number = 3000;
float legend = (float)PICWIDTH / total_number;
public void createMap()
{
BufferedImage image = null;
image = new BufferedImage(3000, 3000, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g = (Graphics2D) image.getGraphics();
g.setBackground(Color.white);
g.fillRect(0 , 0 , 3000, 3000);
g.setColor(Color.green);
String s = "TestDrawString";
for(int i = 0; i < total_number; i+= 15){
g.drawString(s, i, i);
}
try{
// com.sun.media.jai.codec.ImageCodec.createImageEncoder("PNG",
// new FileOutputStream(path + name + ".png"), null).encode(image);
FileOutputStream output = new FileOutputStream(path + name + ".png");
com.sun.media.jai.codec.ImageCodec.createImageEncoder("PNG", output, null).encode(image);
output.close();
}
catch (Exception e) {
System.out.println(e);
}
}
public void setName(String s)
{
name = s;
}
public void setPath(String s)
{
path = s;
}
public static void main(String args[])
{
TestDrawString chrmap = new TestDrawString();
chrmap.setName("TestDrawString");
chrmap.setPath("d:\\temp\\pic\\");
chrmap.createMap();
System.out.println("end");
}
}