Java에서 메서드 매개 변수를 최종 선언 할 성능 이유가 있습니까?
-
06-07-2019 - |
문제
Java에서 메서드 매개 변수를 최종 선언 할 성능 이유가 있습니까?
에서와 같이 :
public void foo(int bar) { ... }
대:
public void foo(final int bar) { ... }
그것을 가정합니다 bar
읽고 수정되지 않습니다 foo()
.
해결책
최종 키워드는 로컬 변수 및 매개 변수의 클래스 파일에 나타나지 않으므로 런타임 성능에 영향을 줄 수 없습니다. 단지 사용은 코더를 변경하지 않도록 코더의 의도를 명확히하는 것입니다 (많은 사람들이 그 사용에 대한 모호한 이유를 고려) 및 익명의 내부 클래스를 다루는 것입니다.
수정 자에 관계없이 런타임에서 최적화 컴파일러에 의해 메소드가 인쇄되므로 메소드 자체의 최종 수정자가 성능 게인을 갖는 지 여부에 대한 많은 인수가 있습니다. 이 경우 메소드의 재정의를 제한하는 데서만 사용해야합니다.
다른 팁
최종 매개 변수의 유일한 이점은 익명 중첩 클래스에서 사용할 수 있다는 것입니다. 매개 변수가 변경되지 않으면 컴파일러는 이미 최종 수정자가 없어도 정상 작동의 일부로이를 감지합니다. 버그가 예기치 않게 할당 된 매개 변수로 인해 버그가 발생하는 것은 드 rare니다. 메소드 가이 수준의 엔지니어링이 필요한 방법이 크면 더 작게 만들면 매개 변수를 변경할 수 없습니다.
JIT 컴파일러와 같은 클래스 로딩 후 작동하는 컴파일러는 최종 방법을 활용할 수 있습니다. 결과적으로 최종 선언 된 방법은 성능 이점을 가질 수 있습니다.
http://www.javaperformancetuning.com/tips/final.shtml
아 그리고 또 다른 좋은 자원
메소드 내에서 선언 된 비정형 로컬 변수를 사용하는 것보다 위의 점이 더 있습니다. 내부 클래스 인스턴스는 스택 프레임을 오래 살 수 있으므로 내부 객체가 여전히 살아있는 동안 로컬 변수가 사라질 수 있습니다.
컴파일러가 int와 같은 원시 유형을 갖는 모든 개인 정적 최종 변수를 제거하고 C ++ 매크로와 같이 코드에서 직접 인라인을 인화 할 수 있다고 가정합니다.
그러나 이것이 실제로 이루어지면 단서가 없지만 기억을 저장하기 위해 수행 할 수 있습니다.