這是我參與更文挑戰的第2天,活動詳情查看: 更文挑戰java
咱們爲何要了解垃圾回收機制呢?程序員
若是你已經學過C/C++等傳統的編程語言,你會知道回收已經分配的內存是如何的痛苦,由於你不知道 何時須要回收內存。
算法
並且,更痛苦的是,若是你不及時回收內存,就會致使系統的運行速度降低,甚至致使系統癱瘓,這種現象稱爲內存泄漏。
編程
這類傳統的編程語言的顯示垃圾回收機制主要有一下兩個缺點:
1.程序忘記及時回收垃圾形成內存泄漏,使系統的性能降低。
2.程序錯誤地回收系統核心內存,致使系統崩潰。
複製代碼
java語言的垃圾回收機制的一個顯著的優勢就是不須要程序員手動進行垃圾回收,JAVA虛擬機會自動幫你進行垃圾回收!(是否是很爽)markdown
說了這麼多那什麼是垃圾回收呢?編程語言
垃圾回收是一種動態的存儲管理技術,它自動釋放再也不被程序引用的對象,按照特定的垃圾回收算法來實現內存資源的自動回收功能。
post
事實上,垃圾回收除了釋放再也不使用的對象,也會整理碎片內存。因爲建立對象和垃圾回收器釋放丟棄對象所佔用的內空間外,內存會出現碎片,而java的垃圾回收機制會把這些碎片進行整理到堆的另外一側,將整理出來的內存分配給新的對象。性能
可是java垃圾回收機制也有缺點,它會影響系統的性能,由於java虛擬機必需要跟蹤程序中有用的對象來,才能夠肯定對象何時是無用的,而後進行回收。spa
最後一點是java程序員不能強制進行垃圾回收,你能夠將對象的引用設置爲null,暗示java虛擬機這是個無用的對象,還能夠調用System.gc()來建議系統進行垃圾回收,可是系統何時進行垃圾回收就不是java程序員能控制的了(這是考點哦!)code
因此編寫java的一個原則就是:當你再也不須要這個對象時就不要再保持這個對象的引用,不然就會致使內存愈來愈少,形成系統的性能愈來愈低。
注:本文的部分定義來自於李剛老師的《瘋狂java講義》
複製代碼
以上內容若有不對,歡迎你們評論指正。