gpt4 book ai didi

java - Hibernate - 搜索 - Java堆空间

转载 作者:行者123 更新时间:2023-11-29 03:56:42 25 4
gpt4 key购买 nike

由于我在 mi 代码中添加了修改,因此我在 hibernate 时遇到了 java 堆空间问题。程序从一个文本文件(2GB)加载信息

BufferedReader input = new BufferedReader(new FileReader(file));

while (line.compareTo(EOF) != 0) {
//Load of infoObject, lots of parse information from the text file
//Read lines of text using: line = input.readLine();

getSession().save(infoObject);

counter++;

if (counter % 100 == 0) {
getSession().flush();
System.gc();
}
}

这个工作很好,现在如果 infoObject 已经存在于我的数据库中,我需要更新记录,我使用这个:

BufferedReader input = new BufferedReader(new FileReader(file));

while (line.compareTo(EOF) != 0) {
//Load of infoObject

iObject infoObject_tmp = new iObject();
infoObject_tmp.setNumAccount(numAccount);
infoObject_tmp.setCloseDate(new Date("02/24/2011"));
iObject infoObject_search = (iObject) getSession().load(iObject.class, infoObject_tmp);

if (infoObject_search !=null){
getSession().update(infoObject);
}else{
getSession().save(infoObject);
}
counter++;

if (counter % 100 == 0) {
getSession().flush();
System.gc();
}
}

自由内存:

  • 登记处 1:750283136。
  • 注册号 10000:648229608。
  • 注册号 50000:411171048。
  • 注册表 100000:Java 堆空间。

如何解决 Java 堆空间问题?我知道问题出在我检查 iObject 是否存在时。

最佳答案

您需要一个 flush(),然后是一个 clear()flush() 仅将任何待处理的更新推送到数据库。 clear() 从 session 中删除对象。不过,您需要小心使用 clear(),因为任何其他引用 session 中对象的代码现在都有一个“分离的”对象。

关于java - Hibernate - 搜索 - Java堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com