程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 優化-java代碼中有個循環,數據量一大直接網頁報500錯誤

優化-java代碼中有個循環,數據量一大直接網頁報500錯誤

編輯:編程解疑
java代碼中有個循環,數據量一大直接網頁報500錯誤

圖片說明
求大神幫忙優化一下,10000數據還可以,但是數據一多網頁就崩潰了,就是代碼中的row++,加上去就不行了圖片說明

最佳回答:


結果是內存益處了
那就是你的程序太耗費資源了。

那個獲取page的方法:
1--Page對象村的東西太多了,很多何你寫入單元格的數據沒關系,
既然這塊邏輯是大數據量的,為什麼不拆分針對這塊邏輯的結構呢?
使用Page造成了很大的內存浪費
在循環外部定義這個結構
List list = null

2--將方法的參數精簡下
因為你一頁的數據量10000時固定的,所以只要知道這個當前的count就夠了
為什麼不把方法簽名寫成下面的呢?
arrearA..Service.getArrearInfoByRow(row,"list,arreAmount",SqlO....)
只要四個參數就夠了。
至於其他的參數對於這個xxxService來說,在生成這個Service的時候這個10000是知道的。
map,你第一行程序就有用map作為計算,應該在裡面計算的同時保存住map的信息。

 方法參數越多,方法調用的成本越高,尤其是那些存有大量數據的對象作為方法參數時不可取的。

至於為什麼要改成List呢?
首先:因為你那個Page對象裡買的東西太多,很多何這塊邏輯每關系,所以不要為了易於使用
就全部封裝在一起,這樣的對象占用資源厲害啊

其次每次調用一個方法都返回一個Page對象也不合適,返回肯定是new了,對象的空間沒有復用
與其你返回一個Page,還不如在參數中定義一個page,這樣這個方法不new了,每次都利用參數中的page對象的值。
你只要在循環開始給page來一個初始化就可以了
但是page仍然占用資源,使用這個List作為參數
提示:將大數據對象放到函數體內,函數執行完了會自動釋放空間的。函數的返回采用輕便的數據結構存儲

還有就是 list可以進行clear()操作。不用每次都new一個list

最後就是使用迭代器來進行循環

總結:
優化的目的就是:
1--避免大數據量的對象傳入函數內部
2--不要動不動就返回一個對象,尤其是在多次循環中,這就是多次的new
不如將返回的對象傳入參數中,使用完了之後還可以繼續復用這個對象的內存

3--結合2,可以給對象定義一個clear操作,執行完成之後給對象的存儲減負
這樣繼續使用的時候效率更高。

希望對你有幫助

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved