[ 
https://issues.apache.org/jira/browse/GROOVY-6360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17284548#comment-17284548
 ] 

Daniel Sun commented on GROOVY-6360:
------------------------------------

The cost time is reduced from 1470ms to 360ms in my simple script.

*Before optimized:*
{code:java}
D:\_TEMP>groovy -v
Groovy Version: 4.0.0-SNAPSHOT JVM: 11.0.6 Vendor: Amazon.com Inc. OS: Windows 
10

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 1473ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 1513ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 1404ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 1469ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 1556ms
{code}

*After optimized:*
{code:java}
D:\_TEMP>
D:\_TEMP>groovy Test6360.groovy
Elapsed time: 274ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 304ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 362ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 294ms

D:\_TEMP>groovy Test6360.groovy
Elapsed time: 446ms
{code}


*Here is the related script:*
{code:java}
def str = "hello, ${'world'}"

def begin = System.currentTimeMillis()
for (int i = 0; i < 1000000; i++) {
        str.trim()
}
def end = System.currentTimeMillis()
println "Elapsed time: ${end - begin}ms"

{code}


> GString performance is slow with String's method
> ------------------------------------------------
>
>                 Key: GROOVY-6360
>                 URL: https://issues.apache.org/jira/browse/GROOVY-6360
>             Project: Groovy
>          Issue Type: Improvement
>          Components: groovy-jdk
>    Affects Versions: 2.1.7
>            Reporter: Linh Pham
>            Assignee: Paul King
>            Priority: Minor
>             Fix For: 3.0.8, 4.0.0-alpha-3
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> GString implementation of String's method is very expensive. With trim(), it 
> can be 10 times slower than String's counterpart. 
> *Steps to reproduce:*
> A small test program showed GString.trim() is 10 times slower than 
> String.trim().
> {code}
> def a = " content "
> def b = " ${'content'} "
> println "a class: ${a.class}"    //output: class java.lang.String
> println "b class: ${b.class}"    //output: class 
> org.codehaus.groovy.runtime.GStringImpl
> long start = System.currentTimeMillis()
> 10000000.times {
>     a.trim()
> }
> println "String trim completed in ${System.currentTimeMillis() - start} ms."  
> //output *909* ms
> start = System.currentTimeMillis()
> 10000000.times {
>     b.trim()
> }
> println "GString trim completed in ${System.currentTimeMillis() - start} ms." 
>  //output: *9321 *ms
> {code}
> We can get around the problem by calling toString() on GString before 
> invoking methods, BUT it should be supported inside the Groovy runtime.
> More info at this thread: http://markmail.org/thread/4cti6dgb7pmrzqbl



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to