Community
Participate
Working Groups
On a system that does not take advantage of the dynamicity, the state stays loaded in memory for the whole session. For example, on wsad it can take more than 2M. It could be interesting to be able to flush this and be able to reload it dynamically using a technique similar to the registryCache.
Some measurements have been done on RAD. On startup the state represents: 66,61% of 71536 Strings loaded in memory (these numbers are obtained after several GCs). Another measurements done done on startup when the workspace chooser opens shows that it represents: 69,98% or 32120 Strings.
Please ignore any values in comment #1. Some measurements have been done on RAD. On startup the state represents: 66,61% of 71536 Strings loaded in memory (these numbers are obtained after several GCs). Another measurements done on startup when the workspace chooser opens shows that it represents: 80.34% or 39896 Strings.
Created attachment 15248 [details] Patch implementing string sharing on the state I ran the same tests with this patch provided by Tom, and here is what I can see. Startup of an empty workspace: strings from the state represent 57% of the strings left (improvement of 9%). Startup when the workspace chooser opens: strings from the state reprensent 69% of the strings (improvement of 11%).
This may worth making available on 3.0.x stream. Still a solution to unload the state is critical.
The new equinox code base provide some level of unloading, however the "lazydata" object could make use of SoftReference.
Tom, what's the status on that?
I do not plan on doing SoftReferences for 3.1. The lazyData is forcefully flushed from the state after a period of inactivity. This model reduces the complexity of the State code.
If the data is being flushed after a period of inactivity, it sounds like we can marked this bug as fixed? We'd like to clean up as many outstanding perf bugs as possible before M7.
Closing as fixed. M6 will flush the state from memory after a period of inactivity.