1

我正在尝试使用包含大约 12000 条记录的数据库填充类型为 tableList 的数组列表,然后使用 struts 迭代器标记填充我的 jsp 页面,但是在一次又一次地执行此操作时,jvm 内存不足,正如我所见每次从我的页面调用此操作时,堆大小都会不断减小。我认为,每当创建此操作类的新实例时,列表空间都不会被释放。建议解决此问题。我也在运行 tableList.clear( ); 在类的构造函数中

int records=0;
        spl("BEFORE: "+run.freeMemory()+"-"+run.totalMemory()+"-"+run.maxMemory());//spl is for system.out.println and run is an object of Runtime class
        while(resultSet.next())
        {
            records++;
            if(!resultSet.getString("service_date").equals("N/A"))
            {
                serviceYear=resultSet.getString("service_date").split("-");
                regnNumber=officeCode+"/"+resultSet.getString("serviceid_requested")+"/"+resultSet.getString("country_code")+"/"+resultSet.getString("service_file_srno")+"/"+serviceYear[2];
            }
            else
            {
                regnNumber=officeCode+"/"+resultSet.getString("serviceid_requested")+"/"+resultSet.getString("country_code")+"/"+resultSet.getString("service_file_srno")+"/0000";
            }
            tableList.add(new MISTable(regnNumber,resultSet.getString("given_name"),resultSet.getString("surname"),
                                        resultSet.getString("nationality"),resultSet.getString("service_date"),resultSet.getString("service_expiry_date"),
                                        resultSet.getString("passport_number"),resultSet.getString("passport_expiry_date"),resultSet.getString("visa_number"),
                                        resultSet.getString("visa_expiry_date"),resultSet.getString("visa_type"),"")
                                        );
        }
        spl("AFTER: "+run.freeMemory()+"-"+run.totalMemory()+"-"+run.maxMemory());
4

2 回答 2

0

使用分页

您可以加载整个列表并在页面中仅显示一页(假设 10 条记录)(使用缓存更好),或者(更好)仅加载您需要显示的结果集的一部分,限制结果SQL。

加载 12000 条记录并将它们转储到页面中是错误的,它会使服务器、客户端超载,顺便说一句,谁想阅读(或滚动)像建筑物一样的网页 ?

于 2012-12-06T11:02:54.300 回答
0

您可以增加运行应用程序的 java 内存参数。

-Xms256m -Xmx512m -XX:MaxPermSize=128m

你可以为java设置最大内存...

于 2012-12-06T09:05:45.747 回答