【问题标题】:How to increase heap memory size for Spock Framework?如何增加 Spock 框架的堆内存大小?
【发布时间】:2022-06-12 18:01:26
【问题描述】:

Java 程序运行良好,但测试失败并显示以下消息:

Caused by: java.lang.OutOfMemoryError: Java heap space
    at java.base/java.util.BitSet.initWords(BitSet.java:167)
    at java.base/java.util.BitSet.<init>(BitSet.java:162)
    at lv.id.jc.ipv4.IntSet.<init>(IntSet.java:6)
    at lv.id.jc.ipv4.IntSetTest.$spock_initializeFields(IntSetTest.groovy:11)

我已经将GROOVY_OPTS 设置为-Xmx1g,但它没有帮助。

我使用测试框架Spock 2.0,被测java代码是

public class IntSet {
    private final BitSet[] storage = {new BitSet(Integer.MAX_VALUE), new BitSet(Integer.MAX_VALUE)};

    public void add(int i) {
        if (i >= 0) {
            storage[0].set(i);
        } else {
            storage[1].set(-++i);
        }
    }

    public long size() {
        return (long) storage[0].cardinality() + storage[1].cardinality();
    }
}

我在 Spock Framework 文档中找不到如何解决此类问题。我使用 IntelliJ 和 gradle。

如有任何想法,我将不胜感激。

添加信息。我在 gradlew 文件中设置属性:

DEFAULT_JVM_OPTS='"-Xmx2048m" "-Xms128m"'

我使用这个命令运行程序:

./gradlew run -q --console=plain --args="ip_addresses"

它工作正常并打印正确的结果。但是,当我使用命令运行测试时:

./gradlew test

然后我收到一条错误消息:

> Task :test FAILED 
FAILURE: Build failed with an exception. 

HTML 报告显示:

org.gradle.internal.exceptions.DefaultMultiCauseException: Multiple Failures (2 failures)  
java.lang.OutOfMemoryError: Java heap space  
java.lang.OutOfMemoryError: Java heap space 

【问题讨论】:

  • Spock 与内存限制无关,这完全取决于执行代码的 JVM。您如何运行测试(Maven/Gradle/其他)?
  • 我使用 gradle 和 IntelliJ。我从 InteliiJ 和使用 gradlew 测试的命令提示符运行测试。你给了我一个检查gradle设置的想法。谢谢!
  • 您正在创建两个大小为 2,147,483,647 (Integer.MAX_VALUE) 位的位集,例如每个约 256 MB。可能这是您的问题,而不是与 Spock 相关的任何问题。他们真的必须那么大吗?在您的 IDEA 测试运行配置中,您可以指定任何您希望的 VM 参数,因此您也有机会增加堆大小。
  • 任务是在 ddd.ddd.ddd.ddd 格式的文本文件中的 8,000,000,000 个地址中计算唯一的 IPv4 地址。所以我将它们转换为 int 表示并创建一个容器。第二个矿井实现(性能更高)使用 long[] storage = new long[1
  • “计算唯一的 IPv4 地址”是什么意思?为测试目的计算随机地址?如果它们需要是唯一的,为什么要使用数组而不是集合呢?当然,你可以计算唯一的,而不用随机化它们,每次只增加 1,那么你就不需要集合了。

标签: unit-testing heap-memory spock bitset


猜你喜欢
  • 1970-01-01
  • 2013-06-17
  • 2016-01-22
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2011-06-19
相关资源
最近更新 更多