Plan for NB 6.1 Performance Improvements
This is an implementation plan for performance improvements targeted for NetBeans 6.1 release. It covers work done by the performance team and some important issues solved by other teams, but still not quite all performance work done for 6.1 by all developers.
For an overview of what's being done for 6.1 see the list of planned improvements.
Important NB 6.1 Dates
- feature freeze - February 25 (6.1 M2)
- code freeze - March 31
- final release - April 21
See also NB 6.1 milestones.
The plan is divided into several milestones; the first one matches the official NetBeans 6.1 M1. The paragraph under each milestone describes what should be done (finished) by the date of the milestone. The plan is checked and updated weekly (on Monday).
January 14 (M1)
- (Yarda) Project opening does not block IDE startup - IZ 108120
- P1: Prefer main project TBD
- (Radek) Master FS optimizations (do not delegate to embedded FS) - IZ 123542, see also FileSystems
- (Radek, Yarda) Lightweight file locking (faster file deletion and first file modification in editor, especially in deep file hierarchies) - IZ 106128
- [[File:]] (with incomplete or not up-to-date metadata, so e.g. during scanning after startup)
- done without UI that informs the user about incomplete results - TBD later after used for some time by people
- need Fast Track API review
- replace existing build with new one and keep userdir P1
- also during development when API Support updates the shared dir P1
- talk to installer
- (Yarda, Tomas M.) Saving project properties not in AWT event queue thread - IZ 91291
- both j2se and web projects
- Basic infrastructure for automated memory leak testing prepared - for IZ 121855, found leaks
- (Sandip, Winston) VW: On-demand binding attribute - significantly reducing size of JSP and Java files for designed pages - IZ 123536
- done for newly created pages, TODO an action for existing pages
- VW: Improve page flow editor opening (avoiding unnecessary page syncing) - IZ 123534
- UI responsiveness of opening VW pages
- (Peter Zavadsky) VW: Only open the active page after startup - IZ 124931
- Computed, shown, now we need to turn it into a "trigger warning"
- Once made available, other should comment
- (QE) Comparative Dashboard update - latest results
- (Jirka) Prototypes of entry points for FoD (all types of P1 entry points)
- no point in Tools/Options yet; Jarda: working actions
- FoD postponed after 6.1 ...
- (Jarda) Cache for module config files (startup)
- (Jarda) Optimizing caches saving not to block startup and shutdown (e.g. layer cache, resources cache)
- (John Baker) VW: Caching table metadata not to connect to database during page open - IZ 123537
- Java editor improvements
- [[File:]], announce
- (QE) BlackListed Class Logger (to watch classes loaded during startup)
- (Pavel) Update on Windows / IO slowness
- Additional optimization of lazy project opening
- (Milan) New API integrated - IZ 124980
- (Tomas Z.) Global CP created and scanned after all projects opened
- (Pavel) Go to Type dialog working with full CP after all projects opened
- (QE) Tests Migration and Infrastructure changes because of migration to Mercurial
- (Tomas M., Jarda) Automated unit tests for jsp parser
- (Tomas M.) JSP parser caching fixes
- (QE) Why 6.1 occupies more memory than 6.0, is it due to caches? No it's IZ 126206
- (QE) measure cold startup, four configurations ready, machine set up already, we do not have viewer and data will be sent by mail, later visible on some website
February 25 (M2)
- (Pavel) Analysis of overall slowness of Windows (mainly I/O related)
- some tests for single byte writes and File.isDirectory() calls - IZ 65135
- comparative measuring of cold start and project opening/scanning on Windows and Linux (on the same HW)
- UI change - don't show "not found" until all scanning finished
- update on possible scanning task interruption
- (Tomas M.) Background reparse - immediate cache updates after CP changes for code completion
- (Tomas M.) Eliminate code duplication in projects (part I) - IZ 126741
- (QE) Variance calculation: create "trigger warning", relative normalized variance - easy, maybe one graph for value+variance
- (QE) VisualWeb measuring
- (QE) Update on progress writing memory leaks, something written for Visual Web, not integrated. Some more tests to come soon.
- (Jarda) Ensure responsive switching over multiple tabs (window system)
- (Jarda) Make repetitive actions in explorer (browsing, selections) fluent (actions system)
- (Jarda) Slow switching between files in editor or changing selection in Explorer (due to non-scaling listeners)
- (Pavel) Eliminate single byte reads/writes in FileInputStream/FileOutputStream - IZ 129286
- (Pavel) Compare single bytes read/writes of 6.0 to current state
- [[File:]] (IO touches)
- (Jarda) Run tests on memory leaks regularly (e.g. commit validation): fix own issues, ask others to fix their, remeasure the real state
- problems with leaks from AWT and other parts of the system
- (Jarda) Speedup startup with opened editor
Long Running Tasks
These tasks are being worked on but have no planned deadline.
- (QE) Test spec update, tests maintenance, extending test Suite, VM Ware image usage, etc...
- (All) Find memory leaks in common areas - to make sure basic open/edit/save/compile/debug/test scenarios in main project types do not create major leaks in key data structures; should be covered by tests
- (Quy) Memory leak fixes in Visual Web - IZ 123530
- (Tomas M.) Eliminate code duplication in projects (part I - nearly done, part II - mainly related to project classpath) - IZ 122883, IZ 126741
Tasks not yet included in the plan
- P3: Analyze disk access during common operations like expanding a package - to be able to optimize for network and slow filesystems
- P3: Improve opening of UML diagrams (a lot of time spent in finding in model in diagrams with many connections) - IZ 123518
- P3: Improve performance reverse engineering a java project into the same UML project more than once - IZ 123522
- P3: Improve response time of UML explorer (selecting multiple nodes, invoking context menu) - IZ 123523
Dropped tasks (postponed after 6.1)
These tasks were originally considered for 6.1 but eventually dropped.
- Feature on Demand - decided to postpone after 6.1 - the startup gain is not that big after all, it represents quite some work (would have to stop much of other work), it is risky and controversial - simply a too big thing for 6.1
- P3: Avoid initial JDK classes scanning when creating/opening first project.
- P2: Specific memory optimizations (JSP tag libs)
- two pages do not share the same tag libraries, they create new memory structures
- hard as each page can have own prefix and it is currently hardcoded in constructor