由于堆内存已满,jUnit花费的时间太长

时间:2019-05-23 04:16:01

标签: java junit heap-memory

对于我正在从事的项目之一,我们编写了jUnit来读取文本文件中的请求,然后调用方法。在实际的方法中,我们将创建PDF报告,因此将创建Tables,Documents等对象,这是因为jUnits的可用堆内存非常快地用完,并且jUnits需要花费大量时间才能完成。

有什么方法可以确保执行jUnit后,为其创建的所有对象都会从内存中收集垃圾?

我尝试为每个Test类在System.gc()方法中使用@AfterClass方法,但这没有帮助。另外,尝试通过增加堆大小但结果相同。 所使用的框架为Spring-boot 1.4.0,版本为JUnit4.12

1 个答案:

答案 0 :(得分:0)

System.gc()不保证垃圾收集器将运行。

来自JUnit文档

  

根据设计,Test实例树是在一次通过中构建的,然后在第二次通过中执行测试。在测试执行期间,测试运行器对所有Test实例拥有强大的引用。这意味着对于包含多个Test实例的非常长的测试运行,直到整个测试运行结束之前,所有测试都不会被垃圾回收。

     

因此,如果您在测试中分配外部或有限资源,则您有责任释放这些资源。例如,在tearDown()方法中将对象明确设置为null,可以在整个测试运行结束之前对其进行垃圾回收。

简而言之。完成操作后,请确保将对象引用设置为null