IT이야기

Java와 비교하여 Groovy의 성능

cyworld 2021. 10. 11. 17:41
반응형

Java와 비교하여 Groovy의 성능은 어떻습니까?


Java와 비교한 Groovy의 성능은 무엇입니까?


Groovy가 JVM으로 컴파일된 것은 분명히 사실입니다. 그러나 이것은 성능과 거의 관련이 없습니다.

여기서 주목해야 할 가장 중요한 점은 Groovy가 동적 언어라는 것입니다. 이것은 본질적으로 대부분의 경우 Groovy 컴파일러가 속성을 검색하거나 메서드를 호출하는 개체의 유형에 대한 지식이 거의 또는 전혀 없다는 것을 의미합니다. 이것은 거대한성능에 영향을 미칩니다. 공통 기본 클래스가 없는 someFancyMethodName()을 구현하는 수천 개의 서로 다른 클래스가 있을 수 있습니다. 그러나 obj.someFancyMethodName()에 대한 호출은 올바른 것을 선택해야 합니다. 일종의 리플렉션을 기반으로 런타임에 결정하는 것보다 더 좋은 방법은 없습니다. 사실, 이것 때문에 메소드에 대한 모든 단일 호출은 객체 메타클래스에서 invokeMethod()에 대한 호출을 통해 전달됩니다. 이것은 프로그램이 일부 불쾌한 예외를 throw하는 경우 스택 추적에서 매우 많이 볼 수 있습니다. 더 나쁘다. groovy의 모든 클래스는 런타임에 생성하는 지정된 이름의 메서드 구현을 동적으로 제공하도록 선택할 수 있습니다. 그것을 많이 사용하는 상당한 양의 Grails 마법이 있습니다. 메서드 오버로딩이 시작되면 또 다른 문제가 발생합니다. 유형에 대한 지식이 너무 제한적이기 때문에 컴파일 시간에 올바른 버전의 메소드를 선택하는 것은 불가능합니다. 생성된 코드는 제공된 객체를 조사한 다음 일련의 if-else가 제공된 호출에 가장 적합한 구현을 선택하도록 해야 합니다. 대부분의 경우 런타임에 수행할 의도가 전혀 없는 매우 중요한 프로세스입니다. 그러나 Groovy는 Java와 상호 운용성을 유지하기 위해 이를 수행해야 합니다.

이 모든 것이 Groovy를 상당히 느리게 만듭니다. 실제로 훨씬 느리고 더 고통스럽고 더 많은 메모리를 소비하는 대부분의 동적 언어(예: Python)입니다.

즉, Groovy를 사용하는 이유는 확실히 성능이 아니라는 데 동의합니다. 대부분의 경우 코드의 일부만 최적화하게 됩니다. 성능이 그러한 문제라면 언제든지 순수한 Java로 특정 부분을 다시 작성하거나 Groovy++를 사용해 볼 수 있습니다. 직접 시도하지는 않았지만 온라인에서 읽은 결과는 꽤 유망해 보였습니다.

Groovy 2.0 최신 버전을 실행한 경험이 없습니다. 솔직히 말해서, 저는 더 이상 Groovy의 활성 사용자가 아닙니다. 그러나 위에서 설명한 대부분의 문제는 근본적으로 어렵고 중요한 과학적 돌파구가 필요합니다. 저는 HHVM(Facebook에서 만든 PHP 가상 머신)을 개발한 경험이 있으며 성능이 좋지 않은 훨씬 간단한 기능이 있습니다.


이제 2012년이 되었고 Groovy 2.0이 출시될 예정입니다...

"@CompileStatic을 사용하면 Groovy의 성능이 Java보다 약 1-2배 느리고 Groovy가 없으면 약 3-5배 더 느립니다. (...) 이것은 Groovy가 성능이 필요한 응용 프로그램에 사용할 준비가 되어 있음을 의미합니다. Java와 어느 정도 비교할 수 있습니다."

성능 테스트: Groovy 2.0 대 Java http://java.dzone.com/articles/groovy-20-performance-compared

그리고 저자 외에도 저는 2008년부터 Groovy를 사용하여 CV뿐만 아니라 업무상 필요한 시간에 작업을 완료하는 데 큰 성공을 거두었습니다. 성능은 항상 하고 싶은 것에 비례합니다.


숫자 사용 사례에 대해 불평하는 사람들을 위해 웹 프레임워크를 사용한 실제 사용 사례가 있습니다. http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/


"fib(42)용 Groovy 1.8.x 프로토타입은 약 3.8초가 소요됩니다( Java보다 12%만 느리고 Groovy 1.0보다 100배 이상 빠름 ). 따라서 우리는 더 이상 사람들에게 이러한 '핫스팟'을 Java로 작성하도록 권장하지 않을 수 있습니다."

출처: http://www.wiki.jvmlangsummit.com/images/0/04/Theodorou-Faster-Groovy-1.8.pdf

"숫자 계산에서 Groovy의 성능이 얼마나 향상되었는지에 대해 깊은 인상을 받았습니다. 내 프로젝트 jlab(http://code.google.com/p/jlabgroovy/)의 Groovy 1.8때때로 내 다른 프로젝트 ScalaLab(http: //code.google.com/p/scalab) !!"

출처: http://groovy.329449.n5.nabble.com/Great-improvements-in-Groovy-s-performance-for-numerical-computing-td4334768.html


Groovy는 Java에 비해 훨씬 더 많은 구문 설탕을 제공하지만 여전히 JVM에서 실행되므로 해당 설탕을 제공하려면 JVM에서 조금 더 많은 작업이 필요합니다. 그럼에도 불구하고, 그 차이는 대부분의 일반적인 사용법에서 극히 미미합니다.

또한, Groovy에서 너무 느리게 실행되는 함수를 작성하게 되면 곧바로 Java로 작성하여 Groovy 코드에서 호출할 수 있습니다. 이것이 팀에서 권장하는 솔루션이며 잘 작동하고 간단하게 작동한다고 보증할 수 있습니다.

제 생각에는 우리 대부분이 하는 프로그래밍에서는 문제가 되지 않습니다.


빠른 Google 검색은 일부 오래된 성능 결과를 산출했습니다( http://www.codecommit.com/blog/java/groovys-performance-is-not-subjective , http://www.christianschenk.org/blog/performance-comparison- 그루비와 자바 사이/ ).

Groovy++도 흥미롭게 보입니다( http://stronglytypedblog.blogspot.com/2010/02/java-vs-scala-vs-groovy-vs-groovy.html ).

이 향상 때문에, 그 이유는 그루비해야 사용 하여 성능 하지 컴퓨터를 ...


일반적으로 Groovy는 더 느립니다. Groovy의 대부분의 기능을 제공하지만 정적으로 컴파일될 수 있고 Java에 필적하는 성능을 갖는 Groovy++로 전환하면 이를 피할 수 있습니다.


제 생각에는 Groovy Vs Python Vs PHP vs Ruby의 과학적 비교를 살펴봐야 합니다.

http://blog.websitesframeworks.com/2013/11/comparison-of-programming-languages-ruby-groovy-python-and-php-353/

그들은 하나의 연습을 수행하고 아래 요소에 대해 이러한 프로그래밍 언어에 대한 비교를 생성했습니다.

Comparison of time developing each exercise

Comparison of readability of the languages

Comparison of results in benchmarks and lines of code. From the project Computer Language Benchmarks Game

Conclusions

어떤 언어가 더 나은지 알 수 있는 훌륭한 빠른 학습입니다.


AWS Lambdas를 개발하는 동안 Java는 groovy보다 빠를 것입니다. 그 외에는 다른 모든 시나리오에서 큰 차이를 느끼지 못할 수 있습니다.


Groovy는 바이트코드 .class 파일로 컴파일되지만 Groovy 클래스를 실행하려면 성능 오버헤드를 만드는 ~5MB groovy 라이브러리가 필요합니다.

ReferenceURL : https://stackoverflow.com/questions/5238791/how-is-the-performance-of-groovy-compared-with-java

반응형