Java 內存泄露淺析

 

Java使用有向圖的方式進行內存管理,

優點:可以消除引用循環的問題,管理內存精度高

缺點:效率低下(相比引用計數)。

什麼是Java中內存泄漏:

在Java中,內存泄漏就是存在一些被分配的對象,這些對象有下面兩個特點:

<一>:這些對象是可達的

<二>:這些對象是無用的

這些對象不會被GC所回收,然而它卻佔用內存。

 

Java內存泄漏的方面:

靜態集合變量:HashMap, Hashtable,等,由於這些集合不斷調用add()方法增加一些臨時對象,而沒有及時調用remove()方法移除臨時對象的引用,

導致一些無用的臨時對象不能被JVM回收,造成內存泄漏

單例對象:如果該對象持有另外一個對象A的引用,那麼對象A不會被回收,當對象A是一個比較大的對象時,會造成嚴重的內存泄漏。

Web容器中的request, session, application對象:對於request,session,如果併發量較大,而每個request, session都持有較多臨時對象的引用,

會導致服務器內存溢出。對於application對象和Web容器中一些具有很長生命週期的對象,長期持有一些臨時對象,也會造成內存泄漏。

JDBC操作出現異常,沒有及時關閉連接(Connection)對象,會導致內存泄漏。

文件流操作出現異常,沒有及時關閉文件流(InputStream)對象,導致內存泄漏。

Http請求超時設置:如果超時設置的時間是無限長,那麼當一個Http請求的線程被卡住時,這個線程所佔有的資源會永遠不會釋放,導致內存泄漏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章