Przyspieszenie IntelliJ-Idea

92

Używam intelliJ do rozwoju Scali i dostałem 8 GB nowej pamięci RAM w zeszłym tygodniu, więc pomyślałem: czas go użyć. Sprawdziłem menedżera zadań i znalazłem intelliJ przy użyciu ~ 250mb . Z zaćmienia wiedziałem, że poprawianie opcji JVM bardzo pomogło w poprawie szybkości, więc wyszukałem w Google ...

i znalazłem ten dla OS X. Nie mogłem od razu znaleźć opcji JVM, więc zacząłem ulepszać Xmx. Przy 1 GB zdałem sobie sprawę, że już się nie uruchamia. Sprawdziłem wersję intelliJ java, stwierdziłem, że jest nieaktualna i 32-bitowa.

Aby więc używać obecnego JDK i wersji 64-bitowej , musisz zmienić swój link na z:

IntelliJ IDEA Community Edition 10.0.2\bin\idea.exe

do

IntelliJ IDEA Community Edition 10.0.2\bin\idea.BAT

i dostosuj „Rozpocznij za”

Nietoperz szuka JDK_HOMEteraz i używa 64-bitowego.

Moje aktualne opcje maszyn wirtualnych , które znajdują się w

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

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

Zamiast tego -XX:+UseParallelGCmożesz użyć -XX:+UseConcMarkSweepGC, który jest

zaakceptowany wybór dla aplikacji klasycznych, ale ostatnio zmieniłem na kolektor przepustowości. ponieważ z szybką maszyną i wystarczająco małą stertą masz szybkie przerwy, większą przepustowość i brak problemów z fragmentacją (ijuma. #scala)

Zmiany:

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

Na razie będę się trzymać tych opcji. Bardzo chciałbym poznać Twoje doświadczenia z tym związane.

Które opcje są dla Ciebie najlepsze? Jak ukryć to okno cmd podczas uruchamiania intelliJ przez .bat? :)

Przy okazji, oto kolejny link do tuningu intelliJ . Zasadniczo na str. 20/21 jest napisane, aby wyłączyć przywracanie systemu Windows i oprogramowanie antywirusowe dla katalogów systemowych.

Innym sposobem na przyspieszenie działania intelliJ jest umieszczenie folderu systemowego intellij na ramdrive (dzięki OlegYch | h).

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

Zobacz Superuser for Win 7 64bit RAM Drive lub ten . Wydaje mi się, że 1 GB jest w porządku.

Inną wskazówką, którą dał mi przyjaciel, jest wykluczenie katalogów projektów z Twojego programu antywirusowego (skanowanie przy dostępie)

Istnieją podobne posty dotyczące tuningu Eclipse:

Stefan K.
źródło
6
Jeśli uruchomiona jest wersja 64-bitowa, opcje maszyny wirtualnej będą odczytywane zidea64.exe.vmoptions
Arnaud P
Dodałem podobne pytanie, ale dla 32-bitowego systemu operacyjnego (Windows 7) i 3 GB RAM: IntelliJ IDEA 13.1 - jak zapobiec problemom z małą ilością pamięci w 32-bitowym systemie operacyjnym (Win 7) z 3 GB RAM
krm
Dlaczego nie uruchomić „idea64.exe” bezpośrednio, zamiast za pośrednictwem pliku .bat? (przynajmniej jest idea64.exe w IntelliJ idea 11?
jbarrameda

Odpowiedzi:

33

Ta kombinacja działa świetnie na moim Intellij13 działającym w Mavericks:

Zaktualizowano 18 lipca 2017 r . :

# 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

Aktualizuję to ustawienie na https://github.com/adben/config/blob/master/idea64.vmoptions

adben
źródło
3
masz tam wiele kopii
vach
3
uważaj na ten -XX:+UseCompressedStrings, ze wszystkich na twojej liście, to zepsuło mi to, reszta zadziałała.
ryj
2
Dzięki @adben, znacznie poprawiłem IJ na moim komputerze. Ale musiałem usunąć MaxMetaspaceSize, MetaspaceSize, UseCompressedStringsponieważ nie są one obsługiwane w IJ 14 na Linux x86_64. UseCompressedOopsdla mnie też nie działa. Wskazówka: uruchom IJ z wiersza poleceń, aby zobaczyć komunikaty o błędach, w idea.sh
systemie
1
-XX: + UseCompressedStrings zepsuło to również dla mnie na Win8 x64 i IDEA 64-bitowej wersji. Wszystko inne wydaje się w porządku.
minorgod
Aby edytować ten plik w pierwszej kolejności, po prostu naciśnij Ctrl + Shift + A, aby wyświetlić wyskakujące okienko Znajdź akcję i wpisz „ Edytuj niestandardowe opcje maszyny wirtualnej ”. Automatycznie utworzy prawidłowy plik dla twojego komputera, który możesz edytować.
Kevin Cooper
28

Dla mnie przejście na dysk SSD znacznie poprawiło wydajność (szczególnie w przypadku dużych projektów).

Yann Cébron
źródło
Zdecydowanie mam zamiar porównać wydajność IJ z dyskiem SSD i dyskiem twardym!
Gaurav,
23

Jakiś czas temu szukałem sposobów na przyspieszenie kompilacji mojego projektu i to jest rezultat. To nie jest dla samego IntelliJ IDEA, ale bardzo pomoże przy (ponownym) budowaniu dużych projektów i, jak sądzę, będzie działać również z każdym innym IDE. Opisałem również podejście do Linuksa, ale jestem pewien, że Windows ma własne implementacje dysków RAM.

Najłatwiejszym sposobem na przyspieszenie kompilacji jest przeniesienie wyjścia kompilacji na dysk RAM.

Konfiguracja dysku RAM

Otwórz fstab

$ sudo gedit /etc/fstab

(zamiast geditciebie możesz użyć vilub cokolwiek chcesz)

Skonfiguruj punkt montowania dysku RAM

Używam dysków RAM w kilku miejscach w moim systemie, a jednym z nich jest /tmp, więc po prostu umieszczę tam dane wyjściowe kompilacji:

tmpfs /var/tmp tmpfs defaults 0 0

W tym przypadku rozmiar twojego systemu plików nie będzie ograniczony, ale jest w porządku, mój /tmprozmiar w tej chwili to 73 MB. Ale jeśli obawiasz się, że rozmiar dysku RAM stanie się zbyt duży - możesz ograniczyć jego rozmiar, np .:

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

Konfiguracja projektu

W IntelliJ IDEA otwórz Project Structure ( Ctrl+Alt+Shift+Sdomyślnie), a następnie przejdź do Project - „Project compiler output” i przenieś go do punktu montowania dysku RAM:

/tmp/projectName/out

(Dodałem projectNamefolder, aby łatwo go znaleźć, jeśli muszę się tam dostać lub będę pracować z kilkoma projektami w tym samym czasie)

Następnie przejdź do Moduły i we wszystkich modułach przejdź do Ścieżki i wybierz „Dziedzicz ścieżkę wyjściową kompilacji projektu” lub, jeśli chcesz użyć niestandardowej ścieżki wyjściowej kompilacji, zmodyfikuj „Ścieżkę wyjściową” i „Ścieżkę wyjściową testową” tak, jak to zrobiłeś do projektu wyjścia kompilatora wcześniej.

To wszystko, ludzie!

PS Kilka liczb: czas kompilacji mojego obecnego projektu w różnych przypadkach (w przybliżeniu):

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

PPS Jeśli używasz dysku SSD, oprócz przyspieszenia kompilacji zredukujesz operacje zapisu na dysku, dzięki czemu Twój dysk SSD będzie żył długo i szczęśliwie;)

wujek Lem
źródło
Rozwiązanie Ram jest świetne !! nie tylko ze względu na wydajność, ale także chroni żywotność dysku SSD.
Mojtaba Asg
Przeniosłem moje cachesi indexfoldery za pomocą łącza symbolicznego na dysk RAM, pamięć podręczna Intellij IDEA na dysku RAM sugeruje inny sposób zrobienia tego bez dowiązań symbolicznych, jednak wymagałoby to większego dysku RAM, ponieważ nie można określić tylko pamięci podręcznych i folderów indeksowych, które sposób. Nie trzeba dodawać, że każde wyszukiwanie / wyszukiwanie / klikanie symbolu jest natychmiastowe lub prawie natychmiastowe
ycomp
Jak to zrobić w systemie Windows 10?
Gaurav
@ycomp czy możesz wyjaśnić, jak to zrobić?
SergioLeone
Nie pamiętam konkretnie, ale prawdopodobnie to więcej kłopotów niż warto. Chociaż szybko było niegodziwe. Nie pamiętam, czy były jakieś konkretne problemy z tym związane ... Przestałem to robić po migracji na inny komputer
ycomp.
20

Jeżeli chodzi o:

Jak ukryć to okno cmd podczas uruchamiania intelliJ przez plik .bat?

Użyj jednocześnie polecenia „start” i javaw.exe, więc jeśli masz:

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

zmień to na:

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
źródło
19

Najbardziej użyteczną rzeczą, jaką możesz zrobić dla IntelliJ, jest posiadanie dużej ilości wolnej pamięci do buforowania dysku . IntelliJ oszczędza dużo swojej pracy przetwarzania w plikach buforowanych. Działa to dobrze, jeśli masz dużo wolnej pamięci, ale jeśli pamięć podręczna dysku jest ograniczona, zobaczysz regularne, długotrwałe przerwy.

Sugerowałbym -XX:+UseConcMarkSweepGCraczej niż G1.

Pracuję również na lokalnych kopiach plików, aby zminimalizować opóźnienia dostępu do plików.

BTW : W przypadku projektu, na którym jestem, zauważyłem różnicę między pracą na maszynie z 24 GB i taką z 48 GB, mimo że maksymalny stert jest ustawiony na 2 GB;)

Peter Lawrey
źródło
4
Dla mnie najważniejszą rzeczą jest to, że kiedy się zatrzymuje, nie jest to spowodowane GC, ale raczej koniecznością ponownego odczytu danych z dysku.
Peter Lawrey
4
Różnica między maszyną 48 GB a maszyną 24 GB jest prawdopodobnie spowodowana buforowaniem na poziomie systemu plików / systemu operacyjnego przy użyciu dodatkowej pamięci RAM.
cdeszaq
4

Zrobiłem kilka eksperymentów, a okazało się, że aby zmniejszyć GC wstrzymuje następująca kombinacja działa najlepiej: -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50.

Nie zrobiłbym też zbyt dużego stosu, 512 lub nawet mniejszy jest dla mnie OK. W przeciwnym razie, gdy stanie się pełny, GC będzie musiał to wszystko przejść, co zajmie trochę czasu.

Peter Gromov
źródło
2

Nie wiem, dlaczego jeszcze o tym nie wspomniano - możesz włączyć Power Save mode, co wyłącza wiele działań IJ w tle, w tym Files Synchronization. Niektóre artykuły mówią, że można wyłączyć synchronizację plików w opcjach struktury projektu (jak artykuł w odpowiedzi @ OJ278), ale nie udało mi się znaleźć tej opcji w IJ 14 , ale Power Save modewydaje się, że ją wyłączam.

Mam dość dużą bazę kodu ( kod źródłowy AOSP ), więc aktywność HD związana z synchronizacją plików w tle jest denerwująca ...

Mixaz
źródło
1

Możesz użyć wtyczki optymalizującej intellij:

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

Dzięki wtyczce możesz:

  • Automatyczne dostrajanie opcji maszyny wirtualnej
  • Wyłącz weryfikację klas
  • Wyczyść pamięć podręczną systemu
  • Skonfiguruj zewnętrzne narzędzia do kompilacji
  • Sprawdź poprawność najnowszego Oracle JDK
  • Pomiń tworzenie i wdrażaj ponownie
iberck
źródło
Dlaczego głosowanie w dół? pytanie dotyczy strojenia intellij i to jest rozwiązanie
iberck
2
Niestety wygląda na to, że wtyczka została ściągnięta.
nilo de roock
1

Odpowiedź udzielona przez adbenjest bardzo pomocna w poprawie wydajności mojego komputera. Chociaż nieco to zmieniłem po przeczytaniu artykułu w 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

Poprawili wydajność dużych projektów, korzystając z powyższej konfiguracji i działają bezbłędnie również w naszych projektach. Na koniec wyłączyłem wszystkie wtyczki, których nie będę używać, a to również poprawia rzeczy.

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

Chaklader Asfak Arefe
źródło
0

Użyłem tej kombinacji i działa dobrze w moim środowisku

-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
źródło
Nie dołączaj -XX:+UseParNewGCdo najnowszych wersji CLion. Nieprawidłowa opcja.
Sandu Liviu Catalin