Java反序列化JSON内存溢出,json数据过长:java.lang.OutOfMemoryError

283 阅读1分钟

当使用JsonObject.toJsonString()时,由于对象过大或参数过多,String语句有长度限制.大部分是转list出现问题 导致提示java堆栈溢出:java.lang.OutOfMemoryError异常.

解决办法:分页,把list分成多个小list的几个.

public static <T> List<List<T>> listToMoreList(List<T> resList, Integer subListLength){
    if (CollectionUtils.isEmpty(resList) || subListLength <= 0) {
        return Lists.newArrayList();
    }
    List<List<T>> ret = Lists.newArrayList();
    int size = resList.size();
    if (size <= subListLength) {
        // 数据量不足 subListLength 指定的大小
        ret.add(resList);
    } else {
        int pre = size / subListLength;
        int last = size % subListLength;
        // 前面pre个集合,每个大小都是 subListLength 个元素
        for (int i = 0; i < pre; i++) {
            List<T> itemList = Lists.newArrayList();
            for (int j = 0; j < subListLength; j++) {
                itemList.add(resList.get(i * subListLength + j));
            }
            ret.add(itemList);
        }
        // last的进行处理
        if (last > 0) {
            List<T> itemList = Lists.newArrayList();
            for (int i = 0; i < last; i++) {
                itemList.add(resList.get(pre * subListLength + i));
            }
            ret.add(itemList);
        }
    }
    return ret;
}

拆分后再转string进行操作即可.