Benchmarking Smalltalk on JVM

Rémi Forax forax at univ-mlv.fr
Wed Feb 1 00:34:38 PST 2012


On 02/01/2012 01:52 AM, Mark Roos wrote:
> I just loaded about 250K lines of Smalltalk code into my jvm 
> implementation so now I can start
> some real benchmarks using our application.  All of this was done on a 
> Mac.
>
> My first try was a object load which takes about 20 files and creates 
> a pretty complex object set.  This
> takes 100 seconds in ST and using the initial jdk7 release I also get 
> 100 seconds.  Not bad.  But
> I see that one of the major slowdowns is in my use of boxed integers 
> vs STs use of Fixnums.  So
> I did some more detailed experiments.
>
> Using this code snippet which creates and drops about 2 million 
> Integers which ST does in about 10ms.
>
>     | bytes pos sum |
>     bytes := ByteArray new:1000000.
>     sum := 0.
>     pos := 1.
>     [pos <= 1000000]    whileTrue:[
>         sum := bytes at:pos.
>         pos := pos + 1].
>     ^sum
>
> For the initial JDK7 I get 400ms,  moving to jdk8 b20 it drops to 
> 117ms ( very nice).
> I then converted some constructor lookups to statics to get to 66ms.
> Then the obvious move to make an integer cache for which I used the 
> jTalk range of -2000 to 4000 gave 30ms
> And finally ( to handle the index integer) I created a MutableInteger 
> which dropped me to 5ms.
>
> So 2X better than the ST I started with.
>
> But then I upgraded to jsk8b23 and now the best I see is 16ms.  It 
> also seems like the jit sometimes
> compiles and sometimes not even using the same startup sequence. 
>  Bleeding edge I would guess.
>
> But for the final test I used jdk7u4 and my load is 73 seconds.  Not 
> as good as the best jdk8b20 ( 60 seconds)
> but faster than native Smalltalk

Hi Mark, I believe tiered compilation was enable by default between 
jdk8b20 and jdk8b23.
I have seen some weird compilation pattern too but no time to really 
investigate.

>
> looking good
> mark

Rémi



More information about the mlvm-dev mailing list