58
아니면 JIT가 자동으로 처리 할 코드를 혼란스럽게합니까?스칼라의 @inline 주석은 성능에 실제로 도움이됩니까?
아니면 JIT가 자동으로 처리 할 코드를 혼란스럽게합니까?스칼라의 @inline 주석은 성능에 실제로 도움이됩니까?
나는 성능이 향상되는 경우를 아직 발견하지 못했고, 여러 다른 곳에서 시도해 보았습니다. 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
에 적용됨을 알 수 있으므로 더 빠르게 실행되지 않습니다.
최적화의 마지막 단계에서 시도해 볼 가치가 있지만 성능에 차이가 있는지 확인하지 않고 일상적으로 수행하지 않아도됩니다.
테스트 결과를보고 해 주셔서 감사합니다. 저와 아마 다른 사람들이 언젠가 저장했습니다 :) –
행성에 단 하나의 JIT 컴파일러 만있는 경우 인수가 참이됩니다. 그러나 이것은 사실이 아닙니다. 안드로이드가있다. JVM을 소유하고있는 IBM이있다. 그래서 스칼라 컴파일러는 * JIT *가 할 수있는 것이 더 좋을 것입니다. – Martin
@ Martin - 나는 안드로이드를 시도하지 않은 것을 인정한다. JRockit과 IBM JVM을 Sun JVM과 동일한 효과 (예 : none)로 시도했습니다. –