답변:
잠시 동안 스택 오버플로로 넘어가십시오. Java 예외는 얼마나 느립니까?
예외를 던지는 데 가장 많은 비용이 드는 부분은 예외와 함께 발생하는 스택 추적의 인구 집단입니다.
이 스택 추적은 문제를 디버깅 할 때 문제가 발생하는 위치를 파악하려고 할 때 매우 유용합니다. 문제에 대한 표준 질문 중 하나는 "코드는 무엇입니까"와 "스택 추적은 무엇입니까"입니다. 이 두 가지가 없으면 문제를 진단하는 것이 거의 불가능합니다.
그러나 모든 예외가 문제에 의해 생성되는 것은 아닙니다 . 그들 중 일부는 거의 기대합니다.
어떤 소스에서 String을 얻었고 Integer.decode 를 사용하여 정수 형식으로 다시 가져 오려는 상황을 고려하십시오 .
Integer foo = Integer.decode(str);
그러나 그것은 decode
확인 을 던졌습니다 NumberFormatException
. 확인...
Integer foo;
try {
foo = Integer.decode(str);
} catch (NumberFromatException e) {
// raise an error back to the input form
}
그러나 실제로 스택 추적에 신경 쓰지 않지만 거기에 있습니다. 스택 트레이스를 채웠기 때문에 조금 느리게 느립니다.
따라서 스칼라에는 다음이 있습니다 NoStackTrace
.
효율성상의 이유로 스택 추적을 채우지 않는 예외에 대한 특성. scala.sys.SystemProperties의 시스템 속성 래퍼를 통해 전역 적으로 스택 추적 억제를 비활성화 할 수 있습니다.
필요없는 것을 채우지 마십시오. 스택 트레이스를 처리하기 때문에 스택 트레이스에 신경 쓰지 않아도됩니다. 이것은 지나가는 것이 아니며 그다지 뛰어난 것은 아닙니다.
당신이 취급하는 것을 알 때 그것을 사용하는 것은 나쁜 습관이 아닙니다. 그러나 체인에 이것을 전달하는 경우 사용하지 마십시오. 예외가 발생한 위치를 기록하면됩니다.