자바 이상 지출 제거
지출은 어디에 있습니까
jdk 원본 보기
/**
* Constructs a new throwable with the specified cause and a detail
* message of {@code (cause==null ? null : cause.toString())} (which
* typically contains the class and detail message of {@code cause}).
* This constructor is useful for throwables that are little more than
* wrappers for other throwables (for example, {@link
* java.security.PrivilegedActionException}).
*
* The {@link #fillInStackTrace()} method is called to initialize
* the stack trace data in the newly created throwable.
*
* @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.4
*/
public Throwable(Throwable cause) {
fillInStackTrace();
detailMessage = (cause==null ? null : cause.toString());
this.cause = cause;
}
주요한 성능 병목은fillInStackTrace에 있는데 이것은native 방법이다.모든 이상 창고를 구축합니다.방법 서명은 다음과 같다.synchronized 수식의 동기화 방법이 있어 성능에 큰 영향을 미친다
/**
* Fills in the execution stack trace. This method records within this
* {@code Throwable} object information about the current state of
* the stack frames for the current thread.
*
* If the stack trace of this {@code Throwable} {@linkplain
* Throwable#Throwable(String, Throwable, boolean, boolean) is not
* writable}, calling this method has no effect.
*
* @return a reference to this {@code Throwable} instance.
* @see java.lang.Throwable#printStackTrace()
*/
public synchronized Throwable fillInStackTrace() {
if (stackTrace != null ||
backtrace != null /* Out of protocol state */ ) {
fillInStackTrace(0);
stackTrace = UNASSIGNED_STACK;
}
return this;
}
private native Throwable fillInStackTrace(int dummy);
어떻게 해결합니까
protected Throwable(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
if (writableStackTrace) {
fillInStackTrace();
} else {
stackTrace = null;
}
detailMessage = message;
this.cause = cause;
if (!enableSuppression)
suppressedExceptions = null;
}
이상을 찾다
때때로 당신은 그 이상을 가장 많이 던진 것을 알 수 없다. 어떤 삼자 가방은 자신은throw Exception이지만 자신은catch에 산다.
이상으로 정상적인 업무 절차를 실현하는 데는 다음과 같은 장점이 있다
단점: 성능 향상:
사용자 정의 이상 유형이 정말로 Stack trace가 필요하지 않다면, 나는 Fill InStack Trace () 를 덮어써서this로 돌아가는 것을 추천합니다.창고에 기어오르는 것은 투매 비용이 많은 주요 원인 중의 하나다.
위에서 말한'생각지도 못했던'최적화:'fast throw'에 대해 저는 일상적인 업무에서 오류 로그를 볼 때 자주 보았습니다. 어떤 코드 위치에서 NullPointer Exception이 빈번하게 던져지고 처음에는 이상 창고도 출력하지만 나중에는'throw NullPointer Exception'이라는 말만 출력됩니다. 가-X:-Omit Stack Trace InFast Throw 시작 파라미터를 통해 이 문제를 해결했습니다.
전재 주소:https://www.jianshu.com/p/4c62967ce1c6
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 문자열 풀우리는 Java에서 문자열이 힙 메모리 영역에 저장된다는 것을 알고 있습니다. 이 힙 메모리 내부에는 String Pool이라는 특정 메모리 영역이 있습니다. 문자열 프리미티브를 생성하면 자바 문자열의 불변성 덕분에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.