NetbinoxPerformance

From APIDesign

(Difference between revisions)
Jump to: navigation, search
(It's Getting Faster!)
Current revision (07:35, 11 April 2013) (edit) (undo)
(It's Getting Faster!)
 
(One intermediate revision not shown.)
Line 5: Line 5:
===== It's Getting Faster! =====
===== 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.
+
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.
-
* [[Equinox]] version needs '''19.8s'''
 
-
* [[Netbinox]] version needs just '''17.5s'''
 
-
Moreover this is just a toy application with a few [[JAR]]s, but when you imagine really large app like [[JDeveloper]], the benefits of our [[netbeans:StartupCache|startup cache]] is even more visible.
+
{| border="1"
 +
| [[JDeveloper]] running on
 +
| [[Equinox]] (''eager'' mode)
 +
| [[Equinox]] (''lazy'' mode)
 +
| [[Netbinox]] (''lazy'' mode)
 +
|-
 +
| Cold [[startup]]
 +
| 1m 58s
 +
| 1m 2s
 +
| 37s
 +
|-
 +
| Warm [[cache]]s
 +
| 13s
 +
| 9s
 +
| 8s
 +
|-
 +
|}
-
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]]!
+
The benefits of our [[netbeans:StartupCache|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]]!
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/>
<comments/>

Current revision

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!

<comments/>

Personal tools
buy