我正在解析响应字符串并对其进行排序。如果响应很小但是如果响应很大,则可以在parse
方法下给出OOM错误。
public class Parser {
public static void main(String[] args) {
String response = "Long Response String";
Parser parser = new Parser();
String sorted = parser.sortGpupResponse(response);
System.out.println("the sorted..."+sorted);
}
public String sortGpupResponse(String response) {
JsonElement jelement = new JsonParser().parse(response); //OOM Error
JsonArray jsonarray = jelement.getAsJsonArray();
List<JsonObject> array = new ArrayList<JsonObject>();
for (int i = 0; i < jsonarray.size(); i++) {
array.add(jsonarray.get(i).getAsJsonObject());
}
Collections.sort(array, new Comparator<JsonObject>() {
@Override
public int compare(JsonObject lhs, JsonObject rhs) {
Long lid = lhs.get("begin").getAsLong();
Long rid = rhs.get("begin").getAsLong();
return lid.compareTo(rid);
}
});
return array.toString();
}
}
LOG:
com.google.gson.JsonParseException: Failed parsing JSON source: JsonReader at line 1 column 23699433 to Json
at com.google.gson.JsonParser.parse(JsonParser.java:88)
at com.google.gson.JsonParser.parse(JsonParser.java:59)
at com.google.gson.JsonParser.parse(JsonParser.java:45)
at com.project.user.User.sortedResponse(SortedResponse.java:200)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.lang.StringBuilder.toString(Unknown Source)
at com.google.gson.stream.JsonReader.nextQuotedValue(JsonReader.java:1014)
at com.google.gson.stream.JsonReader.nextName(JsonReader.java:798)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:659)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
at com.google.gson.internal.Streams.parse(Streams.java:44)
at com.google.gson.JsonParser.parse(JsonParser.java:84)