2017-12-28 85 views
0

질문이 있습니다 What is the difference between try-catch and throws Exception in terms of performance? 입니다.try-catch 버그가없는 함수에 적용되는 JVM 최적화가 예외를 throw합니까?

다음 질문은 "try-catch 버그가없는 함수에 적용되는 JVM 최적화가 예외를 throw합니까?"입니다. 예를 들어, 모든 메소드는 예외를 던지고 main 메소드는 모든 메소드와 코드를 감싸는 try-catch를 가지고있다. 이 경우, "Effective Java"에 따라 :

try-catch 블록 내에 코드를 배치하면 현대 JVM 구현이 달리 수행 할 수있는 특정 최적화가 금지됩니다.

JVM은 main 메소드의 코드 최적화를 수행하지 않습니다. 문제는 예외를 던지는 메소드에서 JVM을 최적화하여 코드를 작성하는 것입니다.

+0

정확히 무엇을 의미할까요? 'try-catch '가없는 메소드의 JVM 최적화가 예외를 throw하는지 여부를 묻는 중입니까? 아니면'try-catch'와'throws Exception'을 선언하는 메소드의 최적화 사이의 차이점을 알고 싶습니까? – diginoise

+0

나는 그 질문에 대해 조금 더 자세히 설명한다. – Finch

+0

무슨 소리 야? – DodgyCodeException

답변

1

throws 절을 사용하는 경우에는 그렇지 않습니다. 모든 메소드 정렬에는 "보이지 않는 throws RuntimeException, Error 절"이 있습니다. 즉, 뭔가를 던질 수 있습니다.

또한 JVM 수준에서 확인 된 예외 같은 것은 없으며 바이트 코드에는 존재하지 않는 순수 Java 소스 기능입니다 (JVM에서 실행되고 확인 된 예외가없는 많은 언어가 있으며 AFAIK 자바는 유일한 실험이다).

실제로 예외를 던지는 것은 비용이 많이 들지만 기본적으로 어떤 방법으로 던질 수 있습니다. 심지어 빈 메서드는 StackOverflowError을 던질 수 있습니다. 예외가 실제로 발생할 경우에만 비용이 많이 듭니다.

try-catch 블록의 경우 예외가 실제로 throw 될 때 참조되는 어딘가에 항목이 있습니다. 그렇지 않으면 사용되지 않습니다. 이 정보를 사용하지 못하게하는 최적화를 막을 수도 있고 그렇지 않을 수도 있습니다. JVM이 더 좋아지고 나아졌습니다.

어쨌든 throws 절을 추가해도 성능에 영향을 미치지 않으며 대부분의 경우 올바른 것입니다.