OutOfMemoryException, вызванное большими строками
Я использую следующий метод, чтобы поймать данные из webapi:
public static String sendRequest(String requestURL, String data)
throws IOException {
URL url = new URL(requestURL + "?" + data);
URLConnection conn = url.openConnection();
conn.setReadTimeout(10000);
BufferedReader in = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String inputLine;
StringBuilder answerBuilder = new StringBuilder("");
try {
while ((inputLine = in.readLine()) != null)
answerBuilder.append(inputLine);
in.close();
} catch (Exception e) {
}
return answerBuilder.toString();
}
С некоторыми запросами это приводит к ошибке OutOfMemoryError, вызванной слишком маленьким размером HeapSize:
(...)Caused by: java.lang.OutOfMemoryError: (Heap Size=17927KB, Allocated=14191KB, Bitmap Size=2589KB)
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:132)
at java.lang.StringBuilder.append(StringBuilder.java:272)
at java.io.BufferedReader.readLine(BufferedReader.java:423)
at com.elophant.utils.HTTPUtils.sendRequest(HTTPUtils.java:23)
at (..)
Я уже поменял местами обычные строковые операции вродеString answer += inputLine
к StringBuilder, но это не помогло. Как я могу решить эту проблему? Увеличение максимального размера кучи с помощьюexport JVM_ARGS="-Xmx1024m -XX:MaxPermSize=256m"
не вариант, как его приложение для Android.