JSR-292가 Groovy 성능에 얼마나 영향을 미칠지 예측이 있습니까?JSR-292 (invokedynamic)은 Groovy 성능에 어느 정도 영향을 줍니까?
답변
invokedynamic은 JDK7에서 성능 특성이 항상 변하기 때문에 복잡한 이야기입니다. Groovy를 indy로 이식하는 동안 나는 정말로 Java와 매우 흡사했습니다. 하지만 catchExceptionGuard를 사용해야하는데, 이는 성능을 3-4 번 요소처럼 감소시킵니다. 우리는 여전히 그 경비원을 사용하지 않아도되는 방법을 조사 할 필요가 있습니다. 어쩌면 우리는 Groovy 2.2의 기존 코드를 깨뜨려야 할 것입니다. 어쨌든, 나는 위에서 언급 한 invokeMethod fallback에 대한 경계를 필요로하지 않는다. GroovyRuntimeExceptions에는 아마도 다른 예외가 포함되어 있으므로 다른 것을 unwrap하거나 다른 작업을해야합니다. 따라서 이론적으로 가능한 성능은 Java와 기존 방법의 Java 속도의 절반 사이 인 것으로 보입니다. invokeMethod에 대한 호출 성능은 완전히 다른 이야기입니다.
추가 정보가 필요하면 Groovy 2.0에서 @CompileStatic을 사용하십시오.
내가 벤치 마크는 아직 생각하지 않고, 누군가가 그것을 수행 할 때까지 우리는 단지 추측 할 수 ...
당신은 흥미로운이 문제에 this post을 찾을 수 있습니다.일반적으로 약 10-50 배 빠릅니다.
나는 그것을 적용 그루비에 얼마나 확실하지 않다. 잘 기억한다면 Groovy에는 몇 가지 대체 수단이 있습니다 (예 : invokeMethod 메소드). invokedynamic과 함께 단순히 폴백을 사용하는 것은 불가능하다고 생각합니다.
- 캐치하는 방법을 찾을 수없는 경우에 throw되는 예외 :
그러나, 몇 가지 방법이 있습니다. 불행하게도 stacktrace를 어디에서 던지는지 확신 할 수 없으므로 스택 추적을 분석해야 할 필요가 있습니다. invokeMethod 콜백에 의해 처리되는 것과 상관없이 존재하지 않는 메서드를 호출 할 때 상당한 속도 저하가 될 수 있습니다.
- Groovy ++을 살펴보십시오. 그것은 당신이 몇 가지 제약 사항을 만족한다면 정적 타이핑을 사용할 수있게 해줍니다. 이 경우 이러한 엄격한 변경을 허용하지 않는 "엄격한 동적 모드"로 전환 할 수 있습니다.
- 1. 자바 가비지 수집은 성능에 어느 정도 영향을 줍니까?
- 2. 'var'의 사용은 C# 컴파일러의 성능에 어느 정도 영향을 줍니까?
- 3. NUnit이 성능에 영향을 줍니까?
- 4. IHTTPModule 성능에 영향을 줍니까?
- 5. 데이터베이스보기가 쿼리 성능에 영향을 줍니까?
- 6. 액세스 한정자는 성능에 영향을 줍니까?
- 7. 난독 화가 성능에 영향을 줍니까?
- 8. Linux에서 ACL이 성능에 영향을 줍니까
- 9. URI에 공백 문자가 있으면 성능에 영향을 줍니까?
- 10. 이 javascript 문은 성능에 영향을 줍니까?
- 11. 여러 xmlns 속성이 페이지 성능에 영향을 줍니까?
- 12. 로깅 문이 응용 프로그램 성능에 영향을 줍니까?
- 13. GraphicsPath.Flatten()은 그리기 성능에 어떤 영향을 줍니까?
- 14. 데이터베이스의 열 순서가 성능에 영향을 줍니까?
- 15. 데이터 유형 선택이 성능에 영향을 줍니까?
- 16. auto_increment 값 변경이 MySQL의 성능에 영향을 줍니까?
- 17. 시작 블록이 조건문의 성능에 영향을 줍니까?
- 18. WHERE 절의 필드 순서가 성능에 영향을 줍니까?
- 19. 행 디자인이 MySQL 성능에 어떤 영향을 줍니까?
- 20. SQL 쿼리를 작성하는 방식이 성능에 영향을 줍니까?
- 21. 보기의 열 수가 성능에 영향을 줍니까?
- 22. mysql 사용자 권한이 성능에 영향을 줍니까?
- 23. 데이터베이스 (최대) 필드 길이가 성능에 영향을 줍니까?
- 24. noexcept 스왑 사양이 성능에 영향을 줍니까?
- 25. 특정 유형이 ArrayList의 성능에 영향을 줍니까?
- 26. 메서드 호출은 Java의 성능에 어떤 영향을 줍니까?
- 27. LOH에서 객체를 고정하면 GC 성능에 영향을 줍니까?
- 28. SetFileBandwidthReservation이 메모리 매핑 파일 성능에 영향을 줍니까?
- 29. 중첩이 효율성에 영향을 줍니까?
- 30. ADO.NET DataTable 제약 조건은 성능에 어떤 영향을 줍니까?
invokedynamic의 특정 성능 이점을 얻기 위해 Groovy 코드로 갈 길이 멀다. 내 유전 알고리즘은 invokedynamic을 사용하여 5 배 느리게 수행되었으며 Java 1.8.0 및 Groovy 2.2.1을 사용하여 테스트했습니다! 직접 시도해 보시고 https://github.com/renatoathaydes/MachineLearning을 실행하고'com.athaydes.ml.algorithms.LinearGPTest :: testNonTrivialPrograms' 테스트를 실행하십시오. 일반적으로 4 초 후에 실행되지만 groovy-indy와 invokedynamic을 사용하면 적어도 25 초 후에 실행됩니다. – Renato
또한 indy를 보여준 또 다른 게시물은 실제로 Groovy 코드의 속도를 늦출 수 있습니다. http://derjan.io/blog/2012/08/08/first-steps-with-groovys-invokedynamic-support/ – Renato