Ⅰ 北大青鳥java培訓:Java垃圾回收的優點和原理
Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。
由於有個垃圾回收機制,java課程http://www.kmbdqn.cn/發現Java中的對象不再有「作用域」的概念,只有對象的引用才有「作用域」。
垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。
垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清除和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。
回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
Ⅱ 對於垃圾對象程序員可以精確控制器回收時間
Java不需要程序員直接控制回收內存(不同於C和C++),其內存分配和回收都是由JRE在後台自動進行的。JRE提供一個後台線程進行檢測和控制,一般在CPU空閑或內存不足時自動進行垃圾回收,自動釋放不再被程序引用的對象,按照特定的垃圾回收演算法。但程序員無法精確控制垃圾回收的時間和順序等。
優點:提高編程效率;保護程序完整性。
缺點:開銷影響性能。虛擬機必須跟蹤程序中有用的對象,才能確定哪些是無用的對象。
特點:
1、垃圾回收只能回收內存資源,對其他物理資源,比如資料庫連接,磁碟I/O等無能為力。
2、為了更快讓垃圾回收,可以對無用對象引用變數設為null,暗示虛擬機可回收。
3、垃圾回收不可預知。可能定時/空閑/極限都有可能。可以System.gc方法建議回收,但仍有不確定性。除非finalize方法。
更新:16-3-22
建議回收:System.gc()或Runtime.getRuntime.gc()
通知系統進行垃圾回收,但系統是否進行垃圾回收依然不確定,但大部分時候,總會有一些效果,不會說程序的建議完全置之不理。
當系統要進行垃圾回收時,會調用默認的finalize()方法。但何時被調用時不確定的,不一定會執行。另外,任何類都可以重寫finalize()方法,所以如果裡麵包含試圖將可恢復對象重新變成可達狀態的功能時會出現對象重新變成可達狀態。
如果需要強制執行finalize()方法,在執行gc方法後,加上System.runFinalization()或Runtime.getRuntime.runFinalization()即可。
另外一些概念:
強引用:最常見,處於可達狀態(包括常量池),不可能被回收。
軟引用:SoftReference可能被回收。當系統內存足夠時,不會被回收,只有當不足時才可能回收它。
弱引用:WeakReference不論內存是否足夠,只要等到垃圾回收機制運行,總會被回收。
虛引用:類似於沒有引用,不能單獨使用,主要用於跟蹤對象被垃圾回收的狀態。
java
垃圾回收
點贊文章給優秀博主打call~
kef音響
精選推薦
廣告
Ⅲ c/c++ 堆區程序員分配的內存,不釋放,在程序結束時,系統一定會回收內存嗎
程序結束是一定回收的,可以放心。內存溢出是如果你執行很久或者很大的程序,一直在申請不釋放。或者比如說一個大項目,你寫了一個模塊,申請了一塊內存不釋放,別人調用你的模塊調用了幾千幾萬次,內存就溢出了。不過任何操作系統,程序結束了是肯定會回收的。
Ⅳ java的內存回收既可以由系統完成也可以由程序員完成嗎
程序員對於GC只有建議權沒有執行權,所以java的內存回收只能由系統完成。
Ⅳ java中的垃圾回收是什麼意思
垃圾回收就是gc(gabage collection)。
java比c++的優點就是多了垃圾回收機制,程序員不用去關心垃圾的回收,系統會自動調用去回收內存。
一般我們想回收的時候只需要調用system.gc方法就可以了。系統會自己去調用destroy方法和其他的回收方法釋放內存,節省內存空間。
Ⅵ java的內存回收機制是什麼呢程序員能自己手動釋放內存么能指定內存釋放時間么
就是說java虛擬機會自動釋放一些不必要的內存空間,比如一個引用,不在用到,一定時間後自己就釋放了比如
User user;
定義了一個自定義的引用,下文不再用時,不必自己考慮刪除
C++則不然,
int *p
要手動
delete p