내 응용 프로그램에서 outofmemoryerror가 run()을 종료시키고 있다고 의심하지만 로그가 없기 때문에 오류가 표시되지 않았습니다.스레드의 run()에서 OutofMemoryError를 잡는 것이 현명한 방법입니까?
이 경우 어떻게해야합니까?
내 응용 프로그램에서 outofmemoryerror가 run()을 종료시키고 있다고 의심하지만 로그가 없기 때문에 오류가 표시되지 않았습니다.스레드의 run()에서 OutofMemoryError를 잡는 것이 현명한 방법입니까?
이 경우 어떻게해야합니까?
하지만 결코 (IMHO) catch
또는 Error
를 확장 throws
아무것도. Javadoc의 상태에서 followig 문 : 이러한 오류가 비정상이기 때문에
방법은, 절 방법의 실행 중에 throw되지만 캐치되지 않는 오류의 서브 클래스를 throw의에 선언 할 필요가 없습니다 은 이 아니어야합니다..
Error
System.err
인쇄하고
OutofMemoryException
을 피하려면, 대신 heapsace을 증가한다.
결코 발생해서는 안되기 때문에 발생하지 않을 수도 있습니다. Threr는 여전히 실패하는 것보다 더 정상적으로 일을 처리하는 방법을 알고있는 특별한 경우 일 수 있습니다. 포스터의 경우 환경을 일관성없는 상태로 두지 않고 나머지 응용 프로그램을 중지 할 수있는 가능성이있을 수 있습니다. 그러나 oome로 고통받는 응용 프로그램을 중지하면 다른 것으로 이어질 수 있음을 명심해야합니다. – Jonathan
왜 부모와 자식 스레드가 모두 같은 JVM에서 생성되고 동일한 힙 메모리를 공유하는지 알 수없는 이유가 없습니다. 움이 발생하면서 JVM 내에서 발생하는 뭐죠 볼 수 -XX:+HeapDumpOnOutOfMemoryError
: 같은 here
당신은이 플래그를 사용하여 JVM을 실행해야합니다 설명하지만 OOM 오류를 잡을 수있는 드문 요구 사항이 있습니다. 이것은 HPROF 파일을 작성합니다.이 파일은 프로파일 러로 분석 할 수 있습니다. Eclipse MAT은 이것을위한 좋은 방법입니다. -XX:HeapDumpPath=/tmp
을 사용하여 HPROF를 쓸 경로를 구성하십시오.
'예외'또는 '오류'가 캐치되지 않으면 출력 ('System.err')에 나타나야합니다. –
일반적으로 캐치되지 않는 예외가있을 때 JRE는 스택 추적을 인쇄합니다. 어떤 런타임 환경에서 로그가없는 곳을 사용하고 있습니까? –
중복 가능성 [OutOfMemoryError로 인해 스레드가 죽을 수 있습니까?] (0120-367-301) – EJP