Speedup IntelliJ-Idea

92

J'utilise intelliJ pour le développement de Scala et j'ai 8 Go de nouvelle RAM la semaine dernière, alors j'ai pensé: il est temps de l'utiliser. J'ai vérifié mon gestionnaire de tâches et a trouvé IntelliJ en utilisant ~ 250mb . Depuis l'éclipse, je savais que le réglage des options JVM avait beaucoup aidé à améliorer la vitesse, alors j'ai cherché sur Google ...

et j'ai trouvé celui-ci pour OS X Je n'ai pas pu trouver l'option JVM immédiatement, alors j'ai commencé à peaufiner Xmx. À 1 Go, j'ai réalisé que ça ne démarre plus. J'ai vérifié la version java intelliJ, j'ai trouvé qu'elle était obsolète et 32 ​​bits.

Donc, pour utiliser votre JDK actuel et 64 bits, vous devez changer votre lien en:

IntelliJ IDEA Community Edition 10.0.2\bin\idea.exe

à

IntelliJ IDEA Community Edition 10.0.2\bin\idea.BAT

et ajustez "Démarrer dans"

La chauve-souris cherche JDK_HOMEet utilise maintenant 64 bits.

Mes options de VM actuelles , qui se trouvent dans

...\IntelliJ IDEA Community Edition 10.0.2\bin\idea.exe.vmoptions

sont

-Xms512m
-Xmx1024m
-XX:MaxPermSize=512m
-ea
-server
-XX:+DoEscapeAnalysis
-XX:+UseCompressedOops
-XX:+UnlockExperimentalVMOptions
-XX:+UseParallelGC

Au lieu de -XX:+UseParallelGC, vous pouvez utiliser -XX:+UseConcMarkSweepGC, qui est

le choix accepté pour les applications de bureau, mais je suis récemment passé au collecteur de débit. car avec une machine rapide et un tas assez petit, vous avez des pauses rapides, plus de débit et aucun problème de fragmentation (ijuma. #scala)

Changements:

-XX:+UseConcMarkSweepGC //removed
// removed, because not needed with the lastest JVM.
    -XX:+UnlockExperimentalVMOptions
    -XX:+DoEscapeAnalysis
    -XX:+UseCompressedOops

Je vais m'en tenir à ces options pour le moment. J'aimerais vraiment connaître votre expérience avec.

Quelles options vous conviennent le mieux? Comment masquer cette fenêtre cmd tout en exécutant intelliJ via le .bat? :)

Au fait, voici un autre lien pour régler intelliJ . Fondamentalement, il est indiqué à la page 20/21 de désactiver la restauration de Windows et l'antivirus pour les répertoires système.

Une autre façon d'accélérer intelliJ est de mettre le dossier système intellij sur ramdrive (merci OlegYch | h).

from idea.properties 
idea.system.path=${idea.home}/.IntelliJIdea/system

Voir Superuser for Win 7 64bit RAM Drive ou celui-ci . 1 Go me semble bien.

Un autre conseil qu'un ami m'a donné est d' exclure les répertoires du projet de votre antivirus (analyse à l'accès)

Il y a des articles similaires concernant le réglage d'Eclipse:

Stefan K.
la source
6
Si la version 64 bits est exécutée, les options de la machine virtuelle vont être lues à partir deidea64.exe.vmoptions
Arnaud P
J'ai ajouté une question similaire, mais pour un système d'exploitation 32 bits (Windows 7) et 3 Go de RAM: IntelliJ IDEA 13.1 - comment éviter les problèmes de mémoire insuffisante sur un système d'exploitation 32 bits (Win 7) avec 3 Go de RAM
krm
Pourquoi ne pas exécuter "idea64.exe" directement, au lieu de passer par le fichier .bat? (au moins il y a idea64.exe dans IntelliJ idea 11?
jbarrameda

Réponses:

32

Cette combinaison fonctionne très bien sur mon Intellij13 fonctionnant dans Mavericks:

Mise à jour le 18 juillet 2017 :

# custom IntelliJ IDEA VM options

-ea
-server
-Xms2G
-Xmx4096M
-Xss2m
-XX:MaxMetaspaceSize=2G
-XX:ReservedCodeCacheSize=1G
-XX:MetaspaceSize=512m
-XX:+UseConcMarkSweepGC
-XX:+DoEscapeAnalysis
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:+UnlockExperimentalVMOptions
-Djava.net.preferIPv4Stack=true
-Dsun.io.useCanonCaches=false
-XX:LargePageSizeInBytes=256m
-XX:+UseCodeCacheFlushing
-XX:ParallelGCThreads=8
-XX:+DisableExplicitGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+PrintGCDetails
-XX:+PrintFlagsFinal
-XX:+AggressiveOpts
-XX:+CMSClassUnloadingEnabled
-XX:CMSInitiatingOccupancyFraction=60
-XX:+CMSClassUnloadingEnabled
-XX:+CMSParallelRemarkEnabled
-XX:+UseAdaptiveGCBoundary
-XX:+UseSplitVerifier
-XX:CompileThreshold=10000
-XX:+OptimizeStringConcat
-XX:+UseStringCache
-XX:+UseFastAccessorMethods
-XX:+UnlockDiagnosticVMOptions
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseCompressedOops
-XX:-OmitStackTraceInFastThrow
-Dawt.useSystemAAFontSettings=lcd

-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine

Je garde ce paramètre mis à jour sur https://github.com/adben/config/blob/master/idea64.vmoptions

Adben
la source
3
vous avez plein de duplications là
dedans
3
soyez prudent avec celui-ci -XX:+UseCompressedStrings, hors de tout sur votre liste, cela l'a cassé pour moi, le reste a fonctionné.
blamb
2
Merci @adben, c'est grandement amélioré IJ sur mon PC. Mais je devais enlever MaxMetaspaceSize, MetaspaceSize, UseCompressedStringsparce qu'ils ne sont pas pris en charge dans IJ 14 sur x86_64 Linux. UseCompressedOopsJe ne travaille pas non plus pour moi. Astuce: exécutez IJ à partir de la ligne de commande pour voir les messages d'erreur, sur Linux c'estidea.sh
Mixaz
1
-XX: + UseCompressedStrings l'a cassé pour moi aussi sur la version Win8 x64 et IDEA 64 bits. Tout le reste semble bien.
minorgod
Pour modifier ce fichier en premier lieu, appuyez simplement sur Ctrl + Maj + A pour la fenêtre contextuelle Rechercher une action et tapez " Modifier les options de VM personnalisées ". Il créera automatiquement le fichier correct pour votre machine que vous pourrez modifier.
Kevin Cooper
28

Pour moi, le passage au disque SSD a beaucoup amélioré les performances (en particulier pour les grands projets).

Yann Cébron
la source
Je vais certainement comparer les performances d'IJ avec un SSD et un disque dur!
Gaurav
22

Il y a quelque temps, je cherchais les moyens d'accélérer la compilation de mon projet et c'est le résultat. Ce n'est pas pour IntelliJ IDEA lui-même, mais cela aidera beaucoup lors de la (re) construction d'un gros projet et, je suppose, cela fonctionnera avec tous les autres IDE. De plus, j'ai décrit l'approche Linux, mais je suis sûr que Windows a ses propres implémentations de disque RAM.

Le moyen le plus simple d'accélérer la compilation est de déplacer la sortie de la compilation sur le disque RAM.

Configuration du disque RAM

Ouvrir fstab

$ sudo gedit /etc/fstab

(au lieu de geditvous pouvez utiliservi ou ce que vous voulez)

Configurer le point de montage du disque RAM

J'utilise des disques RAM à plusieurs endroits de mon système, et l'un d'entre eux est /tmp, donc je vais simplement y mettre ma sortie de compilation:

tmpfs /var/tmp tmpfs defaults 0 0

Dans ce cas, la taille de votre système de fichiers ne sera pas limitée, mais ça va, ma /tmptaille est actuellement de 73 Mo. Mais si vous craignez que la taille du disque RAM devienne trop grande, vous pouvez limiter sa taille, par exemple:

tmpfs /var/tmp tmpfs defaults,size=512M 0 0

Configuration du projet

Dans IntelliJ IDEA, ouvrez la structure du projet ( Ctrl+Alt+Shift+Spar défaut), puis accédez à Projet - 'Sortie du compilateur de projet' et déplacez-le vers le point de montage du disque RAM:

/tmp/projectName/out

(J'ai ajouté un projectNamedossier afin de le trouver facilement si j'ai besoin d'y arriver ou si je travaillerai avec plusieurs projets en même temps)

Ensuite, allez dans Modules, et dans tous vos modules, allez dans Paths et sélectionnez 'Inherit project compile output path' ou, si vous souhaitez utiliser un chemin de sortie de compilation personnalisé, modifiez 'Output path' et 'Test output path' comme vous l'avez fait pour projeter la sortie du compilateur avant.

C'est tout, les gars!

PS Quelques chiffres: heure de la compilation de mon projet actuel dans différents cas (environ):

HDD:     80s
SSD:     30s
SSD+RAM: 20s

PPS Si vous utilisez un disque SSD, en plus de l'accélération de la compilation, vous réduirez les opérations d'écriture sur votre disque, ce qui aidera également votre SSD à vivre heureux pour toujours;)

oncle Lem
la source
La solution Ram est géniale !! non seulement pour les performances, mais aussi pour protéger la durée de vie du SSD. Merci!
Mojtaba Asg
J'ai déplacé mes dossiers cacheset indexvia un lien symbolique vers un disque RAM, le cache Intellij IDEA dans RAM Drive suggère une autre façon de le faire sans liens symboliques, mais cela nécessiterait un disque RAM plus grand car vous ne pouvez pas spécifier uniquement les caches et les dossiers d'index qui façon. Inutile de dire que toute recherche / recherche / clic sur un symbole est instantané ou presque instantané maintenant
ycomp
Comment faire cela sous Windows 10?
Gaurav
@ycomp pourriez-vous s'il vous plaît expliquer comment procéder?
SergioLeone
Je ne me souviens pas précisément, mais c'est probablement plus de problèmes que ça en vaut la peine. Bien que ce fût méchant rapidement. Je ne me souviens pas s'il y avait des problèmes spécifiques associés à cela. J'ai arrêté de le faire une fois que j'ai migré vers un autre PC
ycomp
20

En ce qui concerne:

Comment masquer cette fenêtre cmd tout en exécutant intelliJ via le .bat?

Utilisez la commande 'start' et javaw.exe ensemble, donc, si vous avez:

SET JAVA_EXE=%IDEA_JDK%\jre\bin\java.exe
...
"%JAVA_EXE%" %JVM_ARGS% -cp "%CLASS_PATH%" %IDEA_MAIN_CLASS_NAME% %*

changez-le en:

SET JAVA_EXE=%IDEA_JDK%\jre\bin\javaw.exe
...
start "Intellij IDEA" /b "%JAVA_EXE%" %JVM_ARGS% -cp "%CLASS_PATH%" %IDEA_MAIN_CLASS_NAME% %*
Dilum Ranatunga
la source
19

La chose la plus utile que vous puissiez faire pour IntelliJ est d'avoir beaucoup de mémoire libre pour la mise en cache du disque . IntelliJ enregistre une grande partie de son travail de traitement dans des fichiers mis en cache. Cela fonctionne bien si vous avez beaucoup de mémoire libre, mais si votre cache disque est limité, vous verrez des pauses régulières et durables.

Je suggérerais -XX:+UseConcMarkSweepGCplutôt que G1.

Je travaille également des copies locales de fichiers pour minimiser les délais d'accès aux fichiers.

BTW : Pour le projet sur lequel je suis, j'ai remarqué la différence entre travailler sur une machine avec 24 Go et une avec 48 Go, même si le tas maximum est défini sur 2 Go;)

Peter Lawrey
la source
4
Pour moi, la réalisation la plus importante est que lorsqu'il s'arrête, ce n'est pas dû à GC, mais plutôt à devoir relire les données du disque.
Peter Lawrey
3
La différence entre une machine de 48 Go et une machine de 24 Go est probablement due à la mise en cache au niveau du système de fichiers / du système d'exploitation utilisant la RAM supplémentaire.
cdeszaq
4

J'ai fait quelques expériences et j'ai constaté que pour réduire les pauses GC, la combinaison suivante fonctionne le mieux: -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 .

Je ne ferais pas non plus le tas trop grand, 512 ou même plus petit est OK pour moi. Sinon, quand il sera plein, le GC devra tout parcourir, ce qui prend du temps.

Peter Gromov
la source
2

Je ne sais pas pourquoi cela n'a pas encore été mentionné - vous pouvez l'activer Power Save mode, ce qui désactive de nombreuses activités d'arrière-plan IJ , y comprisFiles Synchronization . Certains articles disent qu'il est possible de désactiver la synchronisation des fichiers dans les options de structure du projet (comme l'article en réponse par @ OJ278), mais je n'ai pas pu trouver cette option dans IJ 14 , maisPower Save mode semble la désactiver.

J'ai une base de code assez volumineuse ( code source AOSP ), donc l'activité HD due à la synchronisation des fichiers d'arrière-plan est ennuyeuse ...

Mixaz
la source
1

Vous pouvez utiliser le plugin d'optimisation d'intellij:

https://zeroturnaround.com/free/optimizer-for-intellij-idea/

Avec le plugin, vous pouvez:

  • Options de réglage automatique de la machine virtuelle
  • Désactiver la vérification de classe
  • Nettoyer les caches système
  • Configurer les outils de construction externes
  • Validez le dernier JDK Oracle
  • Ignorer la construction et redéployer
iberck
la source
Pourquoi voter contre? la question est de régler intellij et c'est une solution
iberck
2
Malheureusement, le plugin semble être retiré.
nilo de roock
1

La réponse fournie par adbenest très utile pour améliorer les performances de ma machine. Bien que je l'ai légèrement annulé après avoir lu un article sur Dzone,

-server
-Xms2g
-Xmx2g
-XX:NewRatio=3
-Xss16m
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:ConcGCThreads=4
-XX:ReservedCodeCacheSize=240m
-XX:+AlwaysPreTouch
-XX:+TieredCompilation
-XX:+UseCompressedOops
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-ea

Ils ont amélioré les performances des grands projets en utilisant la configuration ci-dessus et fonctionnent parfaitement pour nos projets également. Enfin, j'ai désactivé tous les plugins que je n'utiliserai pas et cela améliore également les choses.

Référence: https://dzone.com/articles/the-one-and-only-reason-to-customize-intellij-idea

Chaklader Asfak Arefe
la source
0

J'ai utilisé cette combinaison et cela fonctionne bien dans mon environnement

-server
-Xms2048m
-Xmx2048m
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:+UseParNewGC
-XX:ParallelGCThreads=4
-XX:MaxTenuringThreshold=1
-XX:SurvivorRatio=8
-XX:+UseCodeCacheFlushing
-XX:+UseConcMarkSweepGC
-XX:+AggressiveOpts
-XX:+CMSClassUnloadingEnabled
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=65
-XX:+CMSScavengeBeforeRemark
-XX:+UseCMSInitiatingOccupancyOnly
-XX:ReservedCodeCacheSize=64m
-XX:-TraceClassUnloading
-ea
-Dsun.io.useCanonCaches=false
Yasir Shabbir Choudhary
la source
Ne pas inclure -XX:+UseParNewGCavec les versions récentes de CLion. Option invalide.
Sandu Liviu Catalin