2 :垃圾回收
2.1 :什么是垃圾
在程序運行的過程中,存在被分配了的內(nèi)存塊不再被需要的情況,那么這些內(nèi)存塊對程序來講就是垃圾。
產(chǎn)生了垃圾,自然就需要清理這些垃圾,更為重要的是需要把這些垃圾所占用的內(nèi)存資源,回收回來,加以再利用,從而節(jié)省資源,提高系統(tǒng)性能。
2.2 :垃圾回收
- 不再需要的已分配內(nèi)存應(yīng)取消分配(釋放內(nèi)存)
- 在其它語言中,取消分配是程序員的責(zé)任
- Java 編程語言提供了一種系統(tǒng)級線程以跟蹤內(nèi)存分配
- 垃圾收集
- 可檢查和釋放不再需要的內(nèi)存
- 可自動完成上述工作
- 可在 JVM 實現(xiàn)周期中,產(chǎn)生意想不到的變化
許多編程語言都允許在程序運行時動態(tài)分配內(nèi)存,分配內(nèi)存的過程由于語言句法不同而有所變化,但總是要將指針返回到內(nèi)存的起始位置,當(dāng)分配內(nèi)存不再需要時(內(nèi)存指針已溢出范圍),程序或運行環(huán)境應(yīng)釋放內(nèi)存。
在 C,C++ 或其它語言中,程序員負(fù)責(zé)釋放內(nèi)存。有時,這是一件很困難的事情。因為你并不總是事先知道內(nèi)存應(yīng)在何時被釋放。 當(dāng)在系統(tǒng)中沒有能夠被分配的內(nèi)存時,可導(dǎo)致程序癱瘓,這種程序被稱作具有內(nèi)存漏洞。
Java 編程語言解除了程序員釋放內(nèi)存的責(zé)任。它可提供一種系統(tǒng)級線程以跟蹤每一次內(nèi)存的分配情況。在 Java 虛擬機(jī)的空閑周期,垃圾收集線程檢查并釋放那些可被釋放的內(nèi)存。垃圾收集在 Java 技術(shù)程序的生命周期中自動進(jìn)行,它解除了釋放內(nèi)存的要求,這樣能夠有效避免內(nèi)存漏洞和內(nèi)存泄露(內(nèi)存泄露就是程序運行期間,所占用的內(nèi)存一直往上漲,很容易造成系統(tǒng)資源耗盡而降低性能或崩潰)。
2.3 :提示
(1):在 Java 里面,垃圾回收是一個自動的系統(tǒng)行為,程序員不能控制垃圾回收的功能和行為。比如垃圾回收什么時候開始,什么時候結(jié)束,還有到底哪些資源需要回收等,都是程序員不能控制的。
(2):有一些跟垃圾回收相關(guān)的方法,比如:System.gc() , 記住一點,調(diào)用這些方法,僅僅是在通知垃圾回收程序,至于垃圾回收程序運不運行,什么時候運行,都是無法控制的。
(3):程序員可以通過設(shè)置對象為 null(后面會講到)來標(biāo)示某個對象不再被需要了,這只是表示這個對象可以被回收了,并不是馬上被回收。
![]() | ![]() .. 定價:¥225 優(yōu)惠價:¥213 更多書籍 |
![]() | ![]() .. 定價:¥133 優(yōu)惠價:¥133.0 更多書籍 |