Java アプリケーション内で呼び出される groovy eval(string) メソッドに関するパフォーマンスの問題の原因を突き止めようとしています。次のコードを実行すると;
String pattern = "test = ['one','two','three']";
engine.eval(pattern)
ほとんど時間がかからない (0 ~ 1ms)
しかし、私が次のように言うなら
String first = "['one','two','three']";
String pattern = "test = " + first; // "identical" String to first approach
engine.eval(pattern)
実行には約 30 ミリ秒以上かかります。
さらに悪いことに、数千回呼び出した後は 60 ~ 70 ミリ秒にもなりますが、2 つの実装間の時間差ほど気にする必要はありません。
なぜこれが起こっているのか、これを回避する方法についての提案はありますか? Java および/または Groovy コンパイラーと関係があると思われ、compile() メソッドを調べ始めましたが、既存のコードを機能させる簡単な方法があればそれを好みます (それを変更する必要が少ない)仕方)。