2011-07-08 8 views
1

私はいくつかの内部状態情報(ここではUDPソケット)を持つオブジェクトをスタック上に割り当てる(これはUDP接続を実装する)という非常に一般的なC++のトリックを使用するいくつかのC++コードに移植します。スコープ内でオブジェクトはさまざまなこと(UDPメッセージの送受信)に使用されます。いいことは、コントロールがこのスコープを離れると、オブジェクトのデストラクタが実行され、これが自動的にオブジェクトの内部リソースを解放することになります(この場合、ソケットを閉じて、そのアドレスを再利用できることを確認します私のプログラムの他の部分のポート番号など)。私はJavaが「確定」は私がやりたいことではないだろうというデストラクタを、持っていないことを学んできたこれを行う方法を把握しようで自動リソース解放のためのJavaテクニック? "迅速なクリーンアップ"?

など

確かにいくつかの同様の巧妙な技術がありますJavaで同じことを達成していますか?私はclose()メソッドを追加して、いつも適切なタイミングで呼び出されるようにすることを実感しています。そして、これはおそらくC++よりもJavaでもっと簡単かつ確実に行われることに気付きました。しかし、私は本当にその道を行く必要がありますか?

+0

はい、手動で行う必要がある場合は、try {} finally {}がそれを行うためのきれいな方法であると思われます。私はちょっと驚きましたが、私はそれが必要などこでも手作業でコードを書かなければならないようです。 –

答えて

-1

ここで簡単に検索すると、同じトピックに関する多数の質問と回答が明らかになりました。私はジューシーなものをコピーしてここに掲示する自由を取った。

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

ありがとうございます。私はすでにそれらの最初の4つを見つけて読んでいましたが、彼らは私に必要なものではなかったJavaに関する有用な背景情報を私にくれました。 –

2

私はJava 7があなたが探しているかもしれないAutomatic Resource Block Managementをサポートしていると信じています。

+0

はい、それは私が探している機能です。私はこれが今日、私は手動でこれをコーディングしなければならないことを示唆していると少し驚いていますか? –

1

あなたのコードで、接続を閉じてnullをとるfinally {}ブロックがあります。これにより、ガベージコレクションの対象となります。それはすべてあなたができることです。

0

Javaは、自動的に参照を除いてeverythibgをクリーンアップし、いわゆる "島"を自動的にガベージコレクションで処理します。任意の拠点で収集するようにJVMを提案することはできますが、それが準拠するという保証はありません。 JVMがメモリ不足になる前に、可能な限りすべてをクリーンアップしようとしているのは唯一の保証人です。

関連する問題