有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Google gson解析器发出OutOfMemoryError

我正在解析一个响应字符串并对其进行排序。如果响应很小,这很好,但如果响应很大,则在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();
}
}

日志:

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)

共 (0) 个答案