Resulting class performance

Jeremy Cowgar <[email protected]>
Newsgroups gmane.comp.java.objectweb.asm
Message-ID <[email protected]>
I am writing a language called Josl (http://www.josl.org). Currently it 
is interpreted by it's own VM. I am finding that I spend as much time on 
the VM as I do with the language and this week I have been researching 
the JVM and targeting it. This will provide JIT compilation but more 
importantly all the great libraries that come with Java and are 
available. Today I began writing a compiler in Java for the Josl 
language using ASM to generate the code. I have a test compiler working 
for a bare bones version of Josl. It does a poor job of parsing the 
code, does string compares for key words, etc... but it works. I then 
setup a benchmark (benchmarking too early? :-D).

Anyway, I am concerned that I am not understanding something correctly. 
Here is my benchmark program. I've used it early on to just see what the 
raw VM loop speed is. i.e. do as minimal amount of work possible. Josl 
is a stack based language, BTW and it's entry word is "main", just like 
Java's.

main 0 300,000,000 times 1+ next

So, that starts at 0 and adds 1 each time through 300 million times. In 
Josl on my machine it takes 2.561 seconds. In my resulting .class file, 
It takes 3.009 seconds. I was expecting a huge performance increase.

I placed all my Josl-java code on github: 
http://github.com/jcowgar/josl-jvm ... now, bear in mind, I just wanted 
to quickly get to the part of making JVM byte code, pay no attention to 
the total lack of proper word lookups, the poor parser, etc... All that 
will completely change.

Now, I also made this program in Java, it's source is:

public class LoopTest {
     public static void main(String args[]) {
         int i = 0;
         int current = 0;
         int finish = 300000000;

         while (current < finish) {
             i = i+ 1;
             current++;
         }
     }
}

I tried to do it just as I did in Josl, i.e. I have a loop counter I 
call current, I also have a finish counter. Each time through I check to 
see if current < finish, I increment current and I do whatever else is 
contained in the body of the loop, in this case adding 1 to a variable 
each time.

The above LoopTest runs in 0.259 seconds. That's the kind of performance 
I was expecting with my .class files. I have used javap -c on both the 
LoopTest class and my class, they do not loop a whole lot different. 
Does anyone know what the performance difference could be caused by?

LoopTest dump:

public class LoopTest extends java.lang.Object{
public LoopTest();
   Code:
    0:   aload_0
    1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
    4:   return

public static void main(java.lang.String[]);
   Code:
    0:   iconst_0
    1:   istore_1
    2:   iconst_0
    3:   istore_2
    4:   ldc     #2; //int 300000000
    6:   istore_3
    7:   iload_2
    8:   iload_3
    9:   if_icmpge       22
    12:  iload_1
    13:  iconst_1
    14:  iadd
    15:  istore_1
    16:  iinc    2, 1
    19:  goto    7
    22:  return

}

JoslProgram dump:

public class JoslProgram extends java.lang.Object{
public JoslProgram();
   Code:
    0:   aload_0
    1:   invokespecial   #8; //Method java/lang/Object."<init>":()V
    4:   return

public static void main(java.lang.String[]);
   Code:
    0:   ldc     #11; //int 0
    2:   ldc     #12; //int 300000000
    4:   istore_1
    5:   iconst_0
    6:   istore_0
    7:   iload_1
    8:   iload_0
    9:   if_icmple       21
    12:  ldc     #13; //int 1
    14:  iadd
    15:  iinc    0, 1
    18:  goto    7
    21:  return

}
message-footer.txt (text/plain, 238 B)
-- 
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.