1

100 万行を超える行を入力して Arraylist と Linkedlist の時間を計ろうとすると、Arraylist の入力後に以下のエラーが発生します。

スレッド「メイン」での例外 java.lang.OutOfMemoryError: Java ヒープ スペースの java.lang.Integer.valueOf(Integer.java:642) での Scratch.Collectionss.main(Collectionss.java:25)

このエラーを回避するにはどうすればよいですか。l1 = null を設定しようとしましたが、エラーが発生します。

public class Collectionss {
    public static void main(String[] args){
        // 
        long starttime = System.currentTimeMillis();
        List<Integer> l1 = new ArrayList<Integer>();
        for (int i = 1; i <= 10000000; i++){
            l1.add(i);
        }
        System.out.println(l1.size());

        long endtime = System.currentTimeMillis();

        System.out.println(endtime - starttime);

        //
        long starttime1 = System.currentTimeMillis();
        List<Integer> l2 = new LinkedList<Integer>();
        for (int i = 1; i <= 10000000; i++){
            l2.add(i);
        }
        System.out.println(l2.size());

        long endtime1 = System.currentTimeMillis();

        System.out.println(endtime1 - starttime1);

    }

}
4

6 に答える 6

2

ヒープサイズを増やしてプログラムを実行してみてください

于 2013-09-10T15:33:22.067 に答える
1

フラグを使用して、JVM で使用できるヒープを増やす必要があります-Xmx4g。これにより、ヒープ サイズが 4GB に増加します。そのためのコマンドラインは必要ありません。IDE は JVM パラメータも受け入れます。例)日食:Run Configurations... -> Arguments -> VM Arguments

@crush が述べたよう ArrayListに、必要な容量で初期化すると、メモリを節約できます (GC の一部の作業)。

于 2013-09-10T15:33:17.527 に答える
1

プログラムを実行するたびにヒープサイズを指定できると思います。コマンドラインで実行している場合、「java」を使用して実行するときはいつでも、パラメータ「-Xms1024m -Xmx1024m」または必要なヒープサイズを含めます。正確な使用法を取得するには、jvm 起動パラメーターを調べます。

于 2013-09-10T15:34:22.457 に答える