2013-07-02 14 views

答えて

11

object場合は、別のobjectの参照を保持し、あなたは、コンテナオブジェクトの参照null、子を設定したり、objectが含まれていたときに自動的にガベージコレクションの対象となります。

詳細については、this linkを参照してください。

+0

@MarounMarounが、これは文字列リテラルのための良好な保持んのための任意の理由は?つまり、文字列リテラル 's'はまだ' a2'によって参照されます。so? – sanbhat

+1

@MarounMaroun ...あなたのリンクは、JavaのGC上で非常に良い読書でした。どうもありがとう! – dotwin

+3

@sanbhat実行時に作成される文字列のインスタンスは、ほかのすべてのオブジェクトと同様にガベージコレクションの対象です。 –

4

Asにのみ参照を持っているので、a2.sa1.sを指していることはa1のガベージコレクションに影響を与えません。

、つまりa1はGCに適格ですが、a2.s(またはa1.s)と呼ばれるオブジェクトはGCに適格ではありません。

+1

-1 –

3

オブジェクトA1は、nullに設定されているため、GCに適格です。しかし、文字列 "bla"は、a2.sによっても参照されているため、GCでは使用できません。そのため、GCにはa1オブジェクトしか使用できません。

この場合

A a1 = new A(); 
a1.s = "bla"; 
A a2 = new A(); 
a1 = null; 

ある場合、A1オブジェクトと "BLA" の両方がGCのために利用可能です。 "bla"のすべての参照は削除されていますが、今の場合は

a2.s = a1.s; 

です。同じ文字列 "bla"を参照しています。だから、文字列はここではa1a2などのObject A2つの参照を作成しているGC

1

ためstringpoolでは使用できません。あなたはa2に値を設定した後a1。だからa2の値を代入している

まず、a1は、GCのために許可されています。しかし、reference a2に変更はありません。

またGarbage Collectionためにこのブログをチェックすることができます。

関連する問題