日期:2014-05-20  浏览次数:20618 次

各位大哥,兄弟问一下:方法的线程对某事件增加监听,需不断运行,事件触发一回内存增加200k,请问该怎么做降低内存?流了什么了用过都及时关了
方法的线程对某事件增加监听,需要不断运行,发现触发一回内存增加200k,请问该怎么做降低内存?流了什么了用过都及时关了 

问了好几个人,他们不知道,因此特向大家请教 
相关代码 


public class XianChengDuQu extends Thread //从温湿度文件中读取内容 


XianChengDuQu(String mulu)//mulu为文件所在目录,a为起始文件名 

this.mulu=mulu; 
thread=new Thread(this); 
sjk=new ShuJuKuLianJie(0,0,0,0,"前半小时",0); 



public void run() 


while (true) 


if(f.exists())//触发一回内存增加200k { 
try 

// sjk=new ShuJuKuLianJie(0,0,0,0,"前半小时",0); 
cryuju=new String("insert into dbo.wsd2 values(?,?,?)"); 
ps=sjk.con.prepareStatement(cryuju); 
ps.setString(1, str1);//具体时间 
ps.execute(); 

catch (SQLException e) 

// TODO Auto-generated catch block 
e.printStackTrace(); 


try 

br.close(); 
fr.close(); //关闭流 

catch (IOException e1) 

// TODO Auto-generated catch block 
e1.printStackTrace(); 


f.renameTo(new File(mulu,shijian+".txt"));//文件改名 



try 

sjk.con.close();//关闭数据库 

catch (SQLException e) 

// TODO Auto-generated catch block 
e.printStackTrace(); 

try 


thread.sleep(2000); 

catch (InterruptedException e) 

// TODO Auto-generated catch block 
e.printStackTrace(); 

// System.gc(); 



private void setText(String cgqbh2) { 
// TODO Auto-generated method stub 


public static void main(String[] args) 

XianChengDuQu xc=new XianChengDuQu("C:\\温湿度数据"); 
xc.thread.start(); 

}

------解决方案--------------------
JVM不会那么快回收内存的,程序没看出什么问题。难道这程序会最终会out of memory吗?
最后说句,你的类名取的很有个性,呵呵
------解决方案--------------------
有参数可以设置线程堆栈大小的
默认是200k
Thread(ThreadGroup group, Runnable target, String name, long stackSize) 
分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。