Java 애플리케이션 내에서 호출되는 groovy eval (string) 메소드의 성능 문제의 원인을 추적하려고합니다. 다음 코드를 실행하면; 나는 ~ 걸리는Groovy 스크립트 eval (문자열) 메소드의 성능 문제
String first = "['one','two','three']";
String pattern = "test = " + first; // "identical" String to first approach
engine.eval(pattern)
실행하는 30 + 밀리 다음과 같은 말한다면
String pattern = "test = ['one','two','three']";
engine.eval(pattern)
그것은, 그러나에 사실상 시간 (0이 1ms로)
를 실행합니다.
더 나쁜 것은 수천 번의 호출 후에 두 구현 사이의 시간 델타보다 훨씬 덜 우려하지만 60-70ms만큼 높을 것입니다.
왜 이런 일이 발생했는지에 대한 설명/이것을 피하는 방법에 대한 제안? Java 및/또는 Groovy 컴파일러와 관련이 있고 컴파일() 메서드를 살펴보기 시작했으나 기존 코드가 작동하도록 만드는 간단한 방법이 있다면 더 선호 할 것입니다. 방법).
정확히 해시 기반 캐시를 만들 수 있지만, 문자열 인)가 평가에 전달하고있는 시간 (기준 동일 (사과하는 경우 그게 당신이 말하는거야) ... – user1251193
어떻게 엔진을 구성합니까? JSR-223을 사용하고 있습니까? 그렇다면 http://groovy.codehaus.org/JSR+223+Scripting+with+Groovy와 마지막 단락 인'엔진이 스크립트 함수에 대한 기본 하드 참조 당 유지합니다. '를 참조하십시오. 그루비는 여기에서 최적화 할 수 있습니다. 연결을 사용하면 표현식이 새로운 문자열로 취급 될 수 있으며 캐시 된 스크립트가 아닌이 차이가 발생할 수 있습니다. –