Par défaut, Eclipse est tout à fait adapter pour des projets « standard » de taille moyenne et qui ne demandent pas beaucoup de dépendances complexes.
Par contre dès qu’il s’agit de développer dans un environnement plus complexe avec plusieurs Frameworks et plugins, cela peut facilement tourner au drame et avoir quelques erreurs dues à l’insuffisance de mémoire notamment dans la zone mémoire « permGen space », comme « Eclipse need more memory… Do you want to exit the workbench now ? » ou « OutOfMemoryException« . Ce genre d’erreur est assez répétitif et nous fait perdre beaucoup de temps.
Alors quelques définitions s’imposent,
- Le permGen space de la JVM :
Spécifique à la JVM Sun, cette zone mémoire contient tout ce qui n’est pas géré par le Garbage Collector; tout ce qui est relatif au classes (leur structure: méthodes, champs, annotations…), les champs static, les chaines littérales… On spécifie le permGen space avec les propriétés -XX:PermSize=256m et -XX:MaxPermSize=256m par exemple. Plus on a de classes différentes plus il faut augmenter la taille de cette zone mémoire. - Heap space de la JVM :
Les propriétés -Xms768m et -Xmx768m permettent de spécifier la taille du heap space de la JVM, la taille de la mémoire utilisée pour faire vivre les objets java, la taille du dépot où sont stockés les objets en vie, les objets morts et la mémoire libre. C’est le Garbage Collector (GC) de la JVM qui s’occupe de nettoyer tout ca en fonction de la taille allouée à la mémoire. Un objet inutilisé (aucun pointeur (variable) qui y fait référence) est théoriquement supprimé de la mémoire par le GC quand celui ci se charge de nettoyer la mémoire.
Alors pour remédier à tout cela, la solution est de passer des paramètres au lancement de Eclipse. Ces paramètres dépendent de la configuration de notre machine.
Tout d’abord, pour donner des paramètres lors du lancement de Eclipse, on rajoute « -vmargs » suivi des paramètres souhaités :
- -Xmx256m : pour augmenter la mémoire maximum utilisable par la JVM (ici à 256Mo)
- -XX:PermSize=64m : définir la taille par défaut allouée pour le permGen Space.
- -XX:MaxPermSize=64m : la taille maximum pour le permGen space.
il faut ajouter également « -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled » à la liste des paramètres afin d’autoriser le garbage collector à décharger des classes dynamiquement et de nettoyer les objets…
Voici un exemple d’utilisation par rapport à la configuration de la machien (taille de la RAM) :
- Pour 512Mo de Ram: -vmargs -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64m -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
- Pour 1Go de Ram: -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
- Pour 2Go de Ram: -vmargs -Xms768m -Xmx768m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
Astuces : Pour faire ceci directement sans passer à chaque fois par la console (sous windows), on crée un raccourci de Eclipse sur le bureau par exemple (si ce n’est pas déjà fait), puis on va dans propriété -> raccourci -> et on ajoute les paramètres décrits ci-dessus selon notre configuration,
exemple (pour une config avec une RAM de 2 Go)
"C:\Program Files\eclipse\eclipse.exe" -vmargs -Xms768m -Xmx768m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled- Tags: Eclipse,JAVA,Mémoire,memory,OutOfMemoryException,permGen,space,JVM,Astuces