java內存管理

首先我們應該知道,java不要求程序員顯示的分配內存和釋放內存,這樣可以避免很多潛在問題。java在創建對象時會自動分配內存,

並當該對象的引用不存在時釋放這塊內存。

而所謂的內存管理就是對象的分配和釋放問題。在java中,程序員通過new關鍵字爲對象申請內存空間(不包括基本類型),所有的對象的是

在堆中的。而對象的釋放是右GC決定的。可以看出java內存分配是由程序完成的,而釋放則是由GC完成的,這樣雖然簡化了程序員的工作,

但是加重了JVM的工作。這就是大家感覺java程序運行速度比較慢的原因之一。因爲GC爲了能夠正確釋放內存,必須要監控每一個對象的運行

狀態。

在內存管理中,最應該注意的就是內存泄露。在java中內存泄露就是存在一些被分配的對象,滿足下面兩個特點

1)對象時可達的,就是說在有向圖中,存在通路可以與其相連

2)對象時無用的,即程序以後不會再使用這些對象

一旦滿足這兩個條件,這些對象就可以判定爲java中的內存泄露,這些對象不會被回收,但是他們卻佔用着內存。

下面寫一段內存泄露代碼

Vector v = new Vector(10);

for(int i=1;i<500;i++){

Object o = new Object();

v.add(o);

o = null;

}

從上面代碼可以看出來,循環建立的對象添加到vector中,後面雖然把所有o賦值爲null,但是因爲v引用了這些對象,所以Object對象沒有被釋放。

所以此時出現內存泄露。最簡單的解決辦法就是講Vector對象設置爲null。

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