Skip to content

.NET CLRでのオブジェクト復活

This content is a draft and will not be included in production builds.

C#のshortまたはlongな弱参照で書いたが、長い弱参照では、GCされたがファイナライザの実行を待っている中途半端な状態が発生する。この状態で強参照されるとオブジェクトが復活して再利用可能になる。これをオブジェクト復活とかオブジェクトの再作成という。

これはShort vs. Long Weak References and Object Resurrectionの記事にあるように、例えば以下のコードで再現できる。

class User
{
~User()
{
user = this;
}
}
static User user = new User();
static void Main(string[] args)
{
user = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}

これをオブジェクトプールの一種だと解釈する人もいるらしいが、むずかしい。