java persistance内存泄漏

use*_*006 1 java jpa

我在mysql表中有1M行,当我执行下面的代码时,我是java持久性api然后我得到java堆错误:

int counter = 0;
while (counter < 1000000) {
   java.util.Collection<MyEntityClass> data = myQuery.setFirstResult(counter)
       .setMaxResults(1000).getResultList();
   for(MyEntityClass obj : data){
       System.out.println(obj);
   }
   counter += 1000;
}
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 7

当你点击"下一步"时,我想知道JTable是否真的挂在所有那些旧引用上.我不相信这是一个持久性问题.无论你在JTable后面有什么支持数据结构,我都要确保在添加下一批记录之前清除它.这样旧的值可以是GC'd.

您的JTable不应该有ResultSet.拥有一个从客户端隐藏此类详细信息的持久层会更好.查询一批值(而不是整个数据集),将其从ResultSet加载到数据结构中,并在finally块中关闭ResultSet和Statement.您需要在创建它们的方法范围内关闭这些资源,否则您会遇到麻烦.