垃圾回收概述

什麼是垃圾

可以有不同的理解方式

  1. 俠義且標準的理解要從C++層面理解:沒有任何指針指向的內存,程序無法再訪問到,但是卻佔據了內存。這也是標準的內存溢出的理解。(這種理解可以被看做是C++垃圾的定義)
  2. 更廣義一些,再java層面理解:不在被任何java程序中的引用所指向的內存,是垃圾(這種可以被看做是java的定義,我們java中所說的垃圾就是指這種理解)
  3. 再廣義一些,就是程序後面的運行,根據需求,不再需要被使用的內存,但是這部分內存還是有指針指向的。(如果再程序中需要再度優化,便可以這樣理解,我們可以將只在程序啓動時用到的類或者對象,在程序啓動之後可以理解爲垃圾)。

爲什麼需要GC

如果不及時垃圾收集和清理,垃圾會一直伴隨程序運行而結束。如果不收集垃圾,內存遲早用完。

除了釋放無用的內存,垃圾回收也可以清理內存中的記錄碎片。

隨着應用程序的業務越來越龐大,GC也需要跟上時代。

 

 

垃圾收集不是java語言的半生產物。早在1960年,第一門開始使用內存動態分配和垃圾收集技術在Lisp語言誕生。

垃圾收集三個經典問題:

  • 哪些內存需要回收
  • 什麼時候回收
  • 如何回收

垃圾收集機制是java的招牌能力,極大提高了開發效率。如今垃圾收集幾乎稱爲現代語言的標配。如今垃圾回收機制仍在不斷演進。

 

 

早期垃圾回收

C/C++ 手動delete:

int* p = new int;*p = 5;delete p;

java垃圾回收機制

自動內存管理,無需手動參與內存的分配和回收,降低內存泄漏的風險。

如果沒有垃圾回收機制,就會像c++ 一樣,各種垂懸指針,野指針出現。

擔憂

自動內存管理就像一個黑匣子,過度依賴,嚴重弱化java程序員解決內存溢出時定位和解決問題的能力

 

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