首先,我們看一個雇員信息查詢系統(tǒng)的實(shí)例。我們將使用一個Java語言實(shí)現(xiàn)的雇員信息查詢系統(tǒng)查詢存儲在磁盤文件或者數(shù)據(jù)庫中的雇員人事檔案信息。作為一個用戶,我們完全有可能需要回頭去查看幾分鐘甚至幾秒鐘前查看過的雇員檔案信息(同樣,我們在瀏覽WEB頁面的時候也經(jīng)常會使用“后退”按鈕)。這時我們通常會有兩種程序?qū)崿F(xiàn)方式:一種是把過去查看過的雇員信息保存在內(nèi)存中,每一個存儲了雇員檔案信息的Java對象的生命周期貫穿整個應(yīng)用程序始終;另一種是當(dāng)用戶開始查看其他雇員的檔案信息的時候,把存儲了當(dāng)前所查看的雇員檔案信息的Java對象結(jié)束引用,使得垃圾收集線程可以回收其所占用的內(nèi)存空間,當(dāng)用戶再次需要瀏覽該雇員的檔案信息的時候,重新構(gòu)建該雇員的信息。很顯然,第一種實(shí)現(xiàn)方法將造成大量的內(nèi)存浪費(fèi),而第二種實(shí)現(xiàn)的缺陷在于即使垃圾收集線程還沒有進(jìn)行垃圾收集,包含雇員檔案信息的對象仍然完好地保存在內(nèi)存中,應(yīng)用程序也要重新構(gòu)建一個對象。我們知道,訪問磁盤文件、訪問網(wǎng)絡(luò)資源、查詢數(shù)據(jù)庫等操作都是影響應(yīng)用程序執(zhí)行性能的重要因素,如果能重新獲取那些尚未被回收的Java對象的引用,必將減少不必要的訪問,大大提高程序的運(yùn)行速度。 |
|