2016-11-14 8 views
0

11-14 13:18:47.871 14235から14387/com.example.exampleのD/dalvikvm:GC_FOR_ALLOCは、14121Kを解放17900K/27708K 36%フリー、47msを一時停止し、47msアンドロイドアプリ連続実行ヒープ操作

合計

11-14 13:18:47.871 14235から14387/com.example.example I/dalvikvmヒープ:これら二つの動作が連続的である

5785374バイトの割り当てのため24.392メガバイトにヒープ(フラグ・ケース)を成長私のアンドロイドアプリで続けます。他の操作は起こっていません。私はこのためにどのコードを共有する必要があるのか​​分かりません。私はそれを本当に残念です。これを共有するコードを教えてください。

private static String uncompressInputStream(InputStream inputStream) throws IOException { 
    final int BUFFER_SIZE = 1024; 
    String value = ""; 
    byte buffer[] = new byte[BUFFER_SIZE]; 
    GZIPInputStream gzipIn = null; 
    try { 
     gzipIn = new GZIPInputStream(inputStream,BUFFER_SIZE); 
     int bytesRead; 
     while ((bytesRead = gzipIn.read(buffer)) != -1) { 
      value += new String(buffer,0,bytesRead); 
     } 
    } finally { 
     try { 
      if (gzipIn != null) { 
       gzipIn.close(); 
      } 
     } catch (IOException io) { 
      io.printStackTrace(); 
     } 
    } 
    return value; 
} 
+0

操作が3〜4分以上実行されています –

+0

イメージの読み込みが多すぎるか、コンポーネント間に重いデータを渡していますか? –

+0

重いgzipファイルを解凍しようとしています。 –

答えて

0

問題は、利用可能なRAMとmallocの動作が連続的にメモリを割り当てるために実行されると、GCはまた、より多くのスペースを解放することができるように、連続的にメモリを解放するために実行されたことでした。通常の場合、1文字列は1バイトですが、実行時にmallocを使用すると、文字列には平均18バイトが割り当てられます。ここで使用されていた文字列は、特定の電話機が処理できるもの以上になっている350万文字を超えています。問題を解決するためにストリームを受信しながら、文字列を小さなチャンクに分割しました。

関連する問題