2010-04-25 2 views

답변

53

나는 성능이 향상되는 경우를 아직 발견하지 못했고, 여러 다른 곳에서 시도해 보았습니다. JVM은 가능할 때 인라이닝을 잘하는 것으로 보이며 심지어 스칼라에서 @inline을 요청하더라도 항상 그렇게 할 수는 없습니다 (가끔은 그렇게 할 필요가 없다고 생각했습니다. 가능하다).

당신이 바이트 코드의 차이를 볼 것으로 예상 장소는 다음과 같이이다 :

object InlineExample { 
    final class C(val i: Int) { 
    @inline def t2 = i*2 
    @inline def t4 = t2*2 
    } 
    final class D(val i: Int) { 
    def t2 = i*2 
    def t4 = t2*2 
    } 
} 

-optimise 컴파일 할 때. 차이점을 알 수 있지만 일반적으로 JIT 컴파일러가 동일한 최적화가 D에 적용됨을 알 수 있으므로 더 빠르게 실행되지 않습니다.

최적화의 마지막 단계에서 시도해 볼 가치가 있지만 성능에 차이가 있는지 확인하지 않고 일상적으로 수행하지 않아도됩니다.

+0

테스트 결과를보고 해 주셔서 감사합니다. 저와 아마 다른 사람들이 언젠가 저장했습니다 :) –

+10

행성에 단 하나의 JIT 컴파일러 만있는 경우 인수가 참이됩니다. 그러나 이것은 사실이 아닙니다. 안드로이드가있다. JVM을 소유하고있는 IBM이있다. 그래서 스칼라 컴파일러는 * JIT *가 할 수있는 것이 더 좋을 것입니다. – Martin

+4

@ Martin - 나는 안드로이드를 시도하지 않은 것을 인정한다. JRockit과 IBM JVM을 Sun JVM과 동일한 효과 (예 : none)로 시도했습니다. –