クラスのC# 3.5では、いくつかの変数を持ついくつかの静的メソッドがあります。クラスを初期化しなくても、静的メソッドが最初に初期化されます。
では、静的メソッド内の変数も最初に初期化され、ガベージ コレクションではありませんか?
知りたい - メソッドを呼び出さなくても、またはメソッドを一度呼び出してメソッドが終了しても、そのようなメソッド変数にメモリが割り当てられますか? または、メソッドが呼び出されて終了するたびに、メソッド内の変数がガベージ コレクションされますか?
クラスのC# 3.5では、いくつかの変数を持ついくつかの静的メソッドがあります。クラスを初期化しなくても、静的メソッドが最初に初期化されます。
では、静的メソッド内の変数も最初に初期化され、ガベージ コレクションではありませんか?
知りたい - メソッドを呼び出さなくても、またはメソッドを一度呼び出してメソッドが終了しても、そのようなメソッド変数にメモリが割り当てられますか? または、メソッドが呼び出されて終了するたびに、メソッド内の変数がガベージ コレクションされますか?
静的メソッドが最初に初期化されます
いいえ、静的メソッド自体は「初期化」されていません。それらは(標準実装では)最初の使用時に JITted されますが、それはメモリ割り当てとは無関係です。
では、静的メソッド内の変数も最初に初期化され、ガベージ コレクションではありませんか?
メソッド変数は呼び出しごと(スタック上) であり、グローバルではありません。メソッドを入力すると、スタック領域が割り当てられます。参照型の変数がある場合、メソッドが終了するとスコープ外になります (これらの変数が、メソッドよりも長く存続するデリゲートまたはラムダ式に「キャプチャ」されていないと仮定します)。
オブジェクトのみがガベージ コレクションされます。変数ではありません。参照型変数は、オブジェクトへの参照を保持するだけです。
静的メソッド変数は、メソッドが呼び出されたときに作成され、メソッドの実行が終了してガベージ コレクションの準備が整うとスコープ外になります。