2

オブジェクト (JavaBean) をリストに追加しようとしています。

     MyWebServiceRequest mywebService = new MyWebServiceRequest();
     MyRequestType type= new MyRequestType ();

       for(int i=0; i< 9; i++){
           type.setA(someDynamicValue);
           type.setB(someDynamicValue);
           mywebService.add(type);
       }

これは (type) のオブジェクトを 1 つだけ作成するため、同じオブジェクトを同じデータで 9 回追加します。

 MyWebServiceRequest mywebService = new MyWebServiceRequest();
   for(int i=0; i< 9; i++){
           MyRequestType type= new MyRequestType ();
           type.setA(someDynamicValue);
           type.setB(someDynamicValue);
           mywebService.add(type);
       }

これにより、複数のオブジェクトが作成され、差分値を持つ 9 つの差分オブジェクトが追加されます。

(for ループ) リクエストが行われるたびに、単一のループで 9 ではなく数百のオブジェクトを作成するとどうなるでしょうか? それで、メモリにダンプしますよね?

これを回避する方法は?

前もって感謝します。

4

3 に答える 3

1
MyWebServiceRequest mywebService = new MyWebServiceRequest();
for(int i=0; i< 9; i++){
   MyRequestType type= new MyRequestType ();
   type.setA(1);
   type.setB(2);
   mywebService.add(type);
   type = null;
}

上記のように変数「type」に null を設定しても、メモリには影響しません。オブジェクトはすでにリストに参照されているためです。したがって、変数「type」に null を設定しても、メモリ リークには影響しません。

リアルタイムアプリケーションで問題に直面している場合は、アプリケーションの概要と直面している問題を教えてください。

于 2013-05-15T14:11:04.103 に答える
1

これを行うと

 MyWebServiceRequest mywebService = new MyWebServiceRequest();
   MyRequestType type= new MyRequestType ();

   for(int i=0; i< 9; i++){
       type.setA(1);
       type.setB(2);
       mywebService.add(type);
   }

この行 mywebService.add(type);は、状態が変更されているかどうか、または同じオブジェクトであるかに関係なく、オブジェクトを list に追加します。重複を許可しないマップではなくリストであるためです。

したがって、カウントは 10 になります。

 MyWebServiceRequest mywebService = new MyWebServiceRequest();


   for(int i=0; i< 9; i++){
       MyRequestType type= new MyRequestType ();
       type.setA(1);
       type.setB(2);
       mywebService.add(type);
   }

コードは新しいオブジェクトを作成してリストに追加しますが、すべてのオブジェクトは異なります。2 つのスニペットの唯一の違いは、2 番目のスニペットのオブジェクトは同じではありませんが、最初のスニペットでは同じですが、10 回追加されています。

于 2013-05-13T05:55:51.983 に答える