gpt4 book ai didi

java - 如何为 Eclipse 上的 JUnit 测试增加 VM 内存大小?

转载 作者:行者123 更新时间:2023-11-29 08:20:55 25 4
gpt4 key购买 nike

我正在尝试运行包含以下代码的简单 JUnit 测试:

    @Test
public void testVeryLongString() {
String s = "0123456789";
String repeated = new String(new char[214748364]).replace("\0", s);
assertEquals(2147483640, repeated .length());
}

上面几行失败,显示“请求的数组大小超出 VM 限制”。

我尝试将此测试的运行配置增加到 -Xmx18292m(在 64GB Windows 工作站上),但我仍然收到可怕的“请求的数组大小超出 VM 限制”。

我错过了什么?

有没有办法让测试继续进行而不会在此 VM 限制上失败?

最佳答案

Requested array size exceeds VM limit 表示尝试分配大于 Integer.MAX_VALUE 的数组。 自 Java 9 StringStringBuilder(用于 String.replace(...))在内部使用每个 字节数组都是字符串长度的两倍,而不是相同长度的 char 数组。

使用 Java 8 和足够的内存(比 -Xmx18292m 多得多,因为执行 String.replace(...) 需要额外的数组>) 以避免 OutOfMemoryError它应该可以工作

为了获得更好的性能和更少的内存需求,请使用以下代码:

@Test
public void testVeryLongString() {
String s = "0123456789";
char[] chars = new char[214_748_364 * s.length()]; // Java 9+: 107_374_182
for (int i = 0; i < chars.length; i += s.length()) {
for (int j = 0; j < s.length(); j++) {
chars[i+j] = s.charAt(j);
}
}
String repeated = new String(chars);
assertEquals(2_147_483_640, repeated.length()); // Java 9+: 1_073_741_820
}

关于java - 如何为 Eclipse 上的 JUnit 测试增加 VM 内存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58596458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com