You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Craig White (JIRA)" <ji...@apache.org> on 2016/12/13 19:37:59 UTC
[jira] [Commented] (GROOVY-8019) Strange performance issue using
if(true) versus if(1==1)
[ https://issues.apache.org/jira/browse/GROOVY-8019?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15746044#comment-15746044 ]
Craig White commented on GROOVY-8019:
-------------------------------------
Thanks for the quick investigation!
I just added Groovy-8020 as there seems to be a similar issue with While() statements that likely wasn't addressed by the fix here.
> Strange performance issue using if(true) versus if(1==1)
> --------------------------------------------------------
>
> Key: GROOVY-8019
> URL: https://issues.apache.org/jira/browse/GROOVY-8019
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.4.4, 2.4.7
> Environment: Groovy Script Engine in a Java app running on Windows 7 and Windows Server 2012
> Reporter: Craig White
> Assignee: Jochen Theodorou
> Fix For: 2.4.8
>
>
> While using a Groovy script we came across a strange performance anomaly. Having the bulk of our script wrapped in an if( true ){} statement as opposed to an if( 1==1 ){} statement severely degrades performance of the inner part of the script. Multi-threaded performance is most severely affected. There appeared to be much more contention running the same script on a 48 core box with the "if(true)". (took about 100x longer to run 48 copies of these scripts on their own threads).
> The curious aspect of this, is that the 'if' statement is not in the nested loops, but somehow has negatively affected the compilation / optimization / byte-code.
> Running a Single copy of this script on a 8 core i7 shows quite a performance hit too... (5000ms vs. 200ms)
> The (effective) code to run the script is as follows...
> {code}
> compiledScript = ((Compilable)engine).compile(scriptString);
> result = compiledScript.eval(bindings);
> {code}
> Here's the script...
> {code}
> // $script_engine_name=groovy
> long sum = 0;
> double m = 1;
> if( true ) {
> System.err.println( "START");
> long t0 = System.currentTimeMillis();
> for( int j=0; j<1000; j++ ) {
> for( int i=0; i<100000; i++ ) {
> sum = sum + i;
> m = m*i;
> }
> }
> long t1 = System.currentTimeMillis();
> System.err.println( "END - " + (t1-t0)+"ms");
> }
> System.err.println( "Done: "+sum+" "+m );
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)