java Collection 造成Out of memory?

除了java.sql.ResultSet以外還有另一個物件組也很容易造成VM把記憶體佔用而不釋放出來,

Collection,包含List、ArrayList、Map、Stack、Vector…等等等,在使用這些物件時,

一般狀況下不使用時,VM應該會自動回收,不過經過實驗,當Collection內含複雜內容,

像Map裡包含ArrayList,而ArrayList又包含Stack….等等,當不在使用Map時,其內容並不會被釋放,

所以需要在不使用Collection把內容給clear掉,可以呼叫clear()事件,Collection所佔用的記憶體其實並沒有很大,

所以如果小程式並不會有感覺,可是一放到流量大的Web Server,如tomcat時,很容易就被塞爆記憶體,

形成out of memory,有out of memory時,加上-Xmx數字m,並無法解決問題時,可以檢查看看Collection的使用。

ps.StringBuffer也會有此種狀況產生,故在使用完StringBuffer後記得要利用setLength(1);讓記憶體放出。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*