2013-05-09 10 views
0

Java의 비 기본 정적 데이터에서 최종 수정자를 사용하면 성능이 향상됩니까?비 프리미티브 정적 데이터에 최종 수정자를 사용하면 성능이 향상됩니까?

static final Thread t2 = new Thread(new Thread_2()); 

대 :

static Thread t2 = new Thread(new Thread_2()); 

이 말은, 원시 정적 최종 진정한 상수를 정의하고이 값에 알려져 있다는 점에서 사용하는 것이 좋다 예를 들어

컴파일 시간을 단축 할 수는 있지만,이 비 원시적 인 경우 최종 트리거를 사용하여 최적화를 트리거 할 수 있습니까?

이 경우 final을 사용하면 무언가 또는 낭비가 발생합니까?

스타일에 현명한/우수 사례는 답변을 제공하지 않지만 성능면에만 도움이됩니다.

+0

'최종'는 '성능'과 아무 관련이 없습니다. 그들은 "컴파일 타임에 알려진"것도 아니다. –

+0

@Brian Roach 당신은 무엇을 의미합니까? 정적 최종 프리미티브 '값은 컴파일 타임에 알려져 있습니다. 예를 들면 다음과 같습니다. static final int me = 10; –

+0

귀하의 진술에'정적 '부분을 놓쳤지 만, 여전히 실제로 아무것도 변경하지 않습니다. –

답변

3

JVM은 값이 절대로 변경되지 않는다는 것을 알고 (예 : null 검사를 사용하지 않도록 설정) 약간의 성능 향상을 가져올 수있는 최적화를 만들 수 있습니다. 거의 모든 상황에서, 그러나,이 이득은 통지하거나 걱정하기에는 너무 작을 것이다. 나는 당신의 프로그램에 대해 많이 알지 못한다. 그러나 변수를 만드는 데 쓰인 시간은 final이 더 효율적인 알고리즘을 개발하는 데 더 낫다고 생각한다.

+0

다른 코드를 넣을 스켈레톤을 만들고 있습니다. 이 스켈레톤이 가능한 한 성능에 최적화 된 상태인지 확인하고 싶습니다. 그것은 단지 이론적 인 질문 일뿐입니다. 변화가없는 모든 변수에 final을 넣는 것은 그다지 많은 시간을 소비하지 않습니다. 나는 깨끗한 코드의 숭배자이다. 나는 가능하다면 아무 일도하지 않는 여분의 키워드를 사용하는 것을 피하고 싶다. 그러나 동시에 나는 더 빠르고 (심지어 약간) 내가 사용할 수있는 가능성을 견딜 수 없다. em :-) –

+2

@PetrosDrakoulis 나는 완벽하게 똑같은 방식으로 일하지만, 때때로 그것을 극복하고 큰 그림을보아야한다는 것을 배워야했다. 그래도 절대 변하지 않는다면 어쨌든 '최종'이라고 표기하는 것이 좋습니다. – nullptr

+0

오늘의 컴파일러가 필드가 없을 때 알아낼 수있는 것보다 Java를 많이 아는 사람들이 들었습니다. 적어도 공개되지 않았거나 보호 된 경우라면 변경 될 수 있습니다. 컴파일러가 이미 그것을 수행했다면 최적화에서 많은 것을 얻지 못할 수도 있습니다. 필자가 필 요한 글로벌 객체를 가지고 있다면 아마 최종적으로 표시 할 것입니다. –

2

작은 성능 향상이있을 수 있으며 사용되는 클래스에 static final 값이 임베드 될 것이므로 가장 큰 이점은 컴파일러가 의도를 적용하여 & 값이 변경되지 않는다는 것입니다. 즉, 이득은 개발자에게 있습니다.

내 생각에 골격/프레임 워크 코드는 성능뿐만 아니라 스타일에도 모든면에서 최선이어야합니다.

실제 필요가 없다면 모든 것을 최종적으로 선언하는 것이 좋습니다. 즉, 달리 필요하지 않는 한 기본적으로 최종적인 것입니다.