有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

内存增加java堆大小,在windows中使用eclipse

我正在编写一个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内存(64位Windows 7)


共 (1) 个答案

  1. # 1 楼答案

    打开EclipseWindow -> 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;
        }