由于堆内存已满,jUnits 花费的时间太长
Posted
技术标签:
【中文标题】由于堆内存已满,jUnits 花费的时间太长【英文标题】:jUnits taking too long due to heap memory getting full 【发布时间】:2019-05-23 04:16:01 【问题描述】:对于我正在进行的一个项目,我们编写了从文本文件读取请求然后调用方法的 jUnit。在实际的方法中,我们正在创建 PDF 报告,因此会创建表格、文档等对象,因此可用于 jUnit 的堆内存很快就会耗尽,并且 jUnit 需要花费大量时间才能完成。
有什么方法可以确保一旦执行 jUnit,为它创建的所有对象都会从内存中收集垃圾?
我尝试在每个 Test 类的 @AfterClass
方法中使用 System.gc()
方法,但没有帮助。此外,尝试通过增加堆大小但结果相同。
使用的框架是Spring-boot 1.4.0
和JUnit
版本是4.12
。
【问题讨论】:
【参考方案1】:System.gc()
不保证垃圾收集器会运行。
来自 JUnit 文档
按照设计,测试实例树在一次通过中构建,然后测试在第二次通过中执行。测试运行器在测试执行期间持有对所有测试实例的强引用。这意味着对于包含许多 Test 实例的非常长的测试运行,在整个测试运行结束之前可能不会对任何测试进行垃圾收集。
因此,如果您在测试中分配外部或有限资源,则您有责任释放这些资源。例如,在 tearDown() 方法中将对象显式设置为 null,可以在整个测试运行结束之前对其进行垃圾回收。
简而言之。完成后确保将对象引用设置为 null
【讨论】:
以上是关于由于堆内存已满,jUnits 花费的时间太长的主要内容,如果未能解决你的问题,请参考以下文章