2014-09-16 2 views
0

정수 (integer)와 장거리 (long range)에서 배열을 호출하기 때문에 숫자 또는 정수를 만들려고합니다. 여기 내 코드가있다. 내가 그것을 실행할 때, '메모리 힙 크기 초과'예외가 발생했습니다. HVM 구성에서 덤프 파일 크기를 늘리려고했습니다. .크기가 10 자리 숫자 이상인 숫자 배열을 선언하는 방법은 무엇입니까?

코드를 (반드시 그냥 끝으로 건너 이해할 필요가 그나마 작동하지 않습니다

int dsum=0; 
int c1=-1; 
int abno[]=new int[28124]; 

for(int i=2;i<28124;i++) 
{ 
    int f=(i/2); 
    for(int j=1;j<=f;j++) 
    { 
     if(i%j==0) 
     { 
      dsum+=j; 
     } 
    } 
    if(dsum>i) 
    { 
     c1++;// AROUND 29000 IN THE END 
     abno[c1]=i; 
    } 
} 
int abnos[]=new int[(c1*(c1+1))/2];//CANT STORE THIS BIG A VALUE 
+1

계산 결과가 예상 한 값을 반환하는지 확인하십시오. 그렇다면 힙을 더 크게 만들 필요가 있습니다. –

+0

예외의 ** 전체 스택 추적 **은 무엇입니까? ** ** 질문에 ** 수정하십시오. – gparyani

+1

'(c1 * (c1 + 1))/2'의 값은 무엇입니까? – AlexR

답변

2

당신은

자바

-Xmx<size> ,maximum heap size 
-Xms<size> ,minimium heap size 
에 힙 크기를 증가시킬 수 있습니다 예를 들어, 자바 -Xms 256m - Xmx 6g yourProgramName. 일부 IDE (예 : intellij)를 사용하는 경우 VM 옵션을 통해 이러한 옵션을 전달할 수 있습니다.

+0

에 Bluej를 사용하고 있습니다. 필자가 언급 한대로 이미 bluej.vm.args = -Xms1024m -Xmx1024m을 설정 파일에 추가하려고 시도했습니다. 작동하지 않는 것 같습니다. Ive도 1024에서 2048 및 4062로 변경했습니다. – bholagabbar

+0

@BholaGabbar는 (c1 * (c1 + 1))/2의 값을 제공 할 수 있습니까? – sol4me

+0

395353140 값이 – bholagabbar

1

힙 공간이 1.6GB에 불과한 것을 요구하는 경우 32 비트 JVM ca n은 OS, 환경 및 정확한 구현에 따라 1.2-1.6GB의 힙 공간 만 처리합니다. 여기서는 어떤 환경 설정도 도움이되지 않습니다.

옵션은 다음과 같습니다

  • 진짜 IDE를 확인하고 64 비트 VM을 사용하도록 구성합니다.
  • BlueJ는 일반적으로 학습 목적으로 사용됩니다. 따라서 작업은 100MB의 메모리를 필요로 할 수있는 무언가에 가깝습니다. 공연은 말할 것도 없습니다. 적은 공간을 사용하기 위해 무엇을 하든지 솔루션을 개선하십시오.
  • 코드를 BlueJ에 작성하고 적절한 64 비트 VM과 함께 명령 행을 사용하여 시작하십시오.
  • 64 비트 VM을 지원하도록 BlueJ를 수정하십시오.
+0

나는 당신이 말하는 것을 얻습니다. 나는 64 비트에 대해 'FIX'blueJ를 사용할 수 없다고 확신한다. 나는 식으로 그것을 시도 할 것이다. 또한, 어떻게 명령 프롬프트에서 Java 프로그램을 실행합니까? 필자는 IDE 자체에서 System.out.print 문을 컴파일하고 사용하는 습관에 빠져있었습니다. – bholagabbar

+0

Google "커맨드 라인에서 실행되는 자바":) 소스를'.class'로 컴파일하고'.jar' 파일로 패키징 한 다음'java' 프로그램을 사용하려면'javac' (JDK와 함께)를 사용해야합니다 (JDK 및 JRE와 함께 제공됨)를 사용하여 실제로 실행합니다. 또는 BlueJ가 패키징을 지원한다면, 두 번 클릭하면 실행 가능한'.jar'을 만들 수 있습니다 (Java가 제대로 설정 되었다면) – Ordous