2011-10-17 2 views
0

내 응용 프로그램에서 outofmemoryerror가 run()을 종료시키고 있다고 의심하지만 로그가 없기 때문에 오류가 표시되지 않았습니다.스레드의 run()에서 OutofMemoryError를 잡는 것이 현명한 방법입니까?

이 경우 어떻게해야합니까?

+0

'예외'또는 '오류'가 캐치되지 않으면 출력 ('System.err')에 나타나야합니다. –

+1

일반적으로 캐치되지 않는 예외가있을 때 JRE는 스택 추적을 인쇄합니다. 어떤 런타임 환경에서 로그가없는 곳을 사용하고 있습니까? –

+0

중복 가능성 [OutOfMemoryError로 인해 스레드가 죽을 수 있습니까?] (0120-367-301) – EJP

답변

1
나는 다른 사람에 대해 알고하지 않습니다

하지만 결코 (IMHO) catch 또는 Error를 확장 throws 아무것도. Javadoc의 상태에서 followig 문 : 이러한 오류가 비정상이기 때문에

방법은, 절 방법의 실행 중에 throw되지만 캐치되지 않는 오류의 서브 클래스를 throw의에 선언 할 필요가 없습니다 은 이 아니어야합니다..

Error

System.err 인쇄하고 OutofMemoryException을 피하려면, 대신 heapsace을 증가한다.

+0

결코 발생해서는 안되기 때문에 발생하지 않을 수도 있습니다. Threr는 여전히 실패하는 것보다 더 정상적으로 일을 처리하는 방법을 알고있는 특별한 경우 일 수 있습니다. 포스터의 경우 환경을 일관성없는 상태로 두지 않고 나머지 응용 프로그램을 중지 할 수있는 가능성이있을 수 있습니다. 그러나 oome로 고통받는 응용 프로그램을 중지하면 다른 것으로 이어질 수 있음을 명심해야합니다. – Jonathan

1

왜 부모와 자식 스레드가 모두 같은 JVM에서 생성되고 동일한 힙 메모리를 공유하는지 알 수없는 이유가 없습니다. 움이 발생하면서 JVM 내에서 발생하는 뭐죠 볼 수 -XX:+HeapDumpOnOutOfMemoryError : 같은 here

2

당신은이 플래그를 사용하여 JVM을 실행해야합니다 설명하지만 OOM 오류를 잡을 수있는 드문 요구 사항이 있습니다. 이것은 HPROF 파일을 작성합니다.이 파일은 프로파일 러로 분석 할 수 있습니다. Eclipse MAT은 이것을위한 좋은 방법입니다. -XX:HeapDumpPath=/tmp을 사용하여 HPROF를 쓸 경로를 구성하십시오.

관련 문제