2013-05-12 4 views
2

나는 그루비 코드의 다음 코드와 예기치 않은 벤치 마크 결과가 있었다. 말할 긴 이야기 (묻지 마라.). 첫인상은 10 라운드 + 5 워밍업과 10000 루프를 사용했습니다. (junit-benchmark framework) JDK가 Verison 1.7.0_09이고 Groovy 2.1을 사용했습니다. invokedynamic 지원 여부에 관계없이 코드를 2 번 컴파일했습니다. 요점은 invokedynamic의 벤치 마크가 정상 컴파일 된 것보다 훨씬 더 오래 걸린다는 것입니다. 나는 fibonacci 숫자로 다른 벤치 마크를했는데 예상대로 행동했습니다 (인디는 약 절반의 시간이 걸렸습니다).그루비 invokedynamic 성능

여기서 무엇이 잘못 될지 아는 사람이 있습니까?

감사합니다.

+0

자바 컴파일러 인 Groovy가 추가 기능을 인라인 할 수 있습니까? – Thorben

답변

1

저는 Groovy의 전문가는 아니지만 Groovy가 "God class"와 같은 것을 만들었다는 인상을 받았습니다. 이 클래스에는 Groovy 소스 코드에 나타나는 모든 메소드가 들어 있으며 서브 클래스는 특정 메소드만을 대체합니다. 이러한 클래스를 만들면 동적 룩업보다는 일반적인 invokevirtual 호출이 가능합니다. 그것은 감속에 대한 설명이 될 수 있습니다.

클래스에 대한 메소드의 런타임 주입을 시도하여 Groovy의 정적 분석을 중단하고 컴파일러가 동적 검색 코드를 출력하도록하십시오.

+0

http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/에서 Groovycode를 시험해 보았습니다. invokedynamic 성능이 더 좋았습니다. 그 벤치 마크에서 객체는 더 복잡합니다. 누군가가 '신 모듈'로 당신의 논문을 확인할 수 있다면 나는 그 문제를 해결 된 것으로 표시한다. – Thorben