Ich arbeite an grooviger Code-Optimierung. Ich habe jvisualvm verwendet, um eine Verbindung zur laufenden Anwendung herzustellen und CPU-Samples zu sammeln. Beispiele sagen, dass org.codehaus.groovy.reflection.CachedMethod.inkove die meiste CPU-Zeit benötigt. Ich sehe keine anderen Anwendungsmethoden in Proben.Optimierung der Groovy Performance
Was ist der richtige Weg, um in CachedMethod.invoke zu graben und zu verstehen, welche Codezeilen wirklich Leistungsstrafen geben?
Danke.
UPD: I Indy verwenden zu tun, es half mir nicht.
Ich habe nicht versucht, @CompileStatic einzuführen, da ich meine Engpässe vor dem Umschreiben von groovy nach Java finden möchte.
Mein Problem ein bisschen ähnlich zu diesem Thema: Call site caching faster than invokedynamic?
Ich habe einen Code, der dynamisch groovy Skript komponiert. Skriptvorlage sieht so aus:
def evaluateExpression(Map context){
def user = context.user
%s
}
wo % s ersetzt mit
user.attr1 == '1' || user.attr2 == '2' || user.attr3 = '3'
Es gibt einen Satz (insgesamt 20) der Ersatz von Datenbanken genommen haben. Der Code erhält Ersatz von DB, erstellt GroovyScript und wertet es aus. Ich nehme an, der Flaschenhals ist in der Skriptausführung. Was ist der richtige Weg, um es zu beheben?
Verwenden Sie das Artefakt * Indy *? – Nicholas
Hallo, hab default groovy mit * Indy * nach dem Absenden der Frage ersetzt. Ich kann nicht sagen, dass es den newrelic-Metriken sehr geholfen hat. Jetzt ist der oberste CPU-Verbraucher ** org.codehouse.groovy.vmplugin.v7.Selector $ MethodSelector.doCallSiteTargetSet ** Ich nehme an, dass ich erfolgreich auf InvokeDynamic umgestellt habe. Was soll ich jetzt mit * Selector $ MethodSelector.doCallSiteTargetSet * machen? – Sergey
Wie wäre es mit * @ CompileStatic *? – Nicholas