2012-04-06 6 views
0

die Linie"new String()" verursacht GC_CONCURRENT-Anweisungen?

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

viel GC_CONCURRENT verursacht ...

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; 
       } 

      } 

wie kann ich das verhindern?

+0

warum, was ist dein Problem ?? –

+0

ist es nicht ein gutes Zeichen, dass Ihr Müll Collector funktioniert gut? :) – waqaslam

+0

Wenn Sie GC-Nachrichten ablehnen, können Sie immer einen ByteBuffer & CharsetDecoder verwenden, um dasselbe (in ein paar mehr * loc *) als 'new String (..)' zu machen. – Jens

Antwort

1

Sie erstellen viele Objekte in einer Schleife. Wenn Sie diese Nachricht sehen, bedeutet das nur, dass der Garbage Collector seinen Job erledigt, indem er Ihren Speicher frei hält. Der GC bereinigt Objekte im Heap, auf die nicht verwiesen wird.

Verwandte Themen