2017-01-01 4 views
-4

현재 프로젝트를 진행 중이며 문제가 발생했습니다. 필자가 작성한 프로그램에는 int보다 큰 큰 숫자가 필요하다. 그래서 저는 수학을 사용했습니다. 빅터 너. 많은 BigInteger를 함께 추가 한 후에 OutofMemory 오류가 발생했습니다. 나는 그것이 데이터 유형이 충분히 크지 않다는 것을 의미한다고 가정하고있다. 더 큰 데이터 유형이 있습니까? 그렇지 않은 경우 어떻게이 문제를 해결할 수 있습니까?BigInteger보다 큰 변수 유형이 있습니까?

+4

아니요, 예외는 아닙니다. 그 이름 (및 그 javadoc)가 가리키고있는 것처럼, JVM의 메모리가 부족한 것을 의미합니다. –

+0

그래, JVM에 더 많은 메모리를 할당 할 수 있습니까? 아니면 모든 시스템 메모리를 사용하고 있습니까? – OctopusProteins

+1

Google은 "JVM을 더 많은 메모리에 할당 할 수 있습니까?"라고 대답하면 답을 얻을 수 있습니다. Google은 귀하의 친구입니다. –

답변

1

JVM의 힙 공간이 부족하여 오류가 발생합니다. 당신은

java -Xmx256m MyClass.java 

Xmx- Max Heap Size 
+0

@OctopusProteins 아니요 Windows의 경우 명령 행에서, Linux의 경우 터미널에서 실행하고 프로그램을 실행하십시오. – user1613360

+0

아하네. 알았어. 할당을 저장합니까 아니면 재시작 할 때마다 다시 실행해야합니까? – OctopusProteins

+0

@OctopusProteins 그냥 명령입니다. 코드를 아무 곳에 나 추가 할 필요가 없습니다. 기본 최대 힙 크기는 물리적 메모리 크기의 192 배까지 물리적 메모리의 절반이며 실제 메모리의 1/4 정도가 실제 메모리 크기 인 1 기가 바이트입니다. 자동으로 발생하도록 bash 파일에서 설정할 수 있습니다. – user1613360

0

당신이 여기에 코드를 붙여 넣은 경우가 더 좋을 거라 사용하여 힙 크기를 증가 시도 할 수 있습니다,하지만 난 당신이 지금까지 게시 한 내용과 대답을하려고합니다.

자바의 BigIntegers는 사용하는 작업의 결과를 저장하는 데 필요한만큼 크게 만들어집니다. BigInteger는 오버플로 예외가없는 Integer와 같습니다. 오라클 워드 프로세서 :

산술 연산의 의미는 Java 언어 사양에서 정의 된대로 Java 정수 계산 연산자의 의미를 정확히 모방합니다.

대부분의 경우 Java 프로세스에 충분한 메모리를 할당하지 않습니다. 당신이 당신의 자바 프로세스를 실행하고 있지만, 이러한 인수를 찾는 방법을 잘 모르 제공합니다 :

java -Xmx1024M -Xms1024M 
+0

예, 지금 시도 중입니다. 감사. – OctopusProteins

3

변수 타입이 BigInteger를보다 더 있습니까?

아니요. Biginteger는 배후에서 바이트 배열을 사용하고 필요할 때마다 더 많은 공간을 할당합니다. 크기 제한은 사용 가능한 메모리입니다.

메모리의 절반을 사용했을 때 한계에 부딪 힐 수 있습니다. 숫자가 커지면 먼저 사용 공간보다 큰 공간을 할당해야합니다.