Hibernate,保存1Millon实体,消耗大量内存



我有Hibernate Java的问题。我有一个将文件放在文件中,将其解析到csvrecord,然后通过processRecord()将每行转换为对象(classa),然后我尝试在DB中找到该对象,如果我有我更新对象" else" else" else"我第一次保存。处理1000行后,我提交交易,清洁会话并从交易开始。问题是当开始处理文件(100万记录)时,内存Java消耗开始生长很多(2GB),最后不要发布,因此,如果我需要方法处理,我没有内存,我没有内存,我现在从来没有内存异常,因为我仍然有内存,但是在服务器中它不会相同。我尝试使用flush()和clear()执行相同的代码,但都不磨代码是这样的:

db = new DB();
db.open();
trn = db.session().beginTransaction();
for (CSVRecord line : lines) {
         try {
           if ((classA = processRecord(line)) != null) {
             classB b = findObject(classA);
             if (b != null) {
               db.session().update(b);
             } else {
               db.session().save(classA);
             }
             if (recordNumber % 1000 == 0) {
               trn.commit();
               db.session().clear();
               trn = db.session().beginTransaction();
             }
             recordNumber++;
            }
         } catch (Exception e) {
                 e.printStackTrace();
         }
}
db.close();

使用无状态会话,因为它没有持久性上下文缓存,与您当前使用的方法相比,它可以改善性能

StatelessSession session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
    session.insert(yourentiry);
}
tx.commit();
session.close();

最新更新