아래에서 오류가 발생합니다.해결 방법 java.lang.OutOfMemoryError
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space.
누군가가이 문제를 해결하는 방법을 알고 있습니까?
감사합니다,
마헨드라 Athneria 대신 @keatch로 System.gc()
을 강제
아래에서 오류가 발생합니다.해결 방법 java.lang.OutOfMemoryError
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space.
누군가가이 문제를 해결하는 방법을 알고 있습니까?
감사합니다,
마헨드라 Athneria 대신 @keatch로 System.gc()
을 강제
내가 그것을 메모리 누출 무엇을 찾아 더 나은 생각 제안했다. 문제의 원인을 찾는 데 도움이되는 jHat
(Java Heap Analysis Tool) 도구가 있습니다.
Here 설명 힙 덤프를 만드는 방법.
메모리를 적게 사용하십시오.
실행중인 응용 프로그램의 종류를 모른 채 문제가 무엇인지 정확하게 말하기는 어렵습니다. 그래서이 대답은이 문제를 다루기위한 일반적인 조언을 포함 할 것입니다.
JDK와 함께 제공되는 jvisualvm
응용 프로그램을 사용하십시오. 실행중인 프로세스에 연결하고 메모리가 어떻게 사용되고 있는지 분석 할 수 있습니다.
거기에 없어야 할 많은 수의 개체가 있는지 조사합니다. 한 클래스의 인스턴스가 20,000 개 있다는 것을 알게되면 수학을 수행하고 실제로 많은 클래스가 있는지 확인하십시오. 실제로 존재해야하는 것보다 더 많은 인스턴스가있는 오브젝트 유형을 찾으십시오. 그럼 왜 그렇게 많은지 알아 내야합니다.
이러한 추가 개체는 생성 중이며 제대로 역 참조되지 않을 수 있습니다. 어딘가에 데이터 구조에 넣을 수도 있고 제거하지 않을 수도 있습니다. 필요한만큼 끝내지 않는이 데이터를 참조하는 스레드가 계속 실행 중일 수 있습니다. 가비지 수집해야하는 데이터를 계속 참조하는 이유는 여러 가지가 있습니다.
중요한 정보는 어떤 개체 클래스가 이와 같이 수량이 폭발 하는지를 아는 것입니다. 일단 그 사실을 알게되면, 그 클래스의 생성자와 소멸자를 오버라이드하여 얼마나 많은 객체가 생성되고 소멸되었는지, 그리고 어디에서 로그했는지 기록 할 수 있습니다. 이 데이터를 통해 추가 오브젝트가 작성되는 위치 또는 삭제되지 않는 위치를 판별 할 수 있습니다. 이 문제를 해결하면 오류가 중지됩니다.
물론 처리하는 데이터에 실제로이 정도의 메모리가 필요할 수도 있습니다. 프로젝트에 관해서는 아무 말도하지 않았으므로 정확하게 판단하는 것은 불가능합니다. 이 경우 데이터를 분할하여 한 번에 일부만로드하고 처리하고 메모리에서 해제 한 다음 다음 데이터 묶음으로 이동하는 방법을 알아야합니다.
나는 이러한 문제를 해결하기 위해 위의 모든 기술을 사용했으며 이전에 이러한 기술을 모두 사용했습니다.
이클립스 내에서 실행중인 메모리 또는 응용 프로그램이 실행되고 있습니까?
메모리 누수가 아니라 더 많은 메모리가 필요하다고 가정하면 이클립스 내부에서 실행되는 응용 프로그램에 전달 된 VM 인수를 변경할 수 있습니다. 실행 구성 -> VM 인수 -> -Xmx512m
문제가 eclipse이면 설정 파일 eclipse.ini를 편집하고 -Xmx 인수를 변경할 수 있습니다.
그러나 메모리 누수가있는 경우 최대 힙 크기를 늘리면 문제가 조금 더 숨겨집니다.
힙 공간을 늘리려고 했습니까? 어쩌면 메모리가 많이 필요합니다 (기본값은 매우 낮습니다) –
스택 추적을 추가 할 수 있다면 도움이됩니다. 주어진 정보로 원인을 진단하는 것은 불가능합니다. –
[ "java.lang.OutOfMemoryError : Java 힙 공간"오류 (64MB 힙 크기)를 처리하는 방법] (http://stackoverflow.com/questions/37335/how-to-deal-with-java- lang-outofmemoryerror-java-heap-space-error-64MB-heap) – Mark