[英]Trying to populate a list from resultset size is around 12000 rows on executing action again for about 4 times,jvm gets out of heap memory
我正在嘗試用大約12000條記錄填充數據庫類型為tableList的arraylist,然后使用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());
您可以增加用於運行應用程序的Java內存參數。
-Xms256m -Xmx512m -XX:MaxPermSize=128m
您可以為Java設置最大內存...
使用分頁 !
您可以加載整個List並僅在該頁面中顯示一頁(比如說10條記錄)(更好的是使用緩存),或者(更好的是)僅加載您需要顯示的結果集的一部分,從而限制結果SQL。
加載12000條記錄並將其轉儲到頁面中是錯誤的 ,它會使服務器,客戶端以及通過誰想要讀取(或滾動)像建築物一樣高的網頁的方式過載?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.