java內存泄漏主要分成兩個方面:
(1)堆中申請的空間沒有被釋放
(2)對象已不在被使用,但是仍然存在在內存當中
以下集中情況可能會導致內存泄漏
(1)靜態集合的使用hashmap和vector,靜態容器的生命周期與程序一致,那么容器在程序結束之前將不能被釋放,從而造成內存泄漏;
比如:
vector v=new vector()for(int i=0;i<10;i++){object o=new object();v.add(o);}
o對象已經不需要用的,但是卻不能被回收
(2)各種連接問題:數據庫連接和io連接,需要調用close方法來釋放連接,比如connection、statement、resultset
(3)監聽器的使用
(4)變量的不合理的作用域
1)一個變量定義的作用范圍大于其使用的范圍:
msgd的使用范圍應該在方面里面
class server{PRivate string msg;public void recieveMsg() { readMsg(); //獲得msg savaDB(); //輸入db }}
2)沒有及時把對象設置為null
或者使用之后將msg設置為null
(5)單例模式的使用
class BigClass{.....}classSingleton{private BigClass bc;................}//bc對象不能被回收
垃圾回收算法有
(1)引用計數算法
(2)追蹤回收算法,引用圖
(3)壓縮回收算法
(4)復制回收算法
(5)按代回收算法
新聞熱點
疑難解答