Java列表无法检索超过90.000个元素

时间:2018-08-09 17:05:26

标签: java hibernate

当我尝试从数据库中检索大量记录时,我正在处理一个问题。似乎当记录量超过90.000时,无法检索元素。

发生这种情况时,我得到以下异常:

android:breakStrategy="high_quality"

我正在使用的代码如下:

com.sun.jdi.ObjectCollectedException occurred while retrieving value.

当我插入最多89.999条记录时,我尝试使用此方法对由1.000组检索的结果进行分页,列表很好。但是当我超过90.000时,我会遇到同样的异常。

关于如何面对这个问题的任何想法吗?

2 个答案:

答案 0 :(得分:2)

如果要处理大量数据,我建议您对ScrollableResultshttps://grokonez.com/hibernate/resolve-hibernate-outofmemoryerror-problem-hibernate-batch-processing

使用批处理
Session session = factory.openSession();
Transaction tx = null;
try {
    tx = session.beginTransaction();

    ScrollableResults dataCursor = session.createQuery("FROM Data").scroll();

    int count = 1;
    while (dataCursor.next()) {
        Data data = (Data) dataCursor.get(0);
        String newText = Utilities.generatedRandomString();
        data.setText(newText);
        session.update(data);

        if (count % 50 == 0) {
            System.out.println("============================log: count = " + count);
            session.flush();
            session.clear();
        }
        count++;
    }

    tx.commit();
} catch (Exception e) {
    if (null != tx) {
        tx.rollback();
    }
} finally {
    session.close();
}

在这种情况下,会话不会将所有90000条记录保留在内存中。

答案 1 :(得分:2)

“ com.sun.jdi.ObjectCollectedException”发生在您引用的对象被垃圾回收时。

java arrayList上没有大小限制。