gpt4 book ai didi

java - 垃圾收集似乎在 Java 中不起作用

转载 作者:行者123 更新时间:2023-11-29 02:59:07 25 4
gpt4 key购买 nike

下面的方法有 2 个 for 循环。 FirSTLoop迭代36000次,内部forloop迭代24次,所以总共插入记录数为864000条。代码执行运行近3.5小时后终止。(记录插入失败) session 关闭和事务提交仅在外部 for 循环结束后进行。发现执行过程中内存消耗接近6.9GB

@SuppressWarnings("unchecked")


public void createBRResults() {

List<BusinessRules> businessRuleList = null;
Organization organization = null;
Brresults brresults = null;
Criteria criteria = null;
Criteria newCriteria = null;
String brStatus = "Live";
Date date = new Date();
Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
if (callInfos == null) {
callInfos = getEntities(CallInfo.class);
}
for (CallInfo callInfo : callInfos) {
transaction = session.beginTransaction();
criteria = session.createCriteria(BusinessRules.class);
criteria.createCriteria("businessGoals").add(
Restrictions.eq("category", callInfo.getCategory()));
businessRuleList = criteria.list();
organization = callInfo.getOrganization();
for (BusinessRules businessRule : businessRuleList) {
brresults = new Brresults();
brresults.setBusinessRule(businessRule);
brresults.setCallInfo(callInfo);
brresults.setCreatedDate(date);
brresults.setModifiedDate(date);
brresults.setOrganization(organization);
brresults.setBrrStatus(brStatus);
brresults.setBrrValue(Math.random() < 0.5 ? 0 : 1);
session.save(brresults);
brresults = null;
}
criteria = null;
organization = null;
businessRuleList = null;
session.flush();
session.clear();
transaction.commit();
System.gc();
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
session.close();
}
}

我附上了最后几行 GC 日志以指示内存分配

17034.595:[Full GC(人体工程学)[PSYoungGen:979968K->979964K(1862144K)] [ParOldGen:5576158K->5576158K(5576192K)] 6556126K->6556123K(7438 336K), [元空间: 23195K->23195K(1071104K )], 2.1041939 秒] [时间: user=8.61 sys=0.00, real=2.11 秒]

17036.699:[Full GC(人体工程学)[PSYoungGen:979968K->979964K(1862144K)] [ParOldGen:5576158K->5576158K(5576192K)] 6556126K->6556123K(7438 336K), [元空间: 23195K->23195K(1071104K )], 1.5930338 秒] [时间: user=9.39 sys=0.00, real=1.59 秒]17038.292:[Full GC(人体工程学)[PSYoungGen:979968K->979964K(1862144K)] [ParOldGen:5576158K->5576158K(5576192K)] 6556126K->6556122K(743833 6K), [元空间: 23195K->23195K(1071104K)], 1.9376959 秒] [Times: user=8.51 sys=0.00, real=1.94 secs]

17040.230:[Full GC(人体工程学)[PSYoungGen:979968K->830418K(1862144K)] [ParOldGen:5576158K->5576027K(5576192K)] 6556126K->6406445K(7438 336K), [元空间: 23196K->23196K(1071104K )], 2.9929302 秒] [时间: user=17.97 sys=0.00, real=3.00 秒]

堆 PSYoungGen 总计 1862144K,使用 889367K [0x0000000715d80000, 0x00000007bdc80000, 0x00000007c0000000)

伊甸园空间 979968K,已使用 90% [0x0000000715d80000,0x000000074c205e48,0x0000000751a80000) 来自空间 882176K,0% 使用 [0x0000000787f00000,0x0000000787f00000,0x00000007bdc80000) 空间 885760K,0% 使用 [0x0000000751a80000,0x0000000751a80000,0x0000000787b80000) ParOldGen 总计 5576192K,使用 5576027K [0x00000005c1800000, 0x0000000715d80000, 0x0000000715d80000) 对象空间 5576192K,已使用 99% [0x00000005c1800000,0x0000000715d56d38,0x0000000715d80000) 已用元空间 23223K,容量 23502K,已提交 24064K,保留 1071104K 已用类空间 2443K,容量 2537K, promise 2560K,保留 1048576K

但是,如果我关闭 session 并在每 24 次迭代后再次打开,记录插入就会成功,所需时间为 55 分钟。但 RAM 利用率约为 3GB。

为什么垃圾回收没有正常进行?代码中有哪些错误?

最佳答案

Session 正在累积对您触摸的所有对象的引用,因为如果您在同一 session 中两次请求它,它必须返回完全相同的对象。您需要定期关闭它以允许它丢弃其上下文。

关于java - 垃圾收集似乎在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36147212/

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