【问题标题】:jUnits taking too long due to heap memory getting full由于堆内存已满,jUnits 花费的时间太长
【发布时间】:2019-05-23 04:16:01
【问题描述】:

对于我正在进行的一个项目,我们编写了从文本文件读取请求然后调用方法的 jUnit。在实际的方法中,我们正在创建 PDF 报告,因此会创建表格、文档等对象,因此可用于 jUnit 的堆内存很快就会耗尽,并且 jUnit 需要花费大量时间才能完成。

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

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

【问题讨论】:

    标签: java junit heap-memory


    【解决方案1】:

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

    来自 JUnit 文档

    按照设计,测试实例树在一次通过中构建,然后测试在第二次通过中执行。测试运行器在测试执行期间持有对所有测试实例的强引用。这意味着对于包含许多 Test 实例的非常长的测试运行,在整个测试运行结束之前可能不会对任何测试进行垃圾收集。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      相关资源
      最近更新 更多