当我尝试从数据库中检索大量记录时,我正在处理一个问题。似乎当记录量超过90.000时,无法检索元素。
发生这种情况时,我得到以下异常:
android:breakStrategy="high_quality"
我正在使用的代码如下:
com.sun.jdi.ObjectCollectedException occurred while retrieving value.
当我插入最多89.999条记录时,我尝试使用此方法对由1.000组检索的结果进行分页,列表很好。但是当我超过90.000时,我会遇到同样的异常。
关于如何面对这个问题的任何想法吗?
答案 0 :(得分:2)
如果要处理大量数据,我建议您对ScrollableResults
:https://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上没有大小限制。