2016-11-14 51 views
0

11-14 13:18:47.871 14235-14387/com.example.example d/dalvikvm:GC_FOR_ALLOC釋放14121K,17900K免費/ 27708K,暫停47ms 36%,總47msAndroid應用連續進行堆操作

11-14 13:18:47.871 14235-14387/com.example.example I/dalvikvm堆:成長堆(FRAG情況下),以24.392MB爲5785374字節分配

這兩個操作是連續繼續在我的Android應用程序。沒有其他操作正在發生。我不知道我需要分享什麼代碼。我真的很抱歉。請讓我知道什麼代碼分享這個。

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萬個字符,對於某個特定的電話來說,它變得比可以處理的東西更多。我將字符串分成小塊,同時接收流來解決問題。