2012-04-06 2 views
0

ライン"新しいString()"はGC_CONCURRENT文を発生させますか?

strPuffer = new String(buffer, 0, bytes, Charset.forName("UTF-8")); 

while (true) { 
       try { 
        // Read from the InputStream 
        bytes = mmInStream.read(buffer); 
        strPuffer = new String(buffer, 0, bytes, Charset.forName("UTF-8")); 
        curMsg.append(strPuffer); 
        int endIdx = curMsg.indexOf(end); 
        if (endIdx != -1) { 
         fullMessage = curMsg.substring(0, endIdx + end.length()-1); 
         curMsg.delete(0, endIdx + end.length()); 
        // Send the obtained bytes to the UI Activity 
        mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, fullMessage) 
          .sendToTarget();} 
       } catch (IOException e) { 
        // 
        connectionLost(); 
        break; 
       } 

      } 

がどのように私はそれを防ぐことができます... GC_CONCURRENTの多くの原因は?

+0

なぜ、あなたの問題は何ですか? –

+0

ガベージコレクタが正常に動作していることを示す良い兆候ではありませんか? :) – waqaslam

+0

もしあなたがGCメッセージに悪影響を与えているのであれば、ByteBufferとCharsetDecoderを使って、(新しい* String *(*)*)と同じことを 'new String(..)'とすることができます。 – Jens

答えて

1

ループ内にたくさんのオブジェクトを作成しています。このメッセージを見るだけで、ガベージコレクタがメモリを解放したままにして仕事をしていることを意味します。 GCは、参照されていないヒープ内のオブジェクトをクリーンアップします。

関連する問題