[ 
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)

Reply via email to