Attended 2 session yesterday afternoon, both related to performance. The first session was about Tuning the VM for maximum performance. Not a bad session, but didn't tell me much I didn't know. I think it could have done with a bit more of the reasons why certain tunigs work, and the reaqsons other don't. Looks like J2SE 5.0 has a feature called Smart Tuning which should mean a lot of the tweaking of command line parameters goes away.
The second session concerned minimizing application startup time. Not a bad session all in all, a lot of common sense, but it is always good to see the stuff written down. The session used examples from the J2SE 1.5 and the NetBeans product. The take home messages from the session were:
Profile before trying to optimize, then optimize, then re-profile. Do this often through your development cycle.
Lazier Initialisation is good. Don't initialise things up front that can be done later on. This can, however, result in a trade-off between startup time and application responsivness as things are initialised later. This made me think of the some potential problems with the Constructor Based IoC pattern and its desire for everything to be resolved and initialised up front. I will post more about this when I have distilled my thoughts a bit more.
Cache expensive computation. J2SE 5.0 includes something called Class Data Sharing where class data is shared between running VMs on the same machine, thus resulting in a faster startup time after the first VM, as well as decreased VM footprint. You should however beware of redundant caching, and also try to keep your caches centralised.
Sometimes fundamental algorithmic changes are necessary to improve performance. An example of this is moving to an event based parsing schemes from a DOM parsing scheme.
All in all not a bad afternoon, but I think I have had my fill of performance related sessions for this week!