2014-12-14 2 views
3

메인이 throw하는 경우 JVM에서 OS로 예외를 발생시키는이 질문을 받았습니다. JVM은 응용 프로그램 실행을 중지하지만이 예외가 처리되는 위치는 무엇입니까?JVM이 OS에 예외를 발생시키지 않습니까?

public static void main(String[] args) throws Exception { 
    display(); 
} 

public static void display() throws Exception { 
    throw new RuntimeException(); 
} 

예외가 발생할 수있는 경우이를 지정하십시오.

+1

이해할 수 없습니다. JVM에서 '주 스로우 (main throws)'가 실제로 의미하는 예외가 발생합니다. 이것은 동어 반복이나 넌센스입니다. – EJP

+0

업데이트 됨. 그리고 "main"은 단지 예일 뿐이며 웹 서버의 경우에는 발생할 수 있습니다. –

+2

@EJP 나는 JVM이 제목을 기반으로 운영 체제로 예외를 던질 것이라는 것을 아주 분명히 의미한다고 생각했습니다. 영어가 완벽하지는 않지만 질문을 이해하는 데 아무런 문제가 없었습니다. –

답변

6

OS에서 처리하는 것이 아니라 JVM 자체에서 처리합니다. Java language specification §11.3에서 : 예외를 처리 할 수있는 캐치 절을 찾을 수없는 경우

, 현재의 thread (예외를 발생 스레드)는 JVM이 실행됩니다 귀하의

을 종료 단일 스레드는 종료됩니다. JVM은 다음 자체를 종료합니다 JLS §12.8에 따라 (강조는 추가)하지

  • 모든 스레드 : 두 가지 중 하나가 발생하면

    프로그램은 모든 활동과 종료를 종료 디먼 스레드는 종료됩니다.

  • 일부 스레드는 Runtime 클래스 또는 System 클래스의 exit 메소드를 호출하고 보안 관리자가 종료 조작을 금지하지 않습니다.

이것은 모든 유형의 예외와 함께 발생할 수 있습니다. 언어 사양 측면에서는 an "exception" is actually a java.lang.Throwable and any of its subclasses입니다. 즉, ErrorException을 확장하는 객체가 아니라 Throwable에서 상속 한 스레드/JVM 및 기타 항목을 종료합니다.

+0

그래서 JVM이 OS에 예외를 던지지 않을 방법이 없습니까? OutOfMemory의 경우에도 예외는 아닌가? –

+2

OS에 예외를 던지는 응용 프로그램 개념이 포함 된 OS가 있는지 확신하지 못합니다. 예외는 본질적으로 응용 프로그램 범위입니다. 운영 체제는 응용 프로그램 예외와 관련하여 아무 것도 할 수 없습니다. 그러나이 특별한 경우, 아니요, OS는 절대로 "예외"를받지 못합니다 (특정 OS에 대해 어떤 의미가 있는지). JVM은 단순히 종료됩니다. –

+0

나는 그렇게 믿는다. 그러나 서버 로깅 덤프가 표시되는 경우가 있습니다.이 경우 JVM은 예외를 발생시키고 OS는 임의의 위치 또는 일부 임시 위치에서만 로그를 기록합니다. 아니? –

0

Java는 JVM에서 실행되므로 모든 예외가 JVM에서 처리됩니다. 간단히 말해서, Java 예외는 OS 레벨로 전달되지 않습니다. 즉, OS 수준에서 JAVA 예외를 catch 할 수 없습니다.

희망 사항. 질문에 대한 답변입니다.

관련 문제