1

クラスのC# 3.5では、いくつかの変数を持ついくつかの静的メソッドがあります。クラスを初期化しなくても、静的メソッドが最初に初期化されます。

では、静的メソッド内の変数も最初に初期化され、ガベージ コレクションではありませんか?

知りたい - メソッドを呼び出さなくても、またはメソッドを一度呼び出してメソッドが終了しても、そのようなメソッド変数にメモリが割り当てられますか? または、メソッドが呼び出されて終了するたびに、メソッド内の変数がガベージ コレクションされますか?

4

2 に答える 2

8

静的メソッドが最初に初期化されます

いいえ、静的メソッド自体は「初期化」されていません。それらは(標準実装では)最初の使用時に JITted されますが、それはメモリ割り当てとは無関係です。

では、静的メソッド内の変数も最初に初期化され、ガベージ コレクションではありませんか?

メソッド変数は呼び出しごと(スタック上) であり、グローバルではありません。メソッドを入力すると、スタック領域が割り当てられます。参照型の変数がある場合、メソッドが終了するとスコープ外になります (これらの変数が、メソッドよりも長く存続するデリゲートまたはラムダ式に「キャプチャ」されていないと仮定します)。

オブジェクトのみがガベージ コレクションされます。変数ではありません。参照型変数は、オブジェクトへの参照を保持するだけです。

于 2012-05-18T06:27:34.170 に答える
1

静的メソッド変数は、メソッドが呼び出されたときに作成され、メソッドの実行が終了してガベージ コレクションの準備が整うとスコープ外になります。

于 2012-05-18T06:27:09.610 に答える