0

我正在编写一个 java 程序,在 windows 中使用 eclipse 生成前 5000 万个素数(eratosthenes 筛)。

package first;

import java.util.Arrays;

public class primegen {
private static int[] generatePrimes(int max) {
    boolean[] isComposite = new boolean[max + 1];
    for (int i = 2; i * i <= max; i++) {
        if (!isComposite [i]) {
            for (int j = i; i * j <= max; j++) {
                isComposite [i*j] = true;
            }
        }
    }
    int numPrimes = 0;
    for (int i = 2; i <= max; i++) {
        if (!isComposite [i]) numPrimes++;
    }
    int [] primes = new int [numPrimes];
    int index = 0;
    for (int i = 2; i <= max; i++) {
        if (!isComposite [i]) primes [index++] = i;
    }
    return primes;
}

//The following snippet of code is to check the heapsize
public static void main(String[] args) {
           long heapsize=Runtime.getRuntime().totalMemory();
       System.out.println("heapsize is::"+heapsize);

      System.out.println(generatePrimes(982451653)[4]);

   }
}

堆空间的输出是:

heapsize is::66584576

它给出了以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at first.primegen.generatePrimes(primegen.java:7)
at first.primegen.main(primegen.java:30)

我发现 JVM 有一些 -xmx 命令。我在哪里输入该命令以及使用该命令设置的适当堆大小应该是多少?

我的机器上有 4 GB 的 RAM(64 位 Windows 7)

4

1 回答 1

0

打开Eclipse, Window -> Preferences

搜索Installed Jre,必须指向你JDK

编辑相同并输入Default VM arguments如下或根据您的要求。

-Xmx1024m -XX:MaxPermSize=512m

下面的psudo代码供您开始

private static BitSet generatePrimes(int max) {
        BitSet sieve = new BitSet(max);
        int size = sieve.size();

        for (int i = 2 ; i < size ; i++)
            sieve.set(i);

        int finalBit = (int) Math.sqrt(size);

        for (int i = 2 ; i < finalBit ; i++) {
            if (sieve.get(i)) {
                for (int j = 2 * i ; j < size ; j += i)
                    sieve.clear(j);
            }
        }

        return sieve;
    }
于 2014-06-23T13:49:32.690 回答