1. 程式人生 > >Hibernate在處理資料量比較大的時候記憶體不釋放的解決方案

Hibernate在處理資料量比較大的時候記憶體不釋放的解決方案

                    隨著資訊化的推進,系統的依賴性也變的越來越強,所以各種資料不斷積累,資料開發率並不高,所以資料還不能準確高效的使用,這個時候我們就需要將資料匯出到Excel然後通過手工的方式進行處理,但是當講資料庫的資料查詢出來的時候,發現JVM的記憶體持續升高,知道記憶體溢位,一開始我以為是list太大的原因,我將list固定到1w,然後不斷迴圈去資料庫取資料,發現問題依舊存在,沒有任何改變,所以說明問題的出處,不在LIST,於是繼續尋找,開始進行無用程式碼隔離,發現問題出現在了hibernate,仔細測試,找到了記憶體持續增長的地方是Query.list()方法,為了提高效率,儘可能多的佔用記憶體,最終導致記憶體資料洩露,所以,我使用了最直接的方法,將list.clear()集合清空,發現沒有作用,這讓我很不可理解,這個返回結果直接返回一個引用,並不是真正的list,此時已經差不多半天時間過去了,問題依然沒有解決,想想以前資料量小的時候,很多問題都沒有出現,於是調整心態,繼續檢視API,發現Session情況可以解決問題,於是趕緊試試看,果然,記憶體在一定範圍內穩定下來了,而且資料匯出時間和效率明顯提高,excel2007在5分鐘匯出100W資料到1個sheet表很輕鬆,問題解決了,但是依然感到很不安,原來我對hibernate知識只是瞭解了一個表面,很多用法還不是很理解,實現原理,實現方式還沒有研究過,所以,要走的路還很長,要學的知道還很多,重新拾起自己的激情,開始努力學習吧