Robert Hundt (link 참조)의 Havlak 벤치 마크 Java 코드를 Groovy로 포팅했습니다. 이제는 Groovy 2.1.1을 사용하여 invoke dynamic 및 without을 사용하여 벤치 마크를 실행했지만 계산에 소요되는 시간은 거의 같습니다. 동적 호출을 사용하려면 어떻게해야합니까? 그루비 --indy.jars를 groovy-2.1.1 \ indy에서 groovy-2.1.1 \ lib로 복사했습니다. 그런 다음 groovy-2.1.1 \ lib에서 그 이름에 "groovy .jars"가 삭제되었습니다. 그 후 IntelliJ IDEA에서 파일> 설정> 컴파일러> Groovy 컴파일러> 동적 지원 호출 플래그를 활성화하고 비활성화했습니다.Groovy2.0 +에서 동적 성능을 향상 시키면 어떤 상황에서 성능 향상을 기대할 수 있습니까?
저는 사람들에게 내가 indy 지원을 올바르게 설정했는지 여부를 확인하도록 말하고 있습니다. 그러나 이것은 나의 질문이 아닙니다. 내 질문은 어떤 종류의 상황에서 우리는 동적 호출 때문에 계산 시간이 빨라질 것이라고 기대할 수 있습니다. 나는 그것에 관한 기사를 읽었지 만, 동적 인 것을 호출하는 것에 대해 "이 종류의 코드는 indy 지원으로 더 빨리 실행될 것"이라고 설명하는 것을 번역하기가 어렵습니다. Havlak 벤치 마크는 호출하는 setter를 통해 값이 변경되는 많은 루핑을 수행합니다.
문제에 대해 어느 정도 이해하고있는 사람이라면 여기에 몇 가지 설명을 남기게되어 기쁩니다 .--).
감사합니다, 올리버
그루비는 항상 동적 파견을하고 그것을 분석 할 수 . – blackdrag
예, 항상 동적 디스패치를 수행합니다. invokedynamic은 여러 번 메서드를 사용하는 경우에만 실행 속도를 높일 수 있습니다. 대부분의 프로그램에서 정상적인 사례이지만, – Thorben
을 고려해야합니다. 속도 향상은 호출이 부트 스트랩되어 Comiled MethodHandle에 연결될 때 발생합니다. 그런 다음 무언가가 변경 될 때까지 MethodHandle을 재사용 할 수 있습니다. 인디없이 스크립트 언어 등의 구현에 캐싱 기술이 없으면 디스패치는 모든 단일 메서드 호출에 대해 발생합니다. 아마도 도움이됩니다. – Thorben