Acelerar IntelliJ-Idea

92

Estoy usando intelliJ para el desarrollo de Scala y obtuve 8 GB de RAM nueva la semana pasada, así que pensé: es hora de usarlo. Revisé mi administrador de tareas y encontré intelliJ usando ~ 250mb . Desde eclipse sabía que ajustar las opciones de JVM ayudaba mucho a mejorar la velocidad, así que busqué en Google ...

y encontré este para OS X No pude encontrar la opción JVM inmediatamente, así que comencé a ajustar Xmx. Con 1 GB, me di cuenta de que ya no arranca. Revisé la versión java de intelliJ, encontré que está desactualizada y es de 32 bits.

Entonces, para usar su JDK actual y 64 bits , debe cambiar su enlace de:

IntelliJ IDEA Community Edition 10.0.2\bin\idea.exe

a

IntelliJ IDEA Community Edition 10.0.2\bin\idea.BAT

y ajusta "Iniciar en"

El murciélago busca JDK_HOMEy usa 64 bits ahora.

Mis opciones de VM actuales , que se encuentran en

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

son

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

En lugar de -XX:+UseParallelGC, puede usar -XX:+UseConcMarkSweepGC, que es

la opción aceptada para aplicaciones de escritorio, pero recientemente cambié al recopilador de rendimiento. porque con una máquina rápida y un montón lo suficientemente pequeño, tiene pausas rápidas, más rendimiento y no hay problemas con la fragmentación (ijuma. #scala)

Cambios:

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

Me quedaré con estas opciones por ahora. Realmente me gustaría conocer tu experiencia con él.

¿Qué opciones funcionan mejor para ti? ¿Cómo oculto esta ventana de cmd mientras ejecuto intelliJ a través del .bat? :)

Por cierto, aquí hay otro enlace para ajustar intelliJ . Básicamente dice en la página 20/21 que desactive la restauración de Windows y el antivirus para los directorios del sistema.

Otra forma de acelerar intelliJ es poner la carpeta del sistema intellij en ramdrive (gracias OlegYch | h).

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

Consulte Superusuario para Win 7 64bit RAM Drive o este . 1 GB me parece bien.

Otro consejo que me dio un amigo es que excluya los directorios del proyecto de su antivirus (escanear al acceder)

Hay publicaciones similares sobre el ajuste de Eclipse:

Stefan K.
fuente
6
Si se ejecuta la versión de 64 bits, las opciones de VM se leerán desdeidea64.exe.vmoptions
Arnaud P
Agregué una pregunta similar, pero para un sistema operativo de 32 bits (Windows 7) y 3 GB de RAM: IntelliJ IDEA 13.1 - cómo evitar problemas de poca memoria en un sistema operativo de 32 bits (Win 7) con 3 GB de RAM
krm
¿Por qué no ejecutar "idea64.exe" directamente, en lugar de a través del archivo .bat? (¿al menos hay idea64.exe en IntelliJ idea 11?
jbarrameda

Respuestas:

32

Esta combinación funciona muy bien en mi Intellij13 que se ejecuta en Mavericks:

Actualizado el 18 de julio de 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

Mantengo esta configuración actualizada en https://github.com/adben/config/blob/master/idea64.vmoptions

adben
fuente
3
tiene muchas duplicaciones allí
vach
3
tenga cuidado con este -XX:+UseCompressedStrings, de todos en su lista, esto me rompió, el resto funcionó.
blamb
2
Gracias @adben, ha mejorado mucho IJ en mi PC. Pero tuve que quitar MaxMetaspaceSize, MetaspaceSize, UseCompressedStringsya que no se admiten en IJ 14 en Linux x86_64. UseCompressedOopsTampoco funcionó para mí. Sugerencia: ejecute IJ desde la línea de comandos para ver los mensajes de error, en Linux esidea.sh
Mixaz
1
-XX: + UseCompressedStrings también me lo rompió en Win8 x64 e IDEA en la versión de 64 bits. Todo lo demás parece estar bien.
minorgod
Para editar este archivo en primer lugar, simplemente presione Ctrl + Shift + A para la ventana emergente Buscar acción y escriba " Editar opciones de VM personalizadas ". Creará automáticamente el archivo correcto para su máquina que puede editar.
Kevin Cooper
28

Para mí, cambiar a la unidad SSD mejoró mucho el rendimiento (especialmente para proyectos grandes).

Yann Cébron
fuente
¡Definitivamente voy a comparar el rendimiento de IJ con SSD y un HDD!
Gaurav
22

Hace algún tiempo estaba buscando formas de acelerar la compilación de mi proyecto y ese es el resultado. Esto no es para IntelliJ IDEA en sí, pero ayudará mucho cuando (re) construya grandes proyectos y, supongo, también funcionará con cualquier otro IDE. Además, describí el enfoque de Linux, pero estoy seguro de que Windows tiene sus propias implementaciones de disco RAM.

La forma más sencilla de acelerar la compilación es mover la salida de la compilación al disco RAM.

Configuración del disco RAM

Abrir fstab

$ sudo gedit /etc/fstab

(en lugar de geditpuedes usarvi o lo que quieras)

Configurar el punto de montaje del disco RAM

Estoy usando discos RAM en varios lugares de mi sistema, y ​​uno de ellos es /tmp, así que simplemente pondré mi salida de compilación allí:

tmpfs /var/tmp tmpfs defaults 0 0

En este caso, el tamaño de su sistema de archivos no estará limitado, pero está bien, mi /tmptamaño ahora es de 73 MB. Pero si teme que el tamaño del disco RAM sea demasiado grande, puede limitar su tamaño, por ejemplo:

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

Configuración del proyecto

En IntelliJ IDEA, abra la Estructura del proyecto ( Ctrl+Alt+Shift+Spor defecto), luego vaya a Proyecto - 'Salida del compilador del proyecto' y muévalo al punto de montaje del disco RAM:

/tmp/projectName/out

(He añadido projectName carpeta para encontrarla fácilmente si necesito llegar allí o trabajaré con varios proyectos al mismo tiempo)

Luego, vaya a Módulos, y en todos sus módulos, vaya a Rutas y seleccione 'Heredar ruta de salida de compilación del proyecto' o, si desea usar la ruta de salida de compilación personalizada, modifique 'Ruta de salida' y 'Ruta de salida de prueba' de la forma en que lo hizo para proyectar la salida del compilador antes.

¡Eso es todo amigos!

PD Algunos números: tiempo de la compilación de mi proyecto actual en diferentes casos (aprox.):

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

PPS Si usa un disco SSD, además de acelerar la compilación, reducirá las operaciones de escritura en su disco, por lo que también ayudará a su SSD a vivir feliz para siempre;)

tío Lem
fuente
¡La solución RAM es genial! no solo por el rendimiento, sino que también protege la vida útil del SSD. ¡Gracias!
Mojtaba Asg
Moví mis carpetas cachesy a indextravés de un enlace simbólico a un disco RAM, el caché de Intellij IDEA en RAM Drive sugiere otra forma de hacerlo sin enlaces simbólicos, sin embargo, requeriría un disco RAM más grande porque no puede especificar solo los cachés y las carpetas de índice que camino. No hace falta decir que cualquier búsqueda / búsqueda / clic en un símbolo es instantánea o casi instantánea ahora
ycomp
¿Cómo hacer esto en Windows 10?
Gaurav
@ycomp, ¿podría explicarnos cómo hacerlo?
SergioLeone
No lo recuerdo específicamente, pero probablemente sea más problema de lo que vale la pena. Aunque fue muy rápido. No recuerdo si hubo algún problema específico asociado con hacer eso ... Dejé de hacerlo una vez que
migré
20

Respecto a:

¿Cómo oculto esta ventana de cmd mientras ejecuto intelliJ a través del .bat?

Use el comando 'inicio' y javaw.exe juntos, entonces, si tiene:

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

cámbielo a:

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
fuente
19

Lo más útil que puede hacer por IntelliJ es tener mucha memoria libre para el almacenamiento en caché del disco . IntelliJ guarda gran parte de su trabajo de procesamiento en archivos en caché. Esto funciona bien si tiene mucha memoria libre, pero si el caché de su disco es limitado, verá pausas regulares y duraderas.

Sugeriría en -XX:+UseConcMarkSweepGClugar deG1 .

También trabajo copias locales de archivos para minimizar la demora en el acceso a los archivos.

Por cierto : para el proyecto en el que estoy, noté la diferencia entre trabajar en una máquina con 24 GB y una con 48 GB, aunque el montón máximo está configurado en 2 GB;)

Peter Lawrey
fuente
4
Para mí, la comprensión más importante es que cuando se detiene, no se debe a GC, sino a tener que volver a leer los datos del disco.
Peter Lawrey
3
La diferencia entre una máquina de 48 GB y una máquina de 24 GB probablemente se deba al almacenamiento en caché a nivel del sistema de archivos / sistema operativo utilizando la memoria RAM adicional.
cdeszaq
4

He hecho un poco de experimentación, y se encontró que para disminuir GC detiene la siguiente combinación funciona mejor: -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50.

Tampoco haría el montón demasiado grande, 512 o incluso más pequeño está bien para mí. De lo contrario, cuando se llene, el GC tendrá que recorrerlo todo, lo que llevará algún tiempo.

Peter Gromov
fuente
2

No estoy seguro de por qué no se ha mencionado todavía: puede habilitarlo Power Save mode, lo que desactiva muchas actividades en segundo plano de IJ , incluido Files Synchronization. Algunos artículos dicen que es posible deshabilitar la sincronización de archivos en las opciones de estructura del proyecto (como el artículo en respuesta de @ OJ278), pero no pude encontrar esta opción en IJ 14 , peroPower Save mode parece deshabilitarla.

Tengo una base de código bastante grande ( código fuente AOSP ), por lo que la actividad HD debido a la sincronización de archivos en segundo plano es molesta ...

Mixaz
fuente
1

Puede utilizar el complemento optimizador de intellij:

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

Con el complemento puedes:

  • Opciones de ajuste automático de la máquina virtual
  • Deshabilitar la verificación de clase
  • Limpiar cachés del sistema
  • Configurar herramientas de compilación externas
  • Validar la última versión de Oracle JDK
  • Omitir compilación y redespliegue
iberck
fuente
¿Por qué votar en contra? la pregunta es sobre el ajuste de intellij y esta es una solución
iberck
2
Lamentablemente, parece que se ha retirado el complemento.
nilo de roock
1

La respuesta proporcionada por adbenes muy útil para mejorar el rendimiento de mi máquina. Aunque lo anulé un poco después de leer un artículo de 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

Mejoraron el rendimiento de grandes proyectos mediante el uso de la configuración anterior y también funcionan perfectamente para nuestros proyectos. Por último, desactivé todos los complementos que no usaré y eso también mejora las cosas.

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

Chaklader Asfak Arefe
fuente
0

Usé esta combinación y funciona bien en mi entorno.

-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
fuente
No lo incluya -XX:+UseParNewGCcon versiones recientes de CLion. Opción inválida.
Sandu Liviu Catalin