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

各位大哥,兄弟问一下:方法的线程对某事件增加监听,需不断运行,事件触发一回内存增加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 所引用的线程组的一员,并具有指定的堆栈大小。