繁体   English   中英

Java - OutOfMemoryError:Java 堆空间

[英]Java - OutOfMemoryError : Java heap space

我正在尝试创建一个大小为 100,000 的字符串数组列表,其中前两个之后的每个元素都是连接的前两个字符串。 问题是,我什至在达到 100 个字符串之前就耗尽了内存。 我打算使用这个数组列表进行二分搜索,并根据给定的输入输出字符串中的一个字母,这是字符串的索引,以及字符串中字母的索引。

这是代码

    public static void generateSequence(int numStrings, ArrayList<String> input){
        String temp = "", S1, S2;
        for(int i = 0; i < n; i++) {
            if(i == 0) {
                input.add("H");
            }
            else if(i == 1) {
                input.add("A");
            }
            else {
                S1 = input.get(input.size() - 2);
                S2 = input.get(input.size() - 1);
                temp = S1.concat(S2);
                input.add(temp);
                temp = "";
            }
        }
    }

我不确定如何更有效地使用内存来获取我需要的数组列表,所以任何建议都会有所帮助。 谢谢你。

那么第 N元素是第 N-1和第 N-2元素的串联吗?

因此,第 N元素的长度是前两个元素的长度之和。

你说的是大量的存储空间。 此代码向您显示第 N条目需要多少存储空间。

    double n0 = 1, n1 = 1;
    for (int i=2; i<=100; i++) {
        double n2 = n1 + n0;
        System.out.printf("%4d : %e\n", i, n2);
        n0 = n1;
        n1 = n2;
    }

第 49 个条目有 120 亿个字符(总共大约 240 亿个字符;或大约 48 GB)。

第 100 个条目(从 1 开始计数)有超过 5 x 10 20 个字符。

你需要重新考虑你的数据结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM