java的finalize()方法

來源:互聯網
上載者:User

此時,大家可能已相信了自己應該將finalize()作為一種常規用途的清除方法使用。它有什麼好處呢?
要記住的第三個重點是:

垃圾收集只跟記憶體有關!

也就是說,垃圾收集器存在的唯一原因是為了回收程式不再使用的記憶體。所以對於與垃圾收集有關的任何活動來說,其中最值得注意的是finalize()方法,它們也必須同記憶體以及它的回收有關。

但這是否意味著假如對象包含了其他對象,finalize()就應該明確釋放那些對象呢?答案是否定的——垃圾收集器會負責釋放所有對象佔據的記憶體,無論這些對象是如何建立的。它將對finalize()的需求限制到特殊的情況。在這種情況下,我們的對象可採用與建立對象時不同的方法分配一些儲存空間。但大家或許會注意到,Java中的所有東西都是對象,所以這到底是怎麼一回事呢?

之所以要使用finalize(),看起來似乎是由於有時需要採取與Java的普通方法不同的一種方法,通過分配記憶體來做一些具有C風格的事情。這主要可以通過“固有方法”來進行,它是從Java裡調用非Java方法的一種方式(固有方法的問題在附錄A討論)。C和C++是目前唯一獲得固有方法支援的語言。但由於它們能調用通過其他語言編寫的子程式,所以能夠有效地調用任何東西。在非Java代碼內部,也許能調用C的malloc()系列函數,用它分配儲存空間。而且除非調用了free(),否則儲存空間不會得到釋放,從而造成記憶體“漏洞”的出現。當然,free()是一個C和C++函數,所以我們需要在finalize()內部的一個固有方法中調用它。

讀完上述文字後,大家或許已弄清楚了自己不必過多地使用finalize()。這個思想是正確的;它並不是進行普通清除工作的理想場所。那麼,普通的清除工作應在何處進行呢?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.