Java에서 메서드 매개 변수를 최종 선언 할 성능 이유가 있습니까?

StackOverflow https://stackoverflow.com/questions/266806

  •  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

아 그리고 또 다른 좋은 자원

http://mindprod.com/jgloss/final.html

메소드 내에서 선언 된 비정형 로컬 변수를 사용하는 것보다 위의 점이 더 있습니다. 내부 클래스 인스턴스는 스택 프레임을 오래 살 수 있으므로 내부 객체가 여전히 살아있는 동안 로컬 변수가 사라질 수 있습니다.

컴파일러가 int와 같은 원시 유형을 갖는 모든 개인 정적 최종 변수를 제거하고 C ++ 매크로와 같이 코드에서 직접 인라인을 인화 할 수 있다고 가정합니다.

그러나 이것이 실제로 이루어지면 단서가 없지만 기억을 저장하기 위해 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top