Tuesday, January 06, 2009

JavaFX Performance

Recently I did a comparison of JavaFX performance vs. Scala. I did this mostly for kicks, and because some people thought that Mr. JavaFX was picking on other, non-Java languages that run on the VM. James Iry duly pointed out that JavaFX should be benchmarked against the likes of Ruby, Groovy, or Scala. It is meant to be a client-side technology, so it should go up against client-side technologies. So I re-did the little performance comparison to match JavaFX against JavaScript, ActionScript (Flash), and C# (Silverlight).

A comparison like this really becomes a comparison of Virtual Machines. For JavaScript there are a lot of choices. I decided to go with some that are supposed to be fast: Google Chrome, Firefox 3.1 (beta 2), and Safari 4 (developer preview.) Because I wanted Chrome involved, I had to go Windows. So I ran everything under Windows XP, running under Parallels on my MacBook. Here is the pretty graph:

I was just a little surprised by these results. JavaFX is indeed the fastest, but just barely. I was somewhat shocked to see Chrome's V8 JS engine right behind. In fact the difference is negligible for small iterations (shown above.) At larger iterations, JavaFX maintained 20-40% margin. As you can see from the graph, Flash and Silverlight were kneck-and-kneck as well, but was always about 7-10x slower than Chrome/JavaFX. Safari and Firefox were very underwhelming.

Of course this was just a micro-benchmark. The code just does a series of recursive calls. So what were are really measuring is the ability of the VMs to unwind these recursive calls. It is not suprising that HotSpot handles this easily. Actually, the same code in straight Java is much faster than the JavaFX version. It is surprising to see how well V8 handles this.

Now does the ability to unwind recursion translate into performance that a web application user would notice? Maybe. It certainly points to JavaFX's or V8's ability to make optimizations to application code. It is probably a more meaningful test than some raw number crunching.

4 comments:

Josh McDonald said...

Hmmm. Was that a build of Firefox with Tamarin-Trace? Because it's supposedly the actual code you'll find in Flash Player. I'd expect it to be a lot closer to Flash / SL.

*shakes head* The VM is the machine architecture of 20 years ago... Multiple implementations of a compatible standard would be nicer methinks. And that standard has to be better than JavaScript :D

Anonymous said...

You ran these in parallels? Not that it's a huge problem but doesn't that preclude much of the openGL buttressing of JavaFX or any of the others? It was my impression that openGL performance in Parallels is weak, at best, and I believe it would make a difference.

Just a thouguht.

Rebeca said...

Can you suggest me for what is best source for Silverlight tutorial.

SRIKANTH LANKAPALLI said...

buddy... your results do not match with this...
http://www.shinedraw.com/image-manipulation/javafx-vs-flash-vs-silverlight/

is your benchmarking correct?????????