1、Java的垃圾回收機制———解疑程序員
Java的垃圾回收機制是Java虛擬機提供的能力,用於在空閒時間以不定時的方式動態回收無任何引用的對象佔據的內存空間。web
須要注意的是:垃圾回收回收的是無任何引用的對象佔據的內存空間而不是對象自己,不少人回答的含義是回收對象,實際上這是不正確的。spa
System.gc()線程
Runtime.getRuntime().gc() orm
上面的方法調用時用於顯式通知JVM能夠進行一次垃圾回收,但真正垃圾回收機制具體在什麼時間點開始發生動做這一樣是不可預料的,這和搶佔式的線程在發生做用時的原理同樣。對象
程序員只能經過上面的方法建議JVM回收垃圾,可是JVM是否回收,一樣是不可預料的。內存
2、Java垃圾回收機制---回收的堆內存作用域
垃圾回收機制有不少種,包括:分代複製垃圾回收、標記垃圾回收、增量垃圾回收等方式。get
全部對象的回收都是由Java的JVM虛擬機經過垃圾回收機制完成的,回收的是堆(Heap)內存。GC爲了可以正確釋放對象,會監控每一個對象的運行情況,對他們的申請、引用、被引用、賦值等情況進行監控,Java會使用有向圖的方法進行管理內存,實時監控對象是否能夠達到,若是不可到達,則就將其回收,這樣也能夠消除引用循環的問題。在Java語言中,判斷一個內存空間是否符合垃圾收集標準有兩個:一個是給對象賦予了空值null,如下再沒有調用過,另外一個是給對象賦予了新值,這樣從新分配了內存空間。虛擬機
3、Java內存泄露(通常咱們常說的內存泄漏是指堆內存的泄漏)
內存泄露的定義: 當某些對象再也不被應用程序所使用,可是因爲仍然被引用而致使垃圾收集器不能回收。
Java可能出現內存泄露。
下面給出了一個簡單的內存泄露的例子。
Object obj1=new Object();
Object obj2=obj1;
obj1=null; //此時,建立的Object對象並無被釋放,由於變量obj2引用這個對象。
obj2 = null; // 這樣才能回收
4、棧內存的釋放
當在一段代碼塊定義一個變量時,Java在棧中爲這個變量分配內存空間,當該變量退出其做用域後,Java會自動釋放掉爲該變量所分配的內存空間,該內存空間能夠當即被另做他用。