2015-06-24 66 views
0

由於Java編程有一個構造函數,它在新對象實例化時運行代碼,所以我很好奇是否有什麼東西可以解決這個問題。創建新對象佔用內存,那麼Java中是否有一種機制可以擦除或覆蓋未使用的內存?在java中有一個析構函數來對付構造函數嗎?

如果Java中存在析構函數,那麼它在編程語言(如C)中與其他內存管理系統有何區別?

+3

都能跟得上。但也有一些是被稱爲'垃圾Collector'這需要的是照顧自動... – Codebender

+0

有「敲定」,但它實際上不是一個析構函數。這裏是一篇關於Java清理的文章:http://www.javaworld.com/article/2076697/core-java/object-finalization-and-cleanup.html – Fildor

+0

你可以使用java.lang.ref.Reference來以某種方式操縱對象可能會被GCed。 –

回答

1

您可以覆蓋java.lang.Object

定義的finalize方法也不能保證您finalize方法是在你的程序運行曾經把!看看JavaDoc!因此在大多數情況下,重寫'finalize'並不是一個好主意。

,如果你需要清理的資源,你可以使用一個「嘗試/終於」語句,或者如果你使用一些框架像「春秋」由框架在java中提供(例如@PreDestroy

順便說一句:一些掛鉤你不能主動擦除或覆蓋內存區域,這是由垃圾收集器完成的。

0

在java中用於擦除存儲器,其與具有不任何引用(其稱爲垃圾)中的代碼有一個稱爲垃圾callector機構對象使用。 JVM在需要時調用它,但您可以通過System.gc()調用它。

至於構造計數器(這是一些代碼,執行當對象實例化)存在最終確定其執行時,其目的在於垃圾收集方法。

您可以覆蓋它(它在Object類中定義)。

相關問題