各位我的程序数据量很小的时候大概几万条数据的时候没发生java.lang.OutOfMemoryError
当数据量大的时候就会抛java.lang.OutOfMemoryError异常 
请高手帮我看看程序那地方写的不好 
public Iterator seachTime(String start,String end)
{
Iterator iter = null;
List l = new ArrayList();
String sql=" select ";
sql+=" a.TELEPHONE ,to_char(a.STARTTIME,'YYYY-MM-DD HH24:MI:SS'),";
sql+=" to_char(a.ENDTIME,'YYYY-MM-DD HH24:MI:SS'),MENULOG,b.province";
sql+=" from T_IVR_WIN_USER a,AC_IVRJGW_PROVINCE b ";
sql+=" where ";
sql+=" a.STARTTIME >= to_date(?,'YYYY-MM-DD HH24:MI:SS')";
sql+=" and a.ENDTIME <= to_date(?,'YYYY-MM-DD HH24:MI:SS')";
sql+=" and substr(a.TELEPHONE,1,7)=trim(b.segment)";
sql+=" and( a.STARTTIME is  not null or  a.ENDTIME !=a.STARTTIME ) order by a.STARTTIME desc ";
Oracle ora = Oracle.getInstance(sql);
ora.setString(1,start);
ora.setString(2,end);
ResultSet rs = ora.executeQuery();
PerInfo pi = null;
try
{
while(rs.next())
{
if(pi == null)
pi = new PerInfo();
pi.addUser(rs.getString(1));
History h = new History();
String telphone=rs.getString(1).trim();
h.setPhone(telphone);
h.setStartTime(rs.getString(2));
h.setEndTime(rs.getString(3));
pi.addTotalTime((int)h.getTimeLong()/60);
if(h.getTimeLong()%60 > 0)
pi.addTotalTime(1);
//String region =getregion(telphone);
h.setRegion(rs.getString(5));
l.add(h);
}
}catch(SQLException e)
{
e.printStackTrace();
}finally
{
ora.close();
}
l.add(0,pi);
if(l.size() > 1)
iter = l.iterator();
return iter;
}