2016-09-09 7 views
-4

Javaでは、変数を手動で削除することについてはガベージコレクションで処理できるので、通常は心配する必要はありません。しかし、状況によっては、メモリーリークを防ぐためにガベージコレクションが有効になる前にオブジェクトを解放する必要があります。オブジェクトを解放するには、参照をnullに設定するだけです。プリミティブ変数を手動で解放するにはどうすればよいですか?

私の質問は、手動でプリミティブ変数を手動で解放する方法です。プリミティブ変数を手動で解放する方法がない場合は、手動で参照変数を解放するメカニズムがあるので、なぜですか?

+3

問題はどんな意味がないので、誰もが問題を論じていません。 – Jack

+0

なぜ手動で参照変数を解放するのが理にかなっていますが、プリミティブ変数を手動で解放するのは意味がありません。 –

答えて

2

この質問はナンセンスです。 nullを設定することによって何も削除されないことは事実ではありません。プリミティブ型は「削除」できません。ローカル変数のメモリ領域は、スコープ内にある限り割り当てられます。

+0

申し訳ありませんが、私が使った言葉です。私は「無料」を意味し、「削除」は意味しません。 –

+0

私が興味があるのは、プリミティブ変数を手動で解放する方法です。手動で参照変数を解放することができるので、プリミティブ変数を手動で解放する方法がないのはなぜですか。 –

+0

@ChaoZhang:実際には変数を手動で解放することはできません。参照にnullを代入することはできますが、intに0を代入することはできますが、どちらもメモリに残ります。 –

2

プリミティブ型(int、float、double、char ...など)をnullに設定することはできません。試してみると、NullPointerExceptionが届きます。

Javaにはdeleteという概念はありません。 Javaは内部参照カウンタを介してすべてのメモリ管理を自動的に処理します。このプロセスは、通常、ガベージコレクタと呼ばれます。

オブジェクトが有効範囲外になると、オブジェクトはガベージコレクションで使用できるようになり、そのメモリはいつでも再利用できます。 Javaでメモリーを手動で割り振ることを心配する必要はありません。プリミティブはガベージコレクタによって直接解放されませんが( 'are java primitives garbage collected'を参照)、それらを削除することについてはまだ心配する必要はありません。

(ガベージコレクションのテーマは明らかに非常に深く、それよりも複雑ですが、私はこの記事が公正100,000フィートの要約であると思います。)

+0

実際に、ガベージコレクションは変数ではなくオブジェクトに関するものです。 –

+0

@AlKepp私は実際にそれを知らなかった!私は私の答えを修正します。 – nasukkin

+0

オブジェクトは実行時エンティティであり、スコープはコンパイル時の概念です。スコープはオブジェクトには適用されないため、オブジェクトはスコープの最後に収集されません。スコープは、ソースコードで使用される名前に適用されます。実行時に実行可能なプログラムの実行がオブジェクトにアクセスできないと判断した場合、オブジェクトが収集されます。 –

関連する問題