簡體   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