[ https://issues.apache.org/jira/browse/GROOVY-11648?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17949289#comment-17949289 ]
Eric Milles commented on GROOVY-11648: -------------------------------------- I’m not opposed to this effort (or many of the others left in a holding pattern). I’m asking for enough clarity so others could perform the work if it wasn’t you. And some basic checks so others can meaningfully evaluate your progress and provide feedback. > Make methods in groovy-core friendly to JIT > ------------------------------------------- > > Key: GROOVY-11648 > URL: https://issues.apache.org/jira/browse/GROOVY-11648 > Project: Groovy > Issue Type: Improvement > Reporter: Daniel Sun > Priority: Major > Attachments: groovy-core-jarscan-result-maxMethodSize-325.txt > > > I used JarScan of JITWatch to scan groovy-5.0.0-SNAPSHOT.jar[1] and found > lots of methods whose size are greater than 325 bytes (See the attached > file). > We should make some of them invoked frequently smaller than 325 bytes to > become friendly to JIT for better performance. > [1] > [https://github.com/apache/groovy/actions/runs/14804433735/job/41570121112] > We can focus on methods for runtime: > {code:java} > "groovy.grape","GrabAnnotationTransformation","visit","org.codehaus.groovy.ast.ASTNode[],org.codehaus.groovy.control.SourceUnit",1941 > "groovy.grape","GrapeIvy","getDependencies","java.util.Map,groovy.grape.IvyGrabRecord...",1353 > "groovy.util","ConfigSlurper$_parse_closure5","doCall","java.lang.String,java.lang.Object",1001 > "groovy.lang","MetaClassImpl","invokeMethod","java.lang.Class,java.lang.Object,java.lang.String,java.lang.Object[],boolean,boolean",865 > "groovy.cli.internal","CliBuilderInternal$_commons2picocli_closure4","doCall","java.lang.Object,java.lang.Object",814 > "groovy.beans","ListenerListASTTransformation","visit","org.codehaus.groovy.ast.ASTNode[],org.codehaus.groovy.control.SourceUnit",807 > "org.codehaus.groovy.runtime","DefaultGroovyMethods","sprintf","java.lang.Object,java.lang.String,java.lang.Object",776 > "groovy.lang","MetaClassImpl","setProperty","java.lang.Class,java.lang.Object,java.lang.String,java.lang.Object,boolean,boolean",751 > "groovy.grape","GrapeIvy","createGrabRecord","java.util.Map",723 > "groovy.grape","GrapeIvy","processMetaInfServices","java.lang.ClassLoader,java.io.File",710 > "org.codehaus.groovy.runtime.typehandling","NumberMathModificationInfo","checkNumberOps","java.lang.String,java.lang.Class",687 > "groovy.grape","GrapeIvy","processCategoryMethods","java.lang.ClassLoader,java.io.File",660 > "groovy.cli.internal","OptionAccessor","getProperty","java.lang.String",647 > "org.codehaus.groovy.runtime","DefaultGroovyMethods","asArrayType","java.lang.Object,java.lang.Class",636 > "groovy.grape","GrabAnnotationTransformation","callGrabAsStaticInitIfNeeded","org.codehaus.groovy.ast.ClassNode,org.codehaus.groovy.ast.ClassNode,java.util.Collection<java.util.Map<java.lang.String, > java.lang.Object>>,java.util.Collection<java.util.Map<java.lang.String, > java.lang.Object>>",635 > "org.codehaus.groovy.runtime.metaclass","ClosureMetaClass","invokeMethod","java.lang.Class,java.lang.Object,java.lang.String,java.lang.Object[],boolean,boolean",625 > "groovy.util","FactoryBuilderSupport","dispatchNodeCall","java.lang.Object,java.lang.Object",606 > "groovy.beans","VetoableASTTransformation","addVetoableChangeSupport","org.codehaus.groovy.ast.ClassNode",600 > "groovy.beans","BindableASTTransformation","addPropertyChangeSupport","org.codehaus.groovy.ast.ClassNode",598 > "org.codehaus.groovy.runtime","DefaultGroovyMethods","step","java.lang.Number,java.lang.Number,java.lang.Number,groovy.lang.Closure",597 > "org.codehaus.groovy.runtime","ProxyGeneratorAdapter","visitMethod","int,java.lang.String,java.lang.String,java.lang.String,java.lang.String[]",583 > "groovy.beans","ListenerListASTTransformation","addFireMethods","org.codehaus.groovy.control.SourceUnit,org.codehaus.groovy.ast.AnnotationNode,org.codehaus.groovy.ast.ClassNode,org.codehaus.groovy.ast.FieldNode,org.codehaus.groovy.ast.GenericsType[],boolean,org.codehaus.groovy.ast.MethodNode",581 > "groovy.util","BuilderSupport","doInvokeMethod","java.lang.String,java.lang.Object,java.lang.Object",572 > "groovy.ui","GroovyMain$GroovyCommand","process","groovyjarjarpicocli.CommandLine",533 > "groovy.util","ConfigObject","writeConfig","java.lang.String,groovy.util.ConfigObject,java.io.BufferedWriter,int,boolean",528 > "groovy.beans","ListenerListASTTransformation","addAddListener","org.codehaus.groovy.control.SourceUnit,org.codehaus.groovy.ast.AnnotationNode,org.codehaus.groovy.ast.ClassNode,org.codehaus.groovy.ast.FieldNode,org.codehaus.groovy.ast.ClassNode,java.lang.String,java.lang.Object",512 > "groovy.beans","ListenerListASTTransformation","addRemoveListener","org.codehaus.groovy.control.SourceUnit,org.codehaus.groovy.ast.AnnotationNode,org.codehaus.groovy.ast.ClassNode,org.codehaus.groovy.ast.FieldNode,org.codehaus.groovy.ast.ClassNode,java.lang.String,java.lang.Object",512 > "org.codehaus.groovy.runtime.callsite","CallSiteGenerator","writeMethod","groovyjarjarasm.asm.ClassWriter,java.lang.String,int,java.lang.String,org.codehaus.groovy.reflection.CachedMethod,java.lang.String,java.lang.String,boolean",499 > "groovy.transform.builder","SimpleStrategy","build","org.codehaus.groovy.transform.BuilderASTTransformation,org.codehaus.groovy.ast.AnnotatedNode,org.codehaus.groovy.ast.AnnotationNode",490 > "groovy.grape","GrabAnnotationTransformation","checkForConvenienceForm","org.codehaus.groovy.ast.AnnotationNode,boolean",489 > "groovy.lang","MetaClassImpl","getProperty","java.lang.Class,java.lang.Object,java.lang.String,boolean,boolean",462 > "org.codehaus.groovy.runtime","DefaultGroovyMethods$FlattenIterator","step","",455 > "groovy.beans","ListenerListASTTransformation","addGetListeners","org.codehaus.groovy.control.SourceUnit,org.codehaus.groovy.ast.AnnotationNode,org.codehaus.groovy.ast.ClassNode,org.codehaus.groovy.ast.FieldNode,org.codehaus.groovy.ast.ClassNode,java.lang.String,java.lang.Object",454 > "groovy.util","ConfigSlurper","parse","groovy.lang.Script,java.net.URL",452 > "org.codehaus.groovy.runtime","ProxyGeneratorAdapter","ProxyGeneratorAdapter","java.util.Map<java.lang.Object, > > java.lang.Object>,java.lang.Class,java.lang.Class[],java.lang.ClassLoader,boolean,java.lang.Class",447 > "groovy.lang","NumberRange","calcSize","java.lang.Comparable,java.lang.Comparable,java.lang.Number",440 > "groovy.lang","MetaClassImpl","getEffectiveGetMetaProperty","java.lang.Class,java.lang.Object,java.lang.String,boolean",437 > "org.codehaus.groovy.runtime","FormatHelper","format","java.lang.Object,boolean,boolean,int,boolean",432 > "groovy.cli.internal","CliBuilderInternal","option","java.lang.Object,java.util.Map,java.lang.Object",427 > "org.codehaus.groovy.runtime","MethodRankHelper","delDistance","java.lang.CharSequence,java.lang.CharSequence",420 > "org.codehaus.groovy.runtime.typehandling","DefaultTypeTransformation","compareToWithEqualityCheck","java.lang.Object,java.lang.Object,boolean",419 > "org.codehaus.groovy.runtime","ResourceGroovyMethods","traverse","java.io.File,java.util.Map<java.lang.String, > ?>,groovy.lang.Closure,int",418 > "org.codehaus.groovy.runtime.metaclass","MetaClassRegistryImpl","registerMethods","java.lang.Class,boolean,boolean,java.util.Map<org.codehaus.groovy.reflection.CachedClass, > java.util.List<groovy.lang.MetaMethod>>",415 > "org.codehaus.groovy.runtime.dgmimpl","NumberNumberMetaMethod","createPojoCallSite","org.codehaus.groovy.runtime.callsite.CallSite,groovy.lang.MetaClassImpl,groovy.lang.MetaMethod,java.lang.Class[],java.lang.Object,java.lang.Object[]",404 > "groovy.lang","MetaClassImpl","populateMethods","java.util.List<org.codehaus.groovy.reflection.CachedClass>,org.codehaus.groovy.reflection.CachedClass",400 > "org.codehaus.groovy.runtime","CurriedClosure","getParameterTypes","",398 > "groovy.lang","MetaClassImpl","invokeMissingProperty","java.lang.Object,java.lang.String,java.lang.Object,boolean",395 > "groovy.cli.internal","CliBuilderInternal","invokeMethod","java.lang.String,java.lang.Object",394 > "groovy.util","CharsetToolkit","guessEncoding","",389 > "groovy.lang","GroovyShell","runScriptOrMainOrTestOrRunnable","java.lang.Class,java.lang.String[]",386 > "org.codehaus.groovy.runtime.metaclass","MetaClassRegistryImpl","MetaClassRegistryImpl","int,boolean",386 > "org.codehaus.groovy.runtime","MetaClassHelper","asWrapperArray","java.lang.Object,java.lang.Class",385 > "groovy.lang","MetaClassImpl","invokeMissingMethod","java.lang.Object,java.lang.String,java.lang.Object[],java.lang.RuntimeException,boolean",382 > "groovy.grape","GrapeIvy","grab","java.util.Map,java.util.Map...",378 > "groovy.transform.builder","ExternalStrategy","build","org.codehaus.groovy.transform.BuilderASTTransformation,org.codehaus.groovy.ast.AnnotatedNode,org.codehaus.groovy.ast.AnnotationNode",376 > "org.codehaus.groovy.runtime","ProxyGeneratorAdapter","visitClass","java.lang.Class<?>",371 > "groovy.lang","ObjectRange","ObjectRange","java.lang.Comparable,java.lang.Comparable,java.lang.Boolean",370 > "org.codehaus.groovy.runtime","ProxyGeneratorAdapter","makeDelegateToClosureCall","java.lang.String,java.lang.String,java.lang.String,java.lang.String[],int",366 > "org.codehaus.groovy.runtime","ScriptBytecodeAdapter","createRange","java.lang.Object,java.lang.Object,boolean,boolean",362 > "groovy.cli.internal","CliBuilderInternal","create","groovyjarjarpicocli.CommandLine$Model$OptionSpec,java.lang.Class,java.lang.Object,java.lang.Object",359 > "org.codehaus.groovy.runtime","MethodRankHelper","getMethodSuggestionString","java.lang.String,java.lang.Class,java.lang.Object[]",359 > "org.codehaus.groovy.runtime.powerassert","AssertionRenderer","renderValues","",358 > "groovy.lang","ObjectRange","size","",358 > "org.codehaus.groovy.runtime","ResourceGroovyMethods","traverse","java.io.File,java.util.Map<java.lang.String, > ?>,groovy.lang.Closure",350 > "groovy.lang","GroovyClassLoader","loadClass","java.lang.String,boolean,boolean,boolean",349 > "groovy.util","ObservableMap","putAll","java.util.Map",348 > "org.codehaus.groovy.runtime","EncodingGroovyMethods$1","writeTo","java.io.Writer",344 > "org.codehaus.groovy.runtime","ScriptBytecodeAdapter","despreadList","java.lang.Object[],java.lang.Object[],int[]",342 > "org.codehaus.groovy.runtime.metaclass","ClosureMetaClass","assignMethodChooser","",338 > "groovy.lang","MetaClassImpl","invokeMethodClosure","org.codehaus.groovy.runtime.MethodClosure,java.lang.Object[]",337 > "groovy.grape","GrapeIvy","GrapeIvy","",333 > "org.codehaus.groovy.runtime.typehandling","DefaultTypeTransformation","asArray","java.lang.Object,java.lang.Class",333 > {code} > -- This message was sent by Atlassian Jira (v8.20.10#820010)