@Test
public void batchInsert(){
SqlSession session=sqlSessionFactory.openSession();
Map<String, Object> map = new HashMap<String, Object>();
List<Person> pList = new ArrayList<Person>();
try {
for(int i=1;i<1000007;i++){
Person person=new Person();
person.setName("batName"+i);
pList.add(person);
System.out.println("object num:"+i);
if(i%1000==0){
map.put("personList",pList);
session.insert("cn.itcast.mapper.Person.insertBatch",map);
pList.clear();//清空集合中数据
}
}
map.put("personList",pList);//map中key值相同覆盖前面的,插入i>1000之后的
session.insert("cn.itcast.mapper.Person.insertBatch",map);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
session.close();
}
}
上面这个图是我对内存结构的理解,下面是问题
适当的时候把集合中的数据清空,防止heap溢出,但是这session.insert()产生的数据具体跑哪里去了?在事务未提交之前,所有的sql语句数据应该都在session中,对吧?
Session对象和集合对象都在堆空间中,到头来集合中的数据还是在堆空间中,这样就和之前把数据全部存放到堆空间一样,但是这样为何就不会导致heap溢出呢?