林下面的方法来从的WebAPI捕捞数据:OutOfMemoryException异常因使用使用大字符串
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();
}
对于一些要求,这导致由一个太小HEAPSIZE一个OutOfMemoryError异常:
(...)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应用程序。
你想下载什么?它是一个完整的二进制bin文件,xml,json吗? – 2013-04-26 13:36:44
您的应用程序无法缩放,因此无法重写就无法解决问题。当然,你可以添加更多的内存,但它迟早会失败。将内容写入永久存储器(例如文件系统)。如果您真的*知道HTTP资源的最大可能大小,则可以解决此问题。 – home 2013-04-26 13:40:07