Exception Performance Cost
예외가 성능에 미치는 영향을 정리한 글이다.
Performance Effects of Exceptions in Java | Baeldung
Java exceptions are considered expensive and shouldn't be used for flow control. This tutorial will prove that this perception is correct.
www.baeldung.com
결론부터
Since throwing and handling exceptions is expensive, we shouldn't use it for normal program flows. Instead, as its name implies, exceptions should only be used for exceptional cases.
예외를 new로 생성하고 catch로 잡아서 trace를 추적하는 것은 비용이 매우 비싸다.
예외는 정말 그 의미 자체로 예외적인 상황에서만 사용해야한다.
얼마나 차이날까?
ExceptionBenchmark.createExceptionWithoutThrowingIt avgt 10 16.605 ± 0.988 ms/op
ExceptionBenchmark.doNotThrowException avgt 10 0.047 ± 0.006 ms/op
ExceptionBenchmark.throwAndCatchException avgt 10 16.449 ± 0.304 ms/op
ExceptionBenchmark.throwExceptionAndUnwindStackTrace avgt 10 326.560 ± 4.991 ms/op
ExceptionBenchmark.throwExceptionWithoutAddingStackTrace avgt 10 1.185 ± 0.015 ms/op
- 예외를 new로 생성만하고 던진 메서드
- 예외에대해 전혀 고려하지않은 메서드 (비교대상)
- 예외를 던지고 잡은 메서드
- 예외를 잡긴했지만 trace를 추적한 메서드
- 예외를 던지고 잡고 trace는 추적하지않은 메서드
4번 메서드가 비용이 가장 비싸다. 약 10000배 비싸다.
잘 생각해서 사용하자.
비싸다는 사실을 인지했다면 예외를 던질 때 한 번쯤은 생각하게될 것같다.
그렇다면 왜 이렇게 예외는 비싼 것일까?
4번이 가장 비용이 비싸다는 것을 알아봤다.
StackTrace를 보겠다는 것은 해당 예외가 처리되기까지 모든 호출스택을 뒤져서 그 순서를 파악하겠다는 것이다.
에러가 발생해 디버깅하다보면 모든 메서드를 거쳐서 에러까지 도달하고 우린 어떤 지점에서 에러가 발생했는지를 파악한다.
같은 맥락으로 StackTrace는 런타임 중에 JVM이 대신 디버깅을 해준다고 생각하면 된다.
exceptions should only be used for exceptional cases
'Java' 카테고리의 다른 글
[WAS를 만들어보자 (3)] HttpMessageBody 추출하기 (1) | 2024.03.23 |
---|---|
[WAS를 만들어보자 (2)] HTTP 메세지 출력하기 (0) | 2024.03.23 |
[WAS를 만들어보자 (1)] 자바로 TCP/IP 통신하기 (0) | 2024.03.23 |
Faker를 이용한 테스트데이터 만들기 + 데이터 30만건 밀어넣기 (0) | 2023.07.16 |
사이드프로젝트::BlackJack 되돌아보기 (0) | 2023.04.27 |