2010-11-23 4 views
1

방금 ​​writing efficient code in J2ME에 대한 BlackBerry 문서의 기사를 읽었습니다.비 최종 정적 문자열은 정적 최종 문자열보다 효율적입니까?

이 기사에는 "문자열에 정적 변수 사용"을 권장하는 섹션이 있습니다. 그 이유는 컴파일러가 static final 참조를 문자열 리터럴로 인라인하기 때문에 비 최종으로 두는 것이 좋습니다 (정적 참조를 검색하는 것이 문자열 풀에서 검색하는 것보다 낫다고 가정합니다).

모든 JVM에 해당합니까? 마지막 직장에서의 사장님이 우리 머리에 우리를 항상 두 드리려했습니다. 항상 우리 상수에 static final을 사용하십시오. 우리는 자바로 임베디드 프로그래밍을하고 있었기 때문에 그는 성능면에서 정말 고수했습니다 (비록이 경우 메모리 나 속도에 더 관심이 있는지는 잘 모르겠지만). 나의 상사는 수년간 Java를 해왔으며 실제로 그의 물건을 알고 있기 때문에 그의 조언을 받았다. 지금 나는 모순 된 충고를 받고있다!

그럼 어느 것이 더 낫습니까? 메모리 보존 관점 또는 속도 관점에서, J2ME 또는 J2SE에서 응답 할 수 있습니다.

+7

static final을 사용해야합니다. 기계가 무언가가 인라인되어야 하는지를 결정하기 위해 기계가하도록하십시오. 또한 문자열을 인라인하는 것보다 코드를 인라인하는 것이 좋을지 모르겠다면 자바가 제대로 작동하지 않을 수도 있습니다. – Falmarri

+0

Android 또는 BlackBerry 용 UI를 프로그래밍 할 때 언어를 선택할 필요가 없습니다. . 그러나 그 너머에 무엇이 진행되고 있는지 알면 더 좋습니다! 자, 이건 원칙의 문제 야! 당신은 기계에 복종하지 않고 기계가 당신에게 복종합니다! 또한, 왜 이것이 논평이 아닌 대답입니까? –

+0

안드로이드와 같은 선택의 여지가 없지만 문자열을 인라이닝하는 것은 병목 현상이 아니라 다른 백그라운드에서 실행되는 60 가지 응용 프로그램이라는 것입니다. 또한 후드 아래에서 무슨 일이 벌어지고 있는지 알면 좋겠지 만 자바와 같은 언어를 사용하면 원하는 코드로 가상 머신이 할 수 있기 때문에 실제로는 할 수 없습니다. – Falmarri

답변

3

일반적으로 이들은 동일해야합니다. (같은으로 그 어느 문제가되지 않을 것이라는 점을 충분히 가까이로 정의)

내가 강력하게 주장하고 당신이 당신의 의도 (즉, 대 정적 가진 인코딩해야한다는 비 정적을-다움 여부를이에 의해 정의 된 것

입니다 오히려 어떤 임의의 "성능 향상"

이 상당한 성능 문제가 (당신이 그것을 측정 후에 만!) 것을 알게되면, 내가 컴파일러로 분류하는 것보다)는 예를 일정에 비해 일정 수준의/JVM 결함을 발견하고 그 이유를 나타내는 설명과 함께 일시적 해결책을 정적으로 바꾼다.

+0

나는 정적을 바꾸지 않을 것이다. 나는 최종성을 교환하고있다. 그리고 나는 그 차이가 무시할 만하다고 보통 당신에게 동의 할 것입니다. 그러나 다른 한편으로는 우리는 RIM으로부터이 동료가 그렇지 않다는 것을 알게되었습니다. SO에 7000 점이 있지만이 사람은 VM 자체의 공동 작성자 일 가능성이 높습니다. 나는 누구를 믿어야합니까? –

+0

답변 : 저는 벤치 마크를 믿고 그 벤치 마크를 _only_해야합니다. 그래, 알아. 그러나 이것은 특정 성능 향상에 관한 것이 아닙니다. 이것은 내 팀 전체가 앞으로 사용할 수있는 프로그래밍 스타일을 선택하는 것에 관한 것입니다. 나는 두 가지 방법의 장단점을 비교하고 그 중 하나를 선택하면 벤치 마크를 실행할 필요가 없습니다. –

+0

@Neil Traft : 내 답변에 따라 내 대답을 판단해서는 안됩니다 :) 그렇습니다. 오래된 정보를 기반으로 성능을 향상시키는 것은 정말 쉽습니다.다음 릴리즈가 나오고 컴파일러/VM 속도가 느려지면 성능이 향상 될 것입니다. 너는 결코 알지 못한다. 그것이 내가 생각하기에 너무 느린지를보기 위해 그것을 측정해야한다고 말하는 이유입니다. –

관련 문제