【问题标题】:Can we initiliaze a String array of size 1447891223? [duplicate]我们可以初始化一个大小为 1447891223 的 String 数组吗? [复制]
【发布时间】:2020-08-26 21:18:08
【问题描述】:

我正在尝试以下代码

String[] buffer = new String[1447891223];
Arrays.fill(buffer, "0.0");

上面的代码给了我java.lang.OutOfMemoryError: Java heap space

有什么办法可以优化上述方式吗?

我的 sts.ini 文件有以下配置

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-1417
-product
org.springsource.sts.ide
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms1024m
-XX:MaxPermSize=512m
-Xverify:none
-Dorg.eclipse.swt.browser.IEVersion=10001
-Xmx4000m

【问题讨论】:

标签: java


【解决方案1】:

您应该能够用最少的-Xms9g 内存初始化大小为1447891223 的数组。 将您的 VM 参数之一设置为 -Xms9g 或 -Xmx9g

import java.util.Arrays;

public class BigArray {

    public static void main(String[] args) {
        String[] buffer = new String[1447891223];
        Arrays.fill(buffer, "0.0");
    }
}

【讨论】:

  • 为什么要设置最小值?
  • 也用 Xmx 更新了 ans。最好从已知的最小内存开始,而不是从太低的值开始。
【解决方案2】:

嗯,你真的需要那么多 String 对象吗?您必须使用至少约 6GB 的内存才能拥有指向约 15 亿个字符串的指针。也许你想要一个 15 亿个字符的字符串?那会少一点,但不会太多。

此外,您还必须提供诸如 -Xmx 之类的 JVM 参数来增加 JVM 的可用内存大小

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2020-03-20
    • 2019-01-14
    相关资源
    最近更新 更多