7 tips to speed up eclipse

About a month ago, I blogged about my love/hate relationship with Eclipse. I was asked by a few people to share my tips on how I was able to speed it up over time:

Note: This assumes that you already have an SSD and at least 8Gb of RAM. If not, look no further and upgrade your hardware.

Tip 1 : Always run the latest JDK and Eclipse.

New JDK and Eclipse versions include fixes and optimizations from prior versions. Make sure that you are using the 64 bits version of Eclipse and of the Oracle JDK. For any web development, you will want to use Eclipse for Java EE and not Eclipse for Java.

Oracle JDK : http://www.oracle.com/technetwork/java/javase/downloads
Eclipse : https://eclipse.org/downloads/

Place Eclipse and your code repos on your SSD.

Tip 2 : Tune Eclipse Preferences

  • General > Startup and Shutdown : remove all plugins activated on startup
  • General > Editors > Text Editors > Spelling : Disable spell checking
  • General > Validation > Suspend all
  • Window > Customize Perspective > Remove stuff you don’t use or want (shortcut keys are your friends), same for Menu Visibility (how many times have you printed a source file…)
  • Install/Update > Automatic Updates > Uncheck “Automatically find new updates”
  • General > Appearance > Uncheck Enable Animations
  • Stay with the default theme. Anything else makes it slow.

I personally turn off autosuggestions so that they don’t slow down my typing. Instead, I manually trigger the auto suggestions using Ctrl+Space when needed. This is done through:

  • Java > Editor > Content Assist > disable Enable Auto Activation. Advanced > Remove all unwanted kinds

Tip 3 : Keep your JDK on a RAM Disk

A RAM disk is a virtual disk or hard drive that is stored into the computer’s memory. It boosts the I/O performance on anything that is on it. Creating a RAM disk uses your RAM even though it just appears as a drive on the computer. Because the memory used will be reserved for the disk and become unavailable for other programs, we will only be putting the JDK on there. 300MB will be enough.

Warning: Don’t put anything permanent on the RAM Disk, it will be erased/recreated at each reboot.

Linux users:

Everything is described here already

Mac Users:

The RAM Disk is created with the diskutil tool:

  1. Create a new batch file, for example: ~/tools/batch/ramdisk.sh
    Replace x, y, and z with the JDK version you have installed on disk:
1
2
3
4
#!/bin/bash 
diskutil erasevolume HFS+ 'JDK RAMDISK' `hdiutil attach -nomount ram://614400`
cp -r /Library/Java/JavaVirtualMachines/jdk1.x.y_z.jdk /Volumes/JDKRAMDISK
(Note that diskutil expects the number of 512 bytes sectors to be allocated: for 300MB, 300 * 1024 ^ 2 / 512 = 614400)
  1. Save your file and make it executable:
1
chmod 755 ~/tools/batch/ramdisk.sh

Now run ramdisk.sh to create the RAM Disk:

1
2
3
4
5
6
7
$ ramdisk.sh 
Started erase on disk4
Unmounting disk
Erasing
Initialized /dev/rdisk4 as a 300 MB case-insensitive HFS Plus volume
Mounting disk
Finished erase on disk4 JDKRAMDISK

You should now see in Finder the new device called JDKRAMDISK containing your JDK. You can remove the RAM Disk and free its memory by clicking on the Eject button:

You will always need to have the RAM Disk in order to launch Eclipse (otherwise you will see the error A Java Runtime … must be available in order to run Eclipse). You can configure your system to run the ramdisk.sh script automatically upon startup using Automator or using a launchtl daemon.

Windows Users:

  1. Download and install the utility called imdisk

  2. Create a new batch file, for example: C:/tools/batch/ramdisk.bat

Replace x, y, and z with the JDK version you have installed on disk in the following script:

1
2
3
4
5
6
7
8
@echo Placing JDK on Virtual Disk N:/
@echo off
sc config imdisk start= auto
net start imdisk
imdisk -a -t vm -s 300m -m n:
format n: /q /Y
call xcopy C:\<path_jdk>\jdk1.x.y_z N:\jdk1.x.y_z\ /S /E /Y /Q
label n: JDK RAMDISK

By running ramdisk.bat, you will have created a new disk N: labeled “JDK RAMDISK” that will contain your JDK.

  1. Make sure the file is run as an Administrator. Right click on the file, go into Properties and check Run as Administrator.

You will always need to have the RAM Disk in order to launch Eclipse (otherwise you will see the error A Java Runtime … must be available in order to run Eclipse). You can configure your system to run the ramdisk.bat script automatically by placing the script into your Startup folder.

In order for Tip 3 to work, you will need to add the -vm setting in eclipse.ini (see next section)

Tip 4 : Tweak your eclipse.ini

Locate your eclipse.ini file:

  • Windows/Linux: $ECLIPSE_HOME
  • MacOS: $ECLIPSE_HOME/Eclipse.app/Contents/MacOS

Eclipse.ini contains 2 types of properties: properties relative to the Eclipse application and properties relative to the JVM. Those options are different depending upon your version of JDK or Eclipse. Here is the most up-to-date list I was able to find online.

Oracle’s JVM memory is divided into multiple memory pools where objects reside with time:

  • The Eden Space (heap) provides the memory for most initial objects. The Garbage Collector passes often through this space containing objects of “young generation”. It removes any objects that hasn’t been used for a while.
  • The Survivor Space (heap) contains the objects that have not been destroyed after 2-3 passes of the GC in the Eden Space. They are still part of the “young generation” but have moved to a much safer place where they have less chances of being destroyed: the Garbage Collector passes much less often there (it assumes from past experience that objects are used more frequently).
  • The Tenured Space (heap) contains the objects that have been in the Survivor Space for a while.
  • The Permanent Generation (non-heap) contains all the metadata about of the JVM, such as the class properties, methods, enums, etc. Because that data can be shared accross multiple JVMs, the permanent generation has read-only and read-write areas.
  • The Code Cache (non-heap) provides the memory used for compiling and storing code.

Oracle wrote a great article about garbage collection tuning.

The sizes for all those memory pools can be tweaked in eclipse.ini. I currently have 16Gb of RAM, but these settings will work fine with 8Gb of RAM.

Settings tweaks:

  • use the JDK stored on the RAM Disk (see Step 3):
1
2
3
4
-vm
/Volumes/JDKRAMDISK/jdk1.x.y_z.jdk/Contents/Home/
-vm
N:/jdk1.x.y_z/bin
  • disable bytecode verification
1
-Xverify:none

This basically skips the verification of class files (described here) aka the JVM won’t be able to detect the authenticity of the class files you are using. This poses a security threat if the compiled files have been altered so use at your own risk.

  • turn on performance compiler optimizations
1
-XX:+AggressiveOpts
  • increase permanent generation space
1
2
-XX:PermSize=512m
-XX:MaxPermSize=512m
  • increase min and max heap sizes
1
2
-Xms2048m
-Xmx2048m
  • increase heap size for the young generation
1
-Xmn512m
  • set stack size for each thread
1
-Xss2m
  • tweak garbage collection
1
-XX:+UseParallelOldGC

Tip 5: Get your anti-virus outta here

If you have an anti-virus, make sure that it doesn’t interfere with your code folders. Add the JDK folder, the Eclipse folder, your .m2/jar repositories, and your code folders to the antivirus whitelist.

Tip 6: Keep SVN and GIT out of Eclipse

This is really a matter of personal preference. Some will like the Eclipse integration with the collaborative team tools. Personally I find they tend to make Eclipse slow and aren’t a good replacement for GIT/SVN CLIs.

Tip 7: Use your keyboard

Everything in Eclipse either has, or can be assigned a keyboard shortcut. Take some time to learn them and customize to your liking. I personally find that I can be more efficient when my hands don’t have to leave my keyboard.

A few important ones:

1
2
3
4
5
6
7
8
9
10
Ctrl+Shift+R : jump to resource
Ctrl+Shift+T : jump to class
Ctrl+. : jump to next error
Ctrl+Shift+G : search for references
Ctrl+Shift+P : select matching bracket
Alt+Arrows : go forward / backwards
Ctrl+Space : autocomplete
Ctrl+Shift+F : format source
Ctrl+Shift+O : organize imports
Ctrl+D : delete line

If you have any other tips, I’d love to hear about them!

21 Comments

Zappa says (November 27, 2014 at 11:03 pm):

Great tips.
Personnaly, my two favorite shortcuts are :
– Ctrl+O to jump to any field/function in the current file.
– Ctrl+Alt+R while being on any field/function to rename it.
Also, I don’t like GIT inside Eclipse. Kinda not work like I want, or maybe I don’t use it the right way.

Felipe says (March 16, 2015 at 2:10 pm):

It’s Alt + Shift + R

kenu says (March 10, 2015 at 5:25 pm):

Some guys talked to me that deleting plugins/.jp., features/.jp*.* plugins is useful when you don’t use JPA features.
Thank you for your tips.

Tom says (August 18, 2015 at 3:42 am):

Thanks for the tips. Small correction: Validation is a root category, not a subcategory of General (at least in Luna). Also, here’s another tip that has made Eclipse more bearable: remap Ctrl+Tab to the “Next Editor” command. This will allow you to switch back and forth between two documents by using Ctrl-Tabbing, similar to the behavior of some other popular editors.

Tom says (August 18, 2015 at 4:08 am):

One more thing: instead of using the -vm option, I simply copy the JDK ‘bin’ directory to my virtual disk in my startup script and then create a symlink/junction to this directory inside the JDK directory. The benefits are (1) you only consume 3MB of RAM instead of 300MB, and (2) any other application that relies on JDK ‘bin’ will also benefit.

Karsten Thoms says (September 18, 2015 at 11:41 am):

Nicolas, a really great and useful post! I am personally interested in getting the most out of Eclipse’s speed and will give a talk at EclipseCon Europe this year about that: https://www.eclipsecon.org/europe2015/session/boosting-performance-your-eclipse-ide
Your post was a valuable, if not the most valuable, source of inspiration. I will give reference to it on my slides.
I recognized a minor issue: The option “-XX:+CMSIncrementalPacing” you are mentioning is ineffective, it is a setting for the Concurrent Mark and Sweep GC. But you are activating exlicitly another GC, thus CMS is not active.
Actually there is the next error, you both mention “-XX:+UseParallelOldGC” and “-XX:+UseG1GC”. These are two different GCs and the JVM won’t start with both options.
When using G1GC it is not recommended to set the Young Generation size with -Xmn. There is a good article about benchmarking different GCs: http://blog.mgm-tp.com/2013/12/benchmarking-g1-and-other-java-7-garbage-collectors/
Last issue: The option “-XX:MaxGCPauseMillis=10” is mentioned twice.
Personally it does not work on my Mac to move the full JRE to RamDisk and reference it with -vm. The JVM refuses to start, it does not find a dylib then. Therefore I only moved rt.jar to RAM and make a symbolic link to its representation on RAM Disk. It is of course useful to store more on the RAM Disk: Read-only files (esp. Plugin Jars) and temporary data (Local History, JDT Index, Build output folders). The problem with Build Output is that you have to use symbolic links and create them with scripts when working in a team, since other team members might rely on the fact that the output folder is local to the project location.
Best wishes,
~Karsten

Alberto Braschi says (June 8, 2017 at 12:38 pm):

pretty sure!

al says (September 18, 2015 at 12:17 pm):

Favorite Eclipse shortcut, especially for very large projects.
shift+cmd+r = Open Resource (file finder , with wildcards!)
2nd fav , especially for very large files
cmd+o = Open method list , do it again and you get inherited members

Michel van Leeuwen says (October 29, 2015 at 3:37 pm):

Great tips!
about: Tip 6: Keep SVN and GIT out of Eclipse
I agree. (I use git command line).
How do I remove it? (i see it’s marking changes… so it’s somehow activated, maybe by me a while ago)

Jeroen says (November 24, 2015 at 9:19 pm):

Saving of the settings file was taking ages. Apparently this was caused by xml validation settings.
Probably the setting “Check full XML schema conformance” under XML > XML Schema Files

robert says (January 2, 2016 at 2:09 pm):

Nicolas, thank you for taking your time to write a nice and useful tutorial. I’m trying to set up eclipse to get the jdk from the ramdisk, but I get an error when trying to launch it: “To open eclipse you need to install the legacy Java SE 6 runtime.”. I applied the correct path in eclipse.ini and checked if the files are in there, everything should work, but somehow it doesn’t. I’m on a macbook running el capitan. Any thoughts? Thank you!

mcahornsirup says (September 29, 2016 at 11:51 am):

Great article, same issue … any ideas?

Lakshman says (January 7, 2016 at 3:15 pm):

What a nice article. finally my eclipse is good for programming.

Luca says (April 13, 2016 at 12:03 pm):

I find the post extremely interesting and I would like to ask a question:
if I have a workstation with a really fast SSD drive where I install everything, i.e. Eclipse and JDK (in my case also python since use python), do you think that the process you have proposed will still provide some gain in performance?
Thanks you
Luca

Andre Paschoal says (October 17, 2016 at 12:34 pm):

Nicolas, thank u so much for the awesome tips.
Does anyone know how to make “class members” disapear in “Project Explorer” view ?
Thanks!

Milind says (February 2, 2017 at 5:35 am):

Great Tips !!

Walison Moreira says (June 3, 2017 at 4:00 pm):

Make your own Eclipse including only the plugins you need. Start with Eclipse Platform Runtime Binary (http://download.eclipse.org/eclipse/downloads/drops4/R-4.6.3-201703010400/#PlatformRuntime).

Kat says (July 15, 2017 at 3:25 pm):

Thank you! I’ve been trying to figure out how to make Eclipse tolerable, but since I’m so new to the environment, all of the posts I read were -unhelpful-! I didn’t do every step (failed on the 8GB thing, for starters), but it now loads in about 30 seconds as compared to 5 minutes. Thank you!

Jief says (September 25, 2017 at 9:08 am):

With java 8, I needed a “rsync -a” instead of a “cp -r”.

il Barto says (October 7, 2017 at 4:05 pm):

Great article!
I was annoyed by poor eclipse scrolling performance in MacOS Sierra, found several posts in different forums blaming Cocoa implementation and saying there was no solution, but applying just your 2nd tip improved response time and made my IDE usable.
Thank you!

Saharsh says (December 16, 2017 at 10:41 am):

Very useful! Tip 2 alone made it blazing fast (at least in comparison to earlier).
Thanks for posting.

Comments are now closed

dark
sans