NetbinoxPerformance

From APIDesign

Revision as of 07:33, 11 April 2013 by JaroslavTulach (Talk | contribs)
Jump to: navigation, search

Performance has been my main focus during few recent years. I was member of NetBeans performance team and among other improvements we managed to speed the NetBeans start time from 60s to less than 20s. This has been achieved primarily by eliminating I/O operations which are quite slow when the application starts for the first time. An important piece of the whole picture is also the startup cache which eliminates the need to open JAR files during first start. As a result the NetBeans platform become the fastest starting up modular application framework in Java.

During our work on NetBeans 6.9 we decided to provide smooth support for OSGi. We started with the Netigso project - a general infrastructure to plug an OSGi compliant container into NetBeans runtime. We also created a subproject called Netbinox to specifically use Equinox container. The whole system has been working quite fine for a few months (if you need desktop, Swing and OSGi, don't hesitate to try), but only recently we focused our attention to performance. We wanted to give the OSGi application the same performance boost we have for NetBeans modules.

It's Getting Faster!

I am glad to report that recently we improved Netbinox so much that JDeveloper our testing application (together with some parts of NetBeans) starts faster than in Equinox itself.


JDeveloper running on Equinox (eager mode) Equinox (lazy mode) Netbinox (lazy mode)
Cold startup 1m 58s 1m 2s 37s
Warm caches 13s 9s 8s

Moreover this is just a toy application with a few JARs, but when you imagine really large app like JDeveloper, the benefits of our startup cache is even more visible.

Also, we will continue to optimize our system. Right now we are waisting ~5s somewhere soon in the initialization sequence, so the optimal time shall be even better. We are looking towards 30% more efficiency than Equinox!

One question for the OSGi gurus however: How can I install a bundle into the container without the Equinox or Felix copying the content of my JAR into their own caches? I've got the answer (thanks): use MagicalStrings!

<comments/>

Personal tools
buy