7

くだらない質問かもしれませんが、ご容赦ください。したがって、次のようになります。

List<Boss> bossList = new ArrayList<Boss>();
Boss b = null;
for(Employee e : List<Employee> myList){
    b = new Boss();
    b.setEmployee(e);
    bossList.add(b);
    b = null;
}

したがって、上記のシナリオでは、多くの Boss オブジェクトを作成し、それらを逆参照しています (「b = null」と記述する必要がないことはわかっていますが、質問を明確にするために行いました)。通常のシナリオでは、これを行うことでそれらをガベージ コレクションにマークしますが、このシナリオでは、これらの Boss オブジェクトを List コレクションに追加しているため、それらは GC 用にマークされていますか? そうでない場合、なぜですか?また、ガベージ コレクションを回避するために、追加された各オブジェクトの参照を保持するために、リスト コレクションは内部でどのように機能するのでしょうか。

[EDIT] 

for問題の範囲は、このメソッドがリストの参照を外の世界に返すことを考慮して、ループで作成された個々のボス オブジェクトにのみ限定されます。

4

4 に答える 4

5

ArrayList はObject[] elementData内部的に持っています。ArrayListに追加bすると、 が割り当てられます。したがって、のインスタンスに割り当てた場合は、まだ参照されており、GC できません。ただし、メソッドが両方を返した後、インスタンスはメソッドの変数からのみ参照されるため、インスタンスはGCの対象になります。bossListelementData[0] = bnullbBosselementData[0]ArrayListArrayListBoss

于 2013-05-31T05:50:33.433 に答える
3

コードで実際に何が起こるかは次のとおりです。

こんにちは

于 2013-05-31T06:04:39.977 に答える
-1

java は参照渡しであるため、に追加bするたびに、 b が指しているメモリ位置の参照を開始します。そのため、無効化された場合、参照へのリンクのみが壊れます。したがって、オブジェクトへのアクセスを維持します。bossListbossListbbbossList

于 2013-05-31T09:49:50.427 に答える