我目前正在开发一个 Java 应用程序。使用的数据库是 Sybase ASE 15.0。目前,我在其中一种情况下收到以下错误:
java.lang.OutOfMemoryError: Java heap space
我的代码中有以下过程调用:
CallableStatement cStmt = null;
ResultSet rs = null;
ArrayList list = new ArrayList();
Connection con = getConnection();
cStmt = con.prepareCall("call <proc-name>(?,?)", ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
boolean b;
// .....
// .....
while(rs.next()){
List dList = new ArrayList();
T t = new T();
t.setProp1(rs.getBoolean("isAvailable"));
t.setProp2(rs.getString("Name"));
t.setDList(dList);
....
....
t.setPropN(rs.getString("Property-name"));//many properties are read
// from db and POJO is populated.
b = true;
int Id = rs.getInt("Id");
do{
D d = new D();
d.setProp1(rs.getFloat("<property-name"));
....
....
d.setPropN(rs.getString("Property-name"));//many properties are read
dList.add(d);
if(rs.next()){
if(rs.getInt("Id")!=Id){
b = false;
rs.previous();
}
} else {
b = false;
rs.previous();
}
} while (b);
list.add(t);
}
该过程接收日期范围作为其参数。如果日期范围很大,则返回大量记录。对于少量记录,它可以正常工作,但对于大量记录,它会给出“内存不足”异常。我观察到,如果记录数大于 11997,则会出现此错误。
我读过那个简单的结果集将记录存储在堆内存中,但它应该适用于可滚动的结果集,对吧?
在这种情况下如何删除此异常。