1. 程式人生 > >hibernate的session不自動關導致記憶體溢位

hibernate的session不自動關導致記憶體溢位

hibernate有一個一級快取,強制使用 。session會在你使用查詢後快取起來,在不同的session,是分離資料不共享的。如果你是使用了FlushMode是commit,大量的查詢有可能會導致資料堆積在session,造成記憶體溢位。

之前在做一個畢業設計的時候,從資料庫讀取大量的心電資料(當然是不合理的設計啦),畫圖幾次就出現了tomcat崩潰,記憶體溢位了。

很明顯是記憶體堆積了大量資料咯,位移可疑的就是那些心電資料了。起初以為是圖片問題。當我註釋了圖片的,還是同樣問題。最後想到了hibernate的快取問題。最後session.clear().問題解決了

關於OpensessionInView

現在有個叫OpensessionInView的玩意。為了避免離開service層代理類查詢資料會出錯、關閉session用的

實現Open session in view的手段不同: 
在servlet中用過濾器實現
在struts中用攔截器實現

在spring中使用AOP實現

他是在當前請求執行緒繫結一個session。

在配置了service提交事務的工程中,service結束後,session資料會提交到資料庫。此時session還有代理類,仍然可以查詢資料

你去改內容就不行咯,譬如user.setName.

但是代理類集合可以去刪除,可以update。。。。