【发布时间】:2014-11-13 19:34:05
【问题描述】:
如flush docsjava 中所述
刷新是同步底层持久化的过程 存储在内存中的持久状态。
这是我对上述说法的理解
所以如果有人在做 插入/更新然后刷新,额外插入的行将是谎言 仅在 java 内存中。但其他方式即 Db 数据只会是 仅在提交时与内存中保存的持久状态同步。
现在让我们通过以上的理解
我遇到了HIbernate commit() and flush(),接受的答案告诉我 session.flush 在某些情况下有助于释放内存,从而避免 OutOfMemoryException。
当我在下面做时,line1 (session.flush()) 将为客户表上的 20 个客户执行插入查询 释放列表中 20 个客户对象的内存,但另一方面创建 20 个客户数据行 在仍然在java内存中的客户表下(它只会在第2行提交时进入数据库)。所以我不确定 session.flush 如何帮助释放内存?
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush(); //line1
session.clear();
}
}
tx.commit();// line2
session.close();
【问题讨论】: