我正在使用包括 Hibernate 数据存储的 Java 程序运行一些实验。一个 Experiment 可以包含多个 Trial,每个 Trial 可以有多个 Test。每个实验都在单个 Spring 事务中进行。
当有少量测试时,一切都很好,但随着数据量的增加,我开始遇到 Java 堆空间内存不足的问题。考虑到我在单个事务中处理的数据量,内存问题似乎是合理的。
我目前的解决方法是:
Set up and save the initial Experiment
Run a set of Tests.
Summarise the Test results and create a Trial record
Delete the Test records
Save the completed Trial
Prompt the Garbage Collector to run
这很有效,我可以使用该框架进行广泛的实验。但是,我不再有权对详细的测试记录进行数据分析,因为我不得不删除它们以防止出现内存问题。
我想做的是将测试记录保存到文件中,然后从堆中“卸载”它们。试用版仍然会有一对多保存的测试记录,但由于测试已完成,我不再需要内存中的详细信息。
Set up and save the initial Experiment
Run a set of Tests.
Summarise the Test results and create a Trial record
Save the Trial (with cascade saves for all Test records)
Unload the complete Test records
Prompt the Garbage Collector to run
谁能想到我的问题的解决方案?