如flush docs的javasession.flush如何幫助內存釋放?
沖洗聲明是同步基礎持久 存儲在存儲器中保持持久化狀態的過程。
這裏是我的上述聲明
的理解所以,如果有人做 插入/更新,然後沖洗,額外插入的行會趴在只有Java內存 。但是其他方式,例如Db數據只會與僅在提交時保存在內存中的持久狀態同步的 。
現在讓上述認識
去了我整個HIbernate commit() and flush()從哪裏來accepeted答案告訴 調用Session.flush有助於在某些情況下釋放內存,從而避免OutOfMemoryException異常。
當我做以下,一號線(調用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();
請看我更新的帖子。 – 2014-09-19 10:15:34
@MSach,更新了我的答案和更多細節,請檢查是否有幫助。 – Chaitanya 2014-09-19 10:52:59
你說過「flush方法會讓hibernate調用所需的數據庫查詢」。那就是我所懷疑的。 它不調用物理數據庫上的所需查詢,而是調用java內存中保存的數據庫表(持久狀態)。 – 2014-09-19 11:16:58