簡體   English   中英

單詞列表生成器,Java中的堆大小錯誤

[英]Wordlist generator, heap size error in Java

我正在嘗試創建一個程序,該程序基於幾個(10-100)個原始輸入單詞來生成單詞列表。 最終結果包含數百萬行,可能數十億行,每行一個字。 我已經走了足夠遠的距離,可以生成大約500萬個左右的單詞,但是每當我運行將生成更多詞的東西(例如1億左右)時,該程序在大約1分9秒后崩潰。 這是錯誤輸出:

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3210)
    at java.util.Arrays.copyOf(Arrays.java:3181)
    at java.util.ArrayList.grow(ArrayList.java:265)
    at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
    at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
    at java.util.ArrayList.add(ArrayList.java:462)
    at wordlistgen.WordlistGen2.combineWords(WordlistGen2.java:129)
    at wordlistgen.WordlistGen2.main(WordlistGen2.java:25)
    /home/NAME/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java 
returned: 1
BUILD FAILED (total time: 1 minute 9 seconds)

我試圖通過在netbeans.conf文件(運行Ubuntu 17.10)中輸入-J-Xms1024m -J-Xmx2048m來增加Netbeans的堆大小,但是錯誤仍然存​​在。

該程序實質上是導入原始的10-100個字:

static void importList() throws IOException{
    ArrayList<String> rawList = new ArrayList<>();

    try(BufferedReader br = new BufferedReader(new FileReader("textfile"))) {
        for(String line; (line = br.readLine()) != null; ) {
            rawList.add(line);
        }

        listOfLists.add(rawList);
        loll++;
    }

}

然后,使用一堆for循環,用大寫字母,末尾數字,整個單詞的子字符串等創建單詞的新變體。 單詞存儲在不同的數組列表中,而數組列表又存儲在ArrayLists的ArrayList中。 因此在ArrayList中。

完成組合和操作單詞后,使用以下方法將整個最終的arraylist逐行輸出到輸出文件:

static void outputFile(String fileName) throws IOException{
    try (FileWriter writer = new FileWriter(fileName)) {
        for(String str: finalList) {
            writer.write(str +"\n");
        }
    }
}

完整的代碼可以在這里找到: https : //pastebin.com/0fkvwYbx

我希望我遺漏了一些明顯的東西,或者我錯誤地解釋了錯誤消息,無論哪種方式,如果有人可以找到解決方案以便我能夠生成更長的列表,我將非常感謝。

也許ArrayList不是您問題的適當List實現。 請參閱: 何時在ArrayList上使用LinkedList?

我認為您在(引用)時經常遇到最壞的情況

add(E element)被分攤為O(1),但O(n)最壞的情況是因為必須調整數組大小並復制它

由於您不斷需要ArrayLists的重復大型后備陣列,因此不僅效率低下,而且內存效率低下。 考慮使用LinkedList,特別是因為您的代碼似乎沒有通過索引對列表進行隨機訪問

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM