|Re: [m2e-users] M2Eclipse Performance (Was: Having a Bad Week - eclipse sick)|
I have tested m2eclipse performance.
These are my first impressions:
1) ProjectRegistryRefreshJob changes a workspace and fires a lot of resource change listeners.
When creating a marker, for instance, this job fires five resource change listeners (createMarker and four the setAttribute methods).
This job should be WorkspaceJob.
2) ProjectRegistryRefreshJob and MavenBuilder (a builder job) aren't synchronized what often causes StaleMutableProjectRegistryException (ProjectRegistryManager, line 319) and that is the cause of starting this job again.
3) LifecycleMappingFactory.getBundleMetadataSources is too often called. Every time it is called it reads the extension point registry and lifecycle mapping xml files. Caching would speed up the overall performance.
4) The BuildPathManager.configureAttchedSourcesAndJavadoc method is very slow. I have improved it a little (DownloadSourcesJob isn't started when the download preferences are off), but it is possible to improve it more.
5) NexusIndexManager.mavenProjectChanged(...) always removes and adds back an artifact to the index repository. Performance will be much better if the index repository is updated only when the artifact doesn't exist or is changed. Searching the index repository is much faster than removing and adding artifacts.
6) MarkerLocationService.addEditorHintMarkers calls two methods that acquire the WTP's IDOMModel (StructuredModelManager.getModelManager().getModelForRead(...)) and release it. WTP's methods can be slow for larger files and it would be better to acquire/release the model once for MarkerLocationService.addEditorHintMarkers.
MarkerLocationService.addEditorHintMarkers is used only once.
7) ProjectRegistryManager.applyMutableProjectRegistry calls stateReader.writeWorkspaceState(projectRegistry) when refreshing a project. Since the workspaceState.ser file is only used when starting a workspace, this method can be used only when stopping the org.eclipse.m2e.core bundle
8) BuildPathManager.mavenProjectChanged updates Maven classpath containers of all projects no matter they are changed or not. They should be updated only for relevant events (event.getFlags() != 0).
9) ProjectRegistryManager.refresh(MutableProjectRegistry newState, DependencyResolutionContext context, IProgressMonitor monitor) aggressively
read Maven projects.
I have tested JBoss AS 7 (https://github.com/jbossas/jboss-as). When calling Maven>Update Project Configuration on the jboss-as-parent project, the MavenImpl.readProject is called for about 2-6 times for each project in the workspace. Sometimes this method lasts short time (Maven cache is active), but sometimes takes a longer time.
I have tried to cache MavenProjectFacade in each of the two phases so that MavenImpl.readProject is called two times for every project (once per each phase). Not sure if it is possible to make this method to be run only once.
10) The Maven Pom Editor has a huge memory leak. Just opening/closing jboss-as-parent/pom.xml will cause the JVM heap size to increase by 2-10MB which can cause Eclipse to crash (OOM).
I have implemented 1-9 enhancements. The Maven>Update Project Configuration action on the jboss-as-parent project is much faster (2-3 times). Editing the pom.xml file of the jboss-as-parent project is 2-3 times faster. The Maven builder is improved 2-3 times.
Would you like me to create a patch?
Snjezana Peco wrote:
I would like to test this a bit more. Could you provide me with more details?
Steve Cohen wrote:
and, sad to say, it's mostly because of the combination of m2eclipse, helios, subversive and the whole fracking mess.
Eclipse has become less and less usable. I don't know who's to blame, which plugin is the cause or whether it's the whole platform or some combination. Rare is the day of heavy development where Eclipse doesn't crash many times.
Every crash is different. Sometimes I have to delete the .lock file. Other times I don't. Other times I can't do it without killing processes.
Could you check if there are files named hs_err_pidXXXX.log in your working directory (your ECLIPSE_HOME probably)?
If so, could you attach any of them?
m2eclipse, whatever the latest that's available today
Could you attach your configuration : Help>About Eclipse SDK>Installation Details>Configuration
There are still user interface actions that provoke crashes.
What actions are causing the crash? Editing pom.xml, cleaning the project, svn checkout/merge or something else.
m2e-users mailing list
m2e-users mailing list
Back to the top