2011-07-08 79 views
1

我正在向Java移植一些C++代碼,它使用了在堆棧中分配對象(它恰好實現UDP連接)的相當常見的C++技巧,它具有一些內部狀態信息(這裏是UDP套接字)。在範圍內,該對象用於做各種事情(發送和接收UDP消息)。好的是,當控制離開這個範圍時,對象的析構函數將被運行,這可以被視爲自動地導致釋放對象的內部資源(在這種情況下,我確保套接字被關閉,以便我可以重用它的地址和我的程序其他部分的端口號)。用於自動資源釋放的java技術? 「提示清理」?

在試圖找出如何做到這一點,我已經瞭解到,Java沒有析構函數,即「敲定」不會做我想做的,等

當然還有一些同樣聰明的技術在Java中完成同樣的事情?我意識到我可以添加一個「close()」方法並嘗試確保它總是在適當的時候被調用,並且我進一步認識到這可能會比使用C++更容易且更可靠地在Java中完成。但是我真的必須走那條路嗎?

+0

是的,如果我不得不手動完成它,我懷疑'try {} finally {}'將是一個乾淨的方法來做到這一點。我有點驚訝,儘管看起來我可能會被迫在需要的地方手動編碼。 –

回答

-1

在SO上進行簡單搜索就會發現許多與同一主題有關的問題和答案。我冒昧地複製了一些更加多汁的文章並在這裏發表。

Is there C++ destructor equivalent in Java?

Is there a destructor for Java?

Why does Java not have any destructor like C++?

What is the best way to clean up an Object in Java?

How do you write a deconstructor in Java?

我是一個行走的搜索引擎。

+0

謝謝;我已經找到並閱讀了前四篇文章,同時他們給了我一些關於java的有用背景信息,但他們並不是我所需要的。 –

1

在代碼中有一個finally {}塊,用於關閉連接並將其置空。這將使其有資格進行垃圾回收。這就是你所能做的。

0

Java會自動清除everythibg而無需引用以及所謂的「孤島」,這是通過自動垃圾收集完成的。您可以建議JVM在任何時間收集,但不能保證它符合要求。唯一的擔心是,在JVM耗盡內存之前,它會嘗試清理所有可能的內容。