From APIDesign

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 (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

The benefits of our startup cache on cold start of JDeveloper (with caches) is clearly visible.

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!


Personal tools