萬盛學電腦網

 萬盛學電腦網 >> 網頁制作 >> Html5 >> 垃圾回收器詳解

垃圾回收器詳解

下面是有關垃圾回收器詳解

幾乎所有目前流行的垃圾回收器,均傾向於將使用者當作一個傻瓜,期望能夠讓使用者在完全不理解內存管理的情況下,可以很好的使用它。應該說這它們基本上都也做到了(雖然使用者有時也有這樣那樣的煩惱,但總體來說情況確實得到了很大程度的改善)。然而這一設計理念我並不十分認同。

首先,可以在一個提供垃圾回收器的語言中自如的工作,沒有被垃圾回收器所困擾,本身已經是很了不起的事情,他們絕對是非常聰明的人,而不是傻瓜。他們理解垃圾回收器的工作原理,選擇它並且讓它為他們工作,只是因為還有更重要的事情等著他們去做。必要的時候,他們需要有辦法控制垃圾回收器,使它按照他們的意願工作。因此,垃圾回收器的設計要點在於把使用者從煩瑣的內存管理中解脫出來,使得他們可以將全部精力投入到本身的業務邏輯上,而不是讓垃圾回收器看起來更傻瓜式。

其次,使用一個全自動的垃圾回收器,在內存回收的時機不明確的情況下,垃圾回收器的工作過程有很大的不確定性,這給使用者帶來煩惱。例如C#在調用非管制代碼(如調用Win32 api)時,這些問題變得突出。一個不小心,就有可能出現Win32 api還在使用一塊內存,而垃圾回收器已經把它回收了的情形。在小心翼翼的避開這些陷阱時,這種感覺其實與C/C++程序員遺憾語言沒有垃圾回收器的感覺有點類似。

因此,最理想的情況,是內存管理器提供垃圾回收的能力,但是它也只是提供這個能力而已,至於什麼時候進行垃圾回收,完全可以由用戶自己控制。另外,用戶也可以強制釋放一塊內存,而不是完全被動的等待垃圾回收過程決策何時回收該內存。對於客戶來說,他有權掌控一切,只是如果萬一他確實疏忽了,垃圾回收器能夠為他護航。

將垃圾回收器引入C++,有沒有這種可能呢?我認為,如果我們試圖提供一個全自動的垃圾回收器,這相當困難。我們看到以Microsoft之能,仍然無法把這件事做好[2]。或許,我們需要改變一下觀念:一個半自動的垃圾回收器,也許就可能可以和C++融洽相處了呢?

以上就是我們給大家介紹的垃圾回收器詳解,希望大家繼續關注本網站。

copyright © 萬盛學電腦網 all rights reserved