2016-07-17 1 views
1

1.5G xml 파일이 있고 DOM java 파서를 사용합니다.이 문제를 해결 한 후에도 DOM은 큰 데이터를위한 좋은 도구는 아니지만 여전히 궁금합니다. 아래의 문제에 관해서). 내 문제는 "OutOfMemoryError : Java 힙 공간"입니다. 이미 존재하는 대답을 기반으로 eclipse.ini -xms와 -xmx 크기를 모두 8096m으로 변경하고 eclispe 창에 힙 상태를 표시하여 힙 크기의 크기를 모니터링합니다. 익숙한. 이 코드를 실행할 때, "80m/8096m"을 사용하고 "out memory"버그를 버렸을 때 "8096m - 80m"과 같이 명확하게 사용되지 않은 공간이 분명히 있지만 왜 메모리가 부족한 지 궁금합니다. .8GB 힙 크기가 할당 된 메모리가 잠겨 있음

+3

"버그"? 아니요, 코드가이를 수행하고 있습니다. Visual VM과 같은 것으로 코드를 프로파일 링하여 메모리가 소비되는 곳을 확인하십시오. – duffymo

+3

이클립스가 아닌 모든 메모리를 사용하는 프로그램이라면 eclipse가 ecliipse 자체에 대한 VM 인수가 아닌 * 프로그램 *을 실행하는 데 사용하는 VM 인수를 변경해야합니다. 이 작업을 수행하는 방법은 http://stackoverflow.com/questions/4175188/setting-memory-of-java-programs-that-runs-from-eclipse를 참조하십시오. – wakjah

+0

코드가 여전히 OOME을 던지면 1.5GB xml 및 -Xmx8096m의 경우 코드에서 개선이 필요한 부분이 있다는 것이 거의 확실합니다. 대용량 데이터 유형의 경우 일반적으로 SAX 구문 분석이 더 좋습니다. 또한 Xmx를 어떻게 지정하고 있습니까? 우리를 보여줄 수 있습니까? – SomeDude

답변

0

I wonder why there is clearly huge space not used, i.e. "8096m - 80m ", but still get to out of memory.

당신은 뭔가 1 잘못 해석된다. 그리고 (IMO) 가장 가능성있는 생각은 IDE (Eclipse)에서 사용하는 메모리와 응용 프로그램을 실행하는 데 사용되는 메모리를 혼동하고 있다는 것입니다.

이상한 (그리고 권장 할 수없는) 일을하지 않는 한, 응용 프로그램은 힙 매개 변수가 IDE 힙 매개 변수와 독립적 인 별도의 JVM에서 실행됩니다. 당연히 (나에게) 실제로 Eclipse IDE 프로세스의 메모리 사용량은 작다. 애플리케이션이 실행되는 곳이 아니기 때문이다.

Eclipse 용 힙 매개 변수를 조정해도 응용 프로그램 JVM 힙 매개 변수와 아무런 차이가 없습니다! 실제로해야 할 일은 응용 프로그램의 Eclipse 실행기 구성에서 힙 매개 변수를 설정하는 것입니다. Eclipse 내에서. 또는 명령 프롬프트에서 직접 응용 프로그램을 시작하십시오.


하지만이 경우에는 문제가 될 수 있습니다. 매우 놀랄 것입니다 8GB 자바 힙에 DOM으로 1.5GB XML 파일을 표현할 수 있다면. 표현의 오버 헤드가 너무 큽니다.


1 - 이클립스 IDE 자체가 메모리 부족 경우, 그것은 끔찍하게 느린 얻을하고 충돌 것입니다. 거기 있었어. 보았다. 일반적으로 매우 큰 코드 기반을 개발하거나 검사 할 때 발생합니다.

+0

해답을 찾아 주셔서 감사합니다! 난 아직도 두 가지 혼란스러운 것들을 가지고있다 : 1. 어떻게 일식에서 jvm 메모리를 설정하는 것이 더 구체적 일 수 있는가 2. jvm과 일식 메모리, 변수가 jvm 메모리에 저장된 다음 일식 메모리는 무엇을 위해 사용 되는가? – michael

+0

1) http://stackoverflow.com/questions/15313393/how-to-increase-application-heap-size-in-eclipse. 2) 마치 두 대의 자동차를 가지고있는 것과 같습니다. 그들에는 2 개의 휘발유 탱크가있다. 한 자동차의 가솔린 ​​탱크에 가솔린을 넣고 다른 자동차의 가솔린 ​​탱크에는 가솔린을 넣지 마십시오. Eclipse를 실행하는 JVM은 애플리케이션을 실행하는 JVM과 다릅니다. –

+0

감사합니다 스티븐. 두 가지 빠른 질문 1. 이클립스에서 일식 메모리 사용을 모니터링 할 수 있기 때문에 jvm 메모리 사용을 모니터링하는 방법이 있습니까? jvm 메모리를 4G로 변경하면 dom에서 큰 데이터를 처리하지 못할 수도 있습니다. 2. jvm 및 일식 메모리에 대한 차이점에 대한 명확한 아이디어를 얻지 못했습니다. 링크를 제공하거나 더 설명해 주시겠습니까? 아날로그는 다소 혼란 스럽습니다. – michael

관련 문제