Öffnen Sie das IDEA -Installationsverzeichnis und sehen Sie, dass ein Bin -Verzeichnis mit zwei VMOPTIONS -Dateien vorhanden ist, die für verschiedene JDKs konfiguriert werden müssen:
32 Bits: idee.exe.vMoptions
64 Bit: idee64.exe.vMoptions
-Xms512m -xmx1024m -xx: maxpermSize = 512m -xx: ReservedCodeCachesize = 225 m -xx:+useconcmarksweepgc -xx: SoftreflrupolololicymSPermb = 50 -ea -dsun.IO.USECANCANCANCACHE = FASTRAUS FALSEFLUSE = FASTREFLUSE = FASTREFLUSE -DJAVERMB = FASTRAUS = FASTREFLUSE = FASTREFLUSE = FASTREFLUSE -DJAVERMb = 50 -EEA.REFERSPRACKE = FASTREFLUSE = FASTREFLUSE = FASTREFLUSE = FASTREFLUSE = FASTREFLUPS -DJAVA.
Die obige Liste ist der Standardinhalt von idea64.exe.vmoptions , die wir bei Bedarf ändern können.
Die Bedeutungen jedes Parameters sind:
1. Stellen Sie die Einstellungen für JVM -Speicher ein
1. Es gibt vier Parameter für das Festlegen von JVM -Speicher:
-Xmx Java Heap Maximaler Wert, der Standardwert ist 1/4 des physischen Speichers. Der optimale Einstellwert sollte von der physischen Speichergröße und einem anderen Speicheraufwand im Computer abhängen.
-XMS Java Heap Anfangswert. Es ist am besten, dass der Server -JVM -xms und -xmx auf denselben Wert festgelegt wird. Die JVM der Entwicklung und die Testmaschine kann den Standardwert beibehalten.
-Xmn Java Heap Young Area Größe, es ist am besten, den Standardwert zu behalten, wenn Sie nicht damit vertraut sind.
-XSS Die Stapelgröße jedes Threads ist am besten den Standardwert beibehalten, wenn Sie nicht damit vertraut sind.
2. So richten Sie die JVM -Speicherzuweisung ein:
(1) Beim Starten und Verwenden des JVM an der Eingabeaufforderung (nur für den aktuell ausgeführten Klassentest effektiv):
java -xmx128m -xms64m -xmn32m -xss16m Test
(2) Beim Starten und Verwenden von JVM in einer integrierten Entwicklungsumgebung (wie Eclipse):
A. Öffnen Sie Eclipse.ini im Stammverzeichnis von Eclipse, und der Standardinhalt ist (die JVM -Speicherzuweisung wird hier so eingestellt, dass das aktuelle Entwicklungswerkzeug ausgeführt wird):
-Vmargs bedeutet, dass die folgenden Parameter für virtuelle Maschineneinstellungen sind. Sie können die darin enthaltenen Parameterwerte ändern oder -xmn und -xss hinzufügen. Zusätzlich kann der Nicht -H -Papier -Speicher in eclipse.ini festgelegt werden, wie z.
Die hier festgelegten Parameterwerte können in der Statusleiste des Entwicklungstools durch die folgende Konfiguration angezeigt werden:
Erstellen Sie Dateioptionen im Eclipse -Root -Verzeichnis, der Dateiinhalt lautet: org.eclipse.ui/perf/showHeapStatus=true
Ändern Sie die Eclipse.ini -Datei im Stammverzeichnis von Eclipse und fügen Sie den folgenden Inhalt zu Beginn hinzu:
Starten Sie die Eclipse neu und Sie können sehen, dass in der unten stehenden Statusleiste weitere JVM -Informationen enthält.
B. Offene Eclipse-Window-Präferenzen-Java-installierte JRE (effektiv für alle Java-Programme, die in der aktuellen Entwicklungsumgebung ausgeführt werden)
Bearbeiten Sie die derzeit verwendete JRE, geben Sie ein: -xmx128m -xms64m -xmn32m -xss16m
C. Öffnen Sie die Eclipse-Run-Java-Anwendung (nur für die festgelegten Java-Klassen effektiv)
Wählen Sie die Klasse zum festgelegten Speicherzuweisungen -Argument, geben Sie in das VM -Argument ein: -xmx128m -xms64m -xmn32m -xss16m
Hinweis: Wenn B und C in derselben Entwicklungsumgebung zur gleichen Zeit festgelegt sind, wird die B -Einstellung wirksam und die C -Einstellung ist ungültig, z. B.:
Die Einstellung der Entwicklungsumgebung lautet: -xmx256m, und die Einstellung des Klassentests lautet: -xmx128m -xms64m. Die Einstellung, die beim Ausführen von Test wirksam wird, lautet:
-Xmx256m -Xms64m
(3) Beim Starten und Verwenden von JVM in einer Serverumgebung (z. B. Tomcat) (so werden Java -Programme in der aktuellen Serverumgebung wirksam):
A. Umgebungsvariablen festlegen:
Variabler Name: Catalina_opts
Variablerwert: -xmx128m -xms64m -xmn32m -xss16m
B. Öffnen Sie den Bin -Ordner im Stammverzeichnis von Tomcat, bearbeiten Sie Catalina.bat und ersetzen Sie die �talina_opts% (insgesamt vier Plätze) durch: -xmx128m -xms64m -xmn32m -xss16m
2. Überprüfen Sie die JVM -Speicherinformationen
RunTime.getRuntime (). MaxMemory (); // Maximal verfügbarer Speicher, entsprechend -xmx
RunTime.getRuntime (). Freememory (); // der aktuelle jVM -freie Speicher
Runtime.getRuntime (). TotalMemory (); // Der Gesamtspeicher, der vom aktuellen JVM besetzt ist, entspricht der Summe des Speichers, der vom aktuellen JVM und Freememory verwendet wird ()
Über MaxMemory (), Freememory () und TotalMemory ():
MaxMemory () ist der maximal verfügbare Speicher des JVM, der über -xmx eingestellt werden kann. Der Standardwert beträgt 1/4 des physischen Speichers, und der festgelegte Wert kann nicht höher sein als der physische Speicher des Computers.
TotalMemory () ist der Gesamtspeicher, der vom aktuellen JVM bewohnt wird, und sein Wert entspricht der Summe des Speicherspeichers, der vom aktuellen JVM und Freememory () verwendet wird, was mit zunehmender JVM zunimmt.
Freememory () ist der aktuelle JVM -freie Speicher. Da das JVM nur dann das physische Gedächtnis einnimmt, wenn das Gedächtnis benötigt wird, ist der Wert von Freememory () im Allgemeinen sehr klein. Der tatsächliche verfügbare Speicher von JVM entspricht nicht Freememory (), sondern sollte maxmemory ()-TotalMemory ()+Freememory () gleich sein. Es setzt die JVM -Speicherzuweisung.
Siehe die offizielle Dokumentation:
http://docs.sun.com/source/819-0084/pt_tuningjava.html
Java -Startparameter sind in drei Kategorien unterteilt.
Eines sind die Standardparameter (-), alle JVM-Implementierungen müssen die Funktionen dieser Parameter implementieren und sind rückwärts kompatibel.
Der zweite sind nicht standardmäßige Parameter (-x). Die Standard -JVM implementiert die Funktionen dieser Parameter, aber es garantiert nicht, dass alle JVM -Implementierungen erfüllt sind und nicht garantiert als Rückwärtskompatibilität garantiert sind.
Der dritte sind nicht stabile Parameter (-xx). Jede JVM -Implementierung solcher Parameter wird unterschiedlich sein und kann jederzeit in Zukunft abgesagt werden. Es muss mit Vorsicht verwendet werden;
Nützlicher unter Standardparametern:
ausführlich
-Verbose: Klasse
Ausgabe der relevanten Informationen des JVM -Ladens der Klasse. Dies kann zur Diagnose verwendet werden, wenn JVM berichtet, dass die Klasse nicht gefunden werden kann oder Konflikte der Klassen.
-Verbose: GC
Ausgabe der relevanten Situation jedes GC.
-Verbose: jni
Die ausgibt die relevante Situation der nativen Methodenaufrufe, die im Allgemeinen zur Diagnose von JNI -Aufruffehlerinformationen verwendet wird.
Nicht standardmäßige Parameter werden auch erweiterte Parameter bezeichnet
Das am häufigsten verwendete ist
-Xms512m setzen die JVM so, dass der Speicher 512 m beträgt. Dieser Wert kann genauso wie -xmx festgelegt werden, um jedes Mal, wenn die Müllsammlung abgeschlossen ist, den Reallocing -Speicher von JVM zu vermeiden.
-Xmx512m stellen Sie den maximal verfügbaren Speicher von JVM auf 512 m ein.
-Xmn200m: Setzen Sie die Größe der jungen Generation auf 200 m. Ganze Haufen Größe = Größe der Jugendgenerierung + alte Generation Größe + persistente Erzeugungsgröße. Die dauerhafte Erzeugung ist im Allgemeinen in einer Größe von 64 m festgelegt. Nach der Erhöhung der jüngeren Erzeugung wird die Größe der älteren Generation verringert. Dieser Wert hat einen großen Einfluss auf die Systemleistung, und Sun empfiehlt die Konfiguration offiziell als 3/8 des gesamten Haufens.
-XSSS128K:
Legt die Stapelgröße für jeden Thread fest. Nach JDK5.0 beträgt die Stapelgröße jedes Fadens 1 m, und in der Vergangenheit beträgt die Stapelgröße jedes Fadens 256K. Weitere Anwendungs -Threads erfordern die Speichergröße zum Anpassen. Im selben physischen Speicher kann die Reduzierung dieses Wertes mehr Threads erzeugen. Das Betriebssystem hat jedoch weiterhin eine Grenze für die Anzahl der Threads in einem Prozess und kann nicht unendlich erzeugt werden, wobei die Erfahrungwerte zwischen etwa 3000 bis 5000 liegen.
-Xloggc: Datei
Ähnlich wie bei der Funktion -verbose: GC -Funktion werden nur die relevante Situation jedes GC -Ereignisses in eine Datei aufgezeichnet. Der Ort der Datei ist am besten lokal, um potenzielle Probleme des Netzwerks zu vermeiden.
Wenn der Befehl aus wörtlich gleichzeitig in der Befehlszeile angezeigt wird, muss -xloggc herrschen.
-Xprof
Tracks Ausführende Programme und Ausgaben geben die Tracking -Daten bei der Standardausgabe aus. Geeignet für Entwicklungsumfeld -Debuggen.
Die Parameterliste mit -xx als Präfix kann in JVM nicht angefordert sein, und die Sonne wird nicht empfohlen und kann in Zukunft ohne Benachrichtigung storniert werden. Viele dieser Parameter sind für uns jedoch in der Tat sehr nützlich, wie -xx: Permsize, -xx: MaxpermSize usw., die wir oft sehen;
Lassen Sie uns zunächst Verhaltensparameter einführen:
| Parameter und ihre Standardwerte | beschreiben |
| -Xx: -disableExplicitGC | System.gc () ist verboten; Aber JVMs GC ist immer noch gültig |
| -Xx:+maxfdlimit | Maximieren Sie die Grenze für die Anzahl der Dateideskriptoren |
| -Xx:+scavengeBeforlgc | Die nächste Generation von GCs hat Vorrang vor der vollständigen GC -Ausführung |
| -Xx:+useGcoverheadLimit | Begrenzen Sie den Anteil der Zeit für GC durch JVM, bevor Sie OOM werfen |
| -Xx: -Usconcmarksweepgc | GC für die ältere Generation unter Verwendung eines gleichzeitigen Markierungs -Austauschalgorithmus |
| -Xx: -Useparallelgc | Parallele GC aktivieren |
| -Xx: -Useparalleloldgc | Aktivieren Sie die Parallelität für den vollständigen GC, und dieses Element ist automatisch aktiviert, wenn -xx: -UseParallelGC aktiviert ist. |
| -Xx: -UseSerialgc | SeriengC aktivieren |
| -XX:+UsethreadPriorities | Aktivieren Sie die lokale Thread -Priorität |
Die drei Parameter von BOLD in der obigen Tabelle repräsentieren die GC -Ausführung in JVM
Es gibt drei Möglichkeiten zur Linie, nämlich seriell, parallel und Parallelität;
SerialGC ist die Standard -GC -Methode von JVM. Es ist im Allgemeinen für kleine Anwendungen und einzelne Prozessoren geeignet. Der Algorithmus ist relativ einfach und die GC -Effizienz ist hoch, kann jedoch für die Anwendung eine Pause führen.
ParallelgC bezieht sich auf die GC -Laufzeit, die keinen Einfluss auf den Betrieb der Anwendung hat. Die Threads von GC und App werden gleichzeitig ausgeführt, sodass der Betrieb der App nicht so weit beeinflusst wird.
Parallelität (concmarksweepgc) bezieht sich auf mehrere Threads, die GC gleichzeitig ausführen. Es ist im Allgemeinen für Mehrprozessorsysteme geeignet. Es kann die Effizienz von GC verbessern, aber der Algorithmus ist komplex und das System verbraucht viel.
Liste der Leistungssteuerungsparameter:
| Parameter und ihre Standardwerte | beschreiben |
| -Xx: largepageSizeInBytes = 4m | Stellen Sie große Seitengröße für Java Heap ein |
| -Xx: maxheapfreeratio = 70 | Der größte Anteil der Leerlaufmenge im Java -Haufen nach GC |
| -Xx: maxnewSize = Größe | Der maximale Speicherwert, den das neu erzeugte Objekt besetzen kann |
| -Xx: maxpermsize = 64m | Der maximale Speicherwert, den Objekte der älteren Generation besetzen können |
| -Xx: Minheapfreeratio = 40 | Der minimale Anteil der Leerlaufmenge im Java -Haufen nach GC |
| -Xx: newratio = 2 | Das Verhältnis der Speicherkapazität der neuen Generation zur Speicherkapazität der alten Generation |
| -Xx: newSize = 2,125m | Der Standardwert des Speichers wird eingesetzt, wenn Objekte der neuen Generation generiert werden |
| -Xx: ReservedCodecachesize = 32 m | Halten Sie die Speicherkapazität durch den Code besetzt |
| -Xx: threadStacksize = 512 | Stellen Sie die Gewindestapelgröße ein. Wenn es 0 ist, verwenden Sie den System Standardwert. |
| -Xx:+uselargepages | Verwenden Sie großen Seitenspeicher |
In unserer täglichen Leistungsstimmung verwenden wir diese Attribute des oben genannten Fettdrucks im Grunde.
Debug -Parameterliste:
| Parameter und ihre Standardwerte | beschreiben |
| -Xx: -Citime | Der Druck verbraucht Zeit in der JIT -Zusammenstellung |
| -Xx: IRRALFILE =./HS_ERR_PID <PID> .Log | Speichern Sie Fehlerprotokolle oder Daten in Dateien |
| -Xx: -UstendedDtraceProbes | Schalten Sie die solarisspezifische Dtrace-Sonde ein |
| -Xx: heapdumppath =./Java_pid <pid> .hprof | Geben Sie beim Exportieren von Heap -Informationen den Pfad oder den Dateinamen an |
| -Xx: -HeapdumponoutofMemoryError | Exportieren Sie relevante Informationen in den Haufen, wenn Sie zum ersten Mal auf OOM stoßen |
| -Xx: | Führen Sie benutzerdefinierte Befehle aus, nachdem ein tödlicher Fehler angezeigt wurde |
| -Xx: onoutofMemoryError = "<cmd args>; <cmd args>" | Führen Sie benutzerdefinierte Befehle aus, wenn Sie zum ersten Mal auf OOM stoßen |
| -Xx: -printclasshistogramm | Drucken Sie die Spalteninformationen der Klasseninstanz nach der Begegnung mit Strg -Break, genau wie die JMAP -Histo -Funktion |
| -Xx: -printconcurrentlocks | Drucken Sie die relevanten Informationen zur gleichzeitigen Sperre nach der Begegnung mit Strg -Break, dieselbe Funktion wie JStack -l |
| -Xx: -printcommandlineflags | Drucken Sie die Marke, die in der Befehlszeile angezeigt wird |
| -XX: -printkompilation | Relevante Informationen drucken, wenn eine Methode zusammengestellt wird |
| -Xx: -printgc | Drucken Sie jedes Mal relevante Informationen, wenn GC |
| -XX: -printgc-Details | Druckdetails jedes Mal drucken, wenn GC |
| -Xx: -printgctimestamps | Drucken Sie den Zeitstempel jedes GC aus |
| -Xx: -TraceClassloading | Verfolgen Sie die Ladeinformationen der Klasse |
| -Xx: -TraceClassloadingPreorder | Verfolgen Sie die Ladeinformationen aller Klassen, auf die sich verwiesen, auf |
| -Xx: -TraceClassResolution | Verfolgung konstanter Pool |
| -Xx: -TraceClassunloading | Verfolgung der Klasse Deinstallationsinformationen verfolgen |
| -Xx: -Traceloaderconstraints | Verfolgung von Informationen zu Klassenladerbeschränkungen |
Zusammenfassen
Die oben genannte Operationsmethode zum Einstellen von JVM -laufenden Parametern der intellij -Idee, die Ihnen vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!