Speedup IntelliJ-Idea


92

Sto usando intelliJ per lo sviluppo di Scala e ho ottenuto 8 GB di nuova RAM la scorsa settimana, quindi ho pensato: è ora di usarlo. Ho controllato il mio task manager e ho trovato intelliJ che utilizzava ~ 250mb . Da eclipse sapevo che modificare le opzioni JVM aiutava molto a migliorare la velocità, quindi ho cercato su Google ...

e ho trovato questo per OS X non sono riuscito a trovare immediatamente l'opzione JVM, quindi ho iniziato a modificare Xmx. A 1 GB, mi sono reso conto che non si avvia più. Ho controllato la versione java di intelliJ, ho scoperto che è obsoleta ea 32 bit.

Quindi, per utilizzare il tuo JDK corrente e 64 bit devi cambiare il tuo collegamento da:

IntelliJ IDEA Community Edition 10.0.2\bin\idea.exe

per

IntelliJ IDEA Community Edition 10.0.2\bin\idea.BAT

e regola "Inizia tra"

Il pipistrello cerca JDK_HOMEe usa 64 bit ora.

Le mie attuali opzioni VM , che si trovano in

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

siamo

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

Invece di -XX:+UseParallelGC, puoi usare -XX:+UseConcMarkSweepGC, che è

la scelta accettata per le app desktop, ma di recente sono passato al raccoglitore di velocità effettiva. perché con una macchina veloce e un mucchio abbastanza piccolo, hai pause veloci, più velocità effettiva e nessun problema di frammentazione (ijuma. #scala)

I cambiamenti:

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

Per ora mi atterrò a queste opzioni. Mi piacerebbe davvero conoscere la tua esperienza con esso.

Quali opzioni funzionano meglio per te? Come faccio a nascondere questa finestra di cmd durante l'esecuzione di intelliJ tramite .bat? :)

A proposito, ecco un altro collegamento per la messa a punto di intelliJ . Fondamentalmente si dice a p.20 / 21 per disattivare il ripristino di Windows e l'antivirus per le directory di sistema.

Un altro modo per velocizzare intelliJ è mettere la cartella di sistema intellij su ramdrive (grazie OlegYch | h).

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

Vedi Superuser per Win 7 64bit RAM Drive o questo . 1 GB sembra a posto per me.

Un altro suggerimento che mi ha dato un amico è di escludere le directory del progetto dal tuo antivirus (scansione all'accesso)

Ci sono post simili riguardanti l'ottimizzazione di Eclipse:


6
Se viene eseguita la versione a 64 bit, le opzioni della VM verranno lette daidea64.exe.vmoptions
Arnaud P

Ho aggiunto una domanda simile, ma per un sistema operativo a 32 bit (Windows 7) e 3 GB di RAM: IntelliJ IDEA 13.1 - come prevenire problemi di memoria insufficiente su un sistema operativo a 32 bit (Win 7) con 3 GB di RAM
krm

Perché non eseguire "idea64.exe" direttamente, invece che tramite il file .bat? (almeno c'è idea64.exe in IntelliJ idea 11?
jbarrameda,

Risposte:


32

Questa combinazione funziona alla grande sul mio Intellij13 in esecuzione in Mavericks:

Aggiornato il 18 luglio 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

Tengo aggiornata questa impostazione su https://github.com/adben/config/blob/master/idea64.vmoptions


3
hai un sacco di duplicazioni lì
dentro

3
stai attento con questo -XX:+UseCompressedStrings, tra tutti quelli sulla tua lista, questo mi ha rotto, il resto ha funzionato.
blamb

2
Grazie @adben, è notevolmente migliorato IJ sul mio PC. Ma ho dovuto rimuovere MaxMetaspaceSize, MetaspaceSize, UseCompressedStringsin quanto non sono supportati in IJ 14 su linux x86_64. UseCompressedOopsNon funziona neanche per me. Suggerimento: esegui IJ dalla riga di comando per vedere i messaggi di errore, su Linux èidea.sh
Mixaz

1
-XX: + UseCompressedStrings l'ha rotto anche per me su Win8 x64 e versione IDEA a 64 bit. Tutto il resto sembra a posto.
minorgod

Per modificare questo file in primo luogo, premi semplicemente Ctrl + Maiusc + A per il popup Trova azione e digita " Modifica opzioni VM personalizzate ". Creerà automaticamente il file corretto per la tua macchina che puoi modificare.
Kevin Cooper

28

Per me il passaggio all'unità SSD ha migliorato molto le prestazioni (specialmente per progetti di grandi dimensioni).


Metterò sicuramente a confronto le prestazioni di IJ con SSD e HDD!
Gaurav

22

Qualche tempo fa stavo cercando i modi per velocizzare la compilazione del mio progetto e questo è il risultato. Questo non è per IntelliJ IDEA in sé, ma aiuterà molto quando (ri) costruendo un grande progetto e, immagino, funzionerà anche con qualsiasi altro IDE. Inoltre, ho descritto l'approccio Linux, ma sono sicuro che Windows abbia le proprie implementazioni su disco RAM.

Il modo più semplice per velocizzare la compilazione è spostare l'output della compilazione sul disco RAM.

Configurazione del disco RAM

Apri fstab

$ sudo gedit /etc/fstab

(invece di geditte puoi usare vio quello che ti piace)

Imposta il punto di montaggio del disco RAM

Sto usando dischi RAM in diversi punti del mio sistema, e uno di questi è /tmp, quindi inserirò il mio output di compilazione lì:

tmpfs /var/tmp tmpfs defaults 0 0

In questo caso la dimensione del tuo filesystem non sarà limitata, ma va bene, la mia /tmpdimensione in questo momento è 73 MB. Ma se hai paura che la dimensione del disco RAM diventi troppo grande, puoi limitarne le dimensioni, ad esempio:

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

Configurazione del progetto

In IntelliJ IDEA, apri Project Structure ( Ctrl+Alt+Shift+Sper impostazione predefinita), quindi vai a Project - 'Project compiler output' e spostalo nel punto di montaggio del disco RAM:

/tmp/projectName/out

(Ho aggiunto una projectNamecartella per trovarla facilmente se ho bisogno di arrivarci o lavorerò con più progetti contemporaneamente)

Quindi, vai su Moduli e in tutti i tuoi moduli vai su Percorsi e seleziona "Eredita percorso di output della compilazione del progetto" o, se desideri utilizzare il percorso di output della compilazione personalizzato, modifica "Percorso di output" e "Percorso di output di prova" come hai fatto per proiettare prima l'output del compilatore.

È tutto gente!

PS Alcuni numeri: tempo di compilazione del mio attuale progetto in diversi casi (circa):

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

PPS Se usi il disco SSD, oltre a velocizzare la compilazione ridurrai le operazioni di scrittura sul disco, quindi aiuterà anche il tuo SSD a vivere felici e contenti;)


La soluzione di RAM è fantastica !! non solo per le prestazioni, ma anche per proteggere la durata dell'SSD. Grazie!
Mojtaba Asg

Ho spostato le mie cartelle cachese indextramite collegamento simbolico a un disco RAM, la cache di Intellij IDEA in RAM Drive suggerisce un altro modo per farlo senza collegamenti simbolici, tuttavia richiederebbe un disco RAM più grande perché non è possibile specificare solo le cache e le cartelle di indice che modo. Inutile dire che qualsiasi ricerca / ricerca / clic su un simbolo è istantaneo o quasi istantaneo ora
ycomp

Come farlo su Windows 10?
Gaurav

@ycomp potresti spiegarci come farlo?
SergioLeone

Non riesco a ricordare in modo specifico, ma probabilmente è più un problema di quanto valga la pena. Anche se è stato malvagio veloce. Non ricordo se ci fossero problemi specifici associati a questa operazione .. Ho smesso di farlo una volta migrato su un altro PC
ycomp

20

Per quanto riguarda:

Come faccio a nascondere questa finestra di cmd durante l'esecuzione di intelliJ tramite .bat?

Usa il comando 'start' e javaw.exe insieme, quindi, se hai:

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

cambiarlo in:

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

19

La cosa più utile che puoi fare per IntelliJ è avere molta memoria libera per il caching del disco . IntelliJ salva molto del suo lavoro di elaborazione nei file memorizzati nella cache. Funziona bene se hai molta memoria libera, ma se la cache del disco è limitata, vedrai pause regolari e di lunga durata.

Suggerirei -XX:+UseConcMarkSweepGCpiuttosto che G1.

Lavoro anche copie locali dei file per ridurre al minimo il ritardo di accesso ai file.

BTW : per il progetto a cui sto lavorando, ho notato la differenza tra lavorare su una macchina con 24 GB e una con 48 GB, anche se l'heap massimo è impostato su 2 GB;)


4
Per me, la realizzazione più importante è che quando si ferma, non è dovuto al GC, ma piuttosto a dover rileggere i dati dal disco.
Peter Lawrey

3
La differenza tra una macchina da 48 GB e una macchina da 24 GB è probabilmente dovuta alla memorizzazione nella cache a livello di file system / sistema operativo utilizzando la ram aggiuntiva.
cdeszaq

4

Ho fatto alcuni esperimenti e ho scoperto che per diminuire le pause GC la seguente combinazione funziona meglio: -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 .

Inoltre, non renderei l'heap troppo grande, 512 o anche più piccolo va bene per me. Altrimenti, quando sarà pieno, il GC dovrà percorrerlo tutto, il che richiede del tempo.



2

Non sono sicuro del motivo per cui non è stato ancora menzionato: puoi abilitare Power Save mode, che disattiva molte attività in background di IJ , incluso Files Synchronization. Alcuni articoli dicono che è possibile disabilitare la sincronizzazione dei file nelle opzioni della struttura del progetto (come l'articolo in risposta di @ OJ278), ma non sono riuscito a trovare questa opzione in IJ 14 , maPower Save mode sembra disabilitarla.

Ho una base di codice abbastanza ampia ( codice sorgente AOSP ), quindi l'attività HD dovuta alla sincronizzazione dei file in background è fastidiosa ...


1

Puoi utilizzare il plugin di ottimizzazione di intellij:

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

Con il plugin puoi:

  • Ottimizzazione automatica delle opzioni della macchina virtuale
  • Disabilita la verifica della classe
  • Pulisci le cache di sistema
  • Configura strumenti di compilazione esterni
  • Convalida l'ultimo Oracle JDK
  • Salta compilazione e ridistribuzione

Perché votare contro? la domanda riguarda la messa a punto di intellij e questa è una soluzione
iberck

2
Purtroppo, il plugin sembra essere stato rimosso.
nilo de roock

1

La risposta fornita da adbenè molto utile per migliorare le prestazioni della mia macchina. Anche se l'ho leggermente ignorato dopo aver letto un articolo di 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

Hanno migliorato le prestazioni di grandi progetti utilizzando la configurazione di cui sopra e funzionano perfettamente anche per i nostri progetti. Infine, ho disabilitato tutti i plugin che non userò e questo migliora anche le cose.

Riferimento: https://dzone.com/articles/the-one-and-only-reason-to-customize-intellij-idea


0

Ho usato questa combinazione e funziona bene nel mio ambiente

-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

Non includere -XX:+UseParNewGCnelle versioni recenti di CLion. Opzione non valida.
Sandu Liviu Catalin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.