我的部分代码如下:import java.io.*;
import java.util.*;
/**
 * 用于保存分时成交明细的内存区
 */
public class MinDetail
{
private int curRecord ;
//成交明细数据,时间,价格,涨跌值,买入,卖出,现手
String recordNum;
int totalRecord;
private String[][] detailData;
public TradeDetail()
{


curRecord = 0;
recordNum = ConfigReader.getParam("DetailRecord");
totalRecord = Integer.valueOf(recordNum).intValue();
detailData = new String[totalRecord][6];


}
/**
 * 设置数据
 */
public void setData(String[] inData)
{
for(int i=0;i<6;i++)
{
detailData[curRecord][i]=inData[i];
}
curRecord+=1;
if(curRecord>=1999)
curRecord=1999;


}
/**
 * 返回某条明细纪录
 */
public String[] getData(int record)
{
return detailData[record];
}
/**
 * 返回当前纪录条数
 */
public int getCurrentRecord()
{
return curRecord;
}
/**
 * 返回某个时间的成交明晰
 */
public String getData(int start,int end)
{
String retString = "";
if(start>=curRecord)
return "0^";
if(end>=curRecord)
end = curRecord;
int length = end-start;
for(int i=start;i<end;i++)
{
for(int j=0;j<6;j++)
{
retString = retString+detailData[i][j]+"^";
}
}
retString = String.valueOf(length)+"^"+retString;


return retString;
}

public void freeMemory()
{
for(int i=0;i<totalRecord;i++)
{
for(int j=0;j<6;j++)
{
detailData[i][j]=" ";
}
}
curRecord = 0;
}

}
//--------------------------
public class QuotaMemory
{
      public static MinDetail[] minDetail = null;
      public static void InitMemory()
      {
           minDetail = new MinDetail[2000];
           for(int i=0;i<2000;i++)
           {
                minDetail[i]=new MinDetail();
            }
       }
      public static void setMinDetail(int index,String[] inData)
{

synchronized(minDetail[index])
{
minDetail[index].setData(inData);

}

}
}
基本上的程序如上面,不知道在调用QuotaMemory的setMinDetail()方法时会不会引起内存问题。我的程序运行过程中吃内存吃的厉害。

解决方案 »

  1.   

    freeMemory有问题
    不要那样清空字符串
    应该detailData[i][j]=null;
    这样系统才会自动释放字符串内存空间
    另外应确保这些字符串的所有引用均已经清空,如inData[everyitem]=null
    不时的调用一下System.gc()可以让系统立即清理内存
      

  2.   

    不知道Resin重启动与内存有没有关系,另外,我又遇到了Resin不响应请求的情况,resin对我的请求没有任何响应,(在我的程序执行了14个小时之后)不知道为什么?