2011-07-20 13 views
9

オブジェクトの現在のインスタンスを破壊する解決策はありますか?オブジェクト自体を破壊する方法

class KillMe { 
    .... 
    public void destroy() { 
     this.getObject = null //this is only for demonstrate my idea 
    } 

    .... 
} 
+3

なぜあなたはしたいですか?とにかく、Javaオブジェクトはガベージコレクタ以外のものでは "破棄"することはできません。 – skaffman

+0

NULLにしたいオブジェクトはセッションスコープでBEANです。私はまた、オブジェクトの現在のインスタンスでそれをやりたい – Smolda

+0

これが春質問の場合は、それを1つの句とし、達成しようとしていることを正しく説明します。 – skaffman

答えて

14

Javaオブジェクトが住んもはやそれらへの参照がなくなるまで:

私はのようなものを探しています。オブジェクトはそれ自体に参照がいくつあるかを判断することができないので、オブジェクトは "それ自身を破壊する"ことはできません。

0

あなたのしたいことの例は、オブジェクトがどのように/破壊/除去されたかを理解していないことを示しています。

class KillMe { 
    .... 
    public void destroy() { 
     this.getObject = null //this is only for demonstrate my idea 
    } 
} 

あなたがそこに持っているコール(this.getObject)は、現在のオブジェクトへの参照を取得し、その後はnull参照(すなわち、もはや現在のオブジェクトを指していることを設定していない。これは、オブジェクトに何もしません他の変数をコード内のオブジェクトを指すように変更することはありません。

変数を値(オブジェクト)にポイントします。値は、ガベージコレクション/破棄されずに保持されます。値へのすべての変数参照を削除するには、それを指すすべての変数を見つけて、別のものを指し示す必要があります(例:null)。 (怖い反射やバイトコードの魔法では不可能なものはないと思うが)

別の考え方では、値/オブジェクト自体を破壊することができたら、どうなるだろう現在それを指している他のすべての変数は?彼らは今解放されたメモリを指しているので、いくつかのJavaバージョンのセグメンテーションが発生しますか?

4

オブジェクトには参照へのアクセス権がないため、オブジェクトをnullなどに設定する方法はありません。オブジェクトは、ガベージコレクタが周囲に来て、参照されていないすべてのオブジェクトを消去するときにのみ、「破棄」することができます。

言われていること

、これを試してみてください。

public void destroy() { 
    System.exit(0); 
} 
+0

[1つはSystem.exit(0)を呼び出すべきではないと思いますか?(http://stackoverflow.com/a/30142476/852795) –

1

いいえ、オブジェクトが自殺することはできません。それ自体の参照は参考にすぎません。

オブジェクト自体を「クリア」するには、すべてのインスタンス変数をクリアするだけです。

オブジェクト自体を「クリア」するには、変数をnullに設定します。

関連する問題