Lets explore some of the tricks to monitor and improve performance of apps runningin Eclipse and also how we can write better API.1. VisualVM is a great tool to monitor the performance of any eclipseapplication. Once the plugin is installed, any eclipse app can be launched in theVisualVM Runtime instead of a Java Runtime so that the health of the app can bemonitored in real-time.Reference : https://visualvm.dev.java.net/eclipse-launcher.html2. If we enable "Show Heap Status" under General Preferences, we canperiodically enforce GC, which is very important for heap analysis.3. Now we can really enable in-depth monitoring by turning on RuntimeSpy through an .options file e.g. eclipse -debug c:spy.optionsHere is the Update site for core toolsplatform-core - http://eclipse.org/eclipse/platform-core/updatesReferences :http://www.jdg2e.com/ch32.performance/doc/index.html#refsGoogle Bookhttp://www.eclipse.org/eclipse/platform-core/downloads/tools/readme.htmlSample settings of the Runtime Spy .options file#### Monitoring settings# monitor class loadingorg.eclipse.osgi/monitor/classes=true# monitor bundle activationorg.eclipse.osgi/monitor/activation=true# monitor resource bundle (*.properties) loadingorg.eclipse.osgi/monitor/resources=true#### Trace settings# trace class loading - snapshot the execution stack when a class is loadedorg.eclipse.osgi/trace/classLoading=true# trace location - file in which execution traces are writtenorg.eclipse.osgi/trace/filename=runtime.traces# trace filters - Java properties file defining which classes should# be traced (if trace/classLoading is true)etc........4. Well even after enabling all types of monitoring, we still sometimes can not findout why certain apps leads to OutOfMemory Error !Then the only way out is to generate the Heap Dumps and Thread Dumps.We can add this vmarg in eclipse.ini --Xdump:java+heap+system:events=user,opts=CLASSIC+PHD so that wheneverSendSignal is executed corresponding dumps will be generated.
Otherwise we can start eclipse in command prompt as follows and then doCtrl+break to signal the vm.eclipse -vm binjava.exe -console -consoleLog -vmargs -verbose:class -verbose:dynload -Xms1024m -Xmx1536m -XX:MaxPermSize=128m-Xdump:heap+java:events=user,opts=CLASSIC+PHD -Xgcpolicy:optavgpaus.Another way to send stop signal to vm - cdb -p -c ".dump /ma java.dmp;q"- Where is the integer process Id of the java process.5. Time to highlight the importance of designing API and SPI using eclipsecodebase. This is an invaluable source of knowledge about evolving Eclipse API andproper usage of annotations like @noimplement, @noextend etc.Its a classic : http://www.eclipse.org/eclipse/development/java-api-evolution.html6. In order to enforce API Analysis we should refer to - http://www.eclipse-tips.com/tutorials/26-api-tooling-tutorial. After all Eclipse is meant for coding cleaninterfaces and abstract classes that communicates to users through simple annotationsand robust patterns.7. Its not a bad idea to enforce internationalization – using the setting-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error in.settings file.Fixing Int issues at the early stage prevents from wasting a good amount oftime and introducing unsolicited bugs at the time of product delivery phase.8. we should flag unused imports as errors in preference to make it a dailyhabit getting rid of unnecessary evils.9. Templating try / catch to actually catch and log an exception is aMUST ! Eclipse should fix this by default providing aexception.printStackTrace() statement. Empty catch blocks are silent killersthat remain hidden inside deeply nested api !10. The last but not the least FindBug should be part of developmentenvironment and be actively used.Well ... a bonus tip for hackers :-) ... dont forget the decompiler plugin-http://java.decompiler.free.fr/jd-eclipse/update- using
which you can even debug any class that essentially do not have source baseshipped with its tool !11. Remote Debugging Options :-vmargs-Xdebug-Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=900012. Start Eclipse in Command Prompt and see how classes are loaded13. How to generate compiler warnings for Internationalization Checking :-- java settings14. How to enforce annotations for api ?http://www.eclipse-tips.com/tutorials/26-api-tooling-tutorial-- enforce usage of @since, @noimplement annotations15. How to view OSGi dependency and search plugin dependency ?STS - http://blog.springsource.com/2009/03/05/osgi-development-tools-in-sts/http://blog.springsource.com/wp-content/uploads/2009/03/dependency-graph.png16.Use JavaRebel Eclipse Pluging for faster hot deployment. http://www.zeroturnaround.com/blog/eclipse-plugin-tutorial/17.For Server-Side application use SysDeo plugin http://www.eclipsetotale.com/tomcatPlugin.html