2014-05-05 6 views
5

Ich folge this question und entdecke, dass alle Informationen veraltet sind.Java-Ergonomie: Wie werden Standardwerte berechnet?

The most up-to-date guide seems to be this document regarding GC tuning. Darin definiert Oracle ihre dumme Begriffsergonomie, die meiner Meinung nach nur vernünftige ("bequeme") Standardwerte bedeutet. In diesem Dokument ist this document is referred to, das in der obigen SO-Frage stark zitiert wird.

Es behauptet maximale Speichergröße wird wie folgt berechnet:

kleinere Wert von 1/4 des physikalischen Speichers oder 1 GB. Vor J2SE 5.0 war die standardmäßige maximale Heap-Größe 64 MB. Sie können diesen Standardwert mit der Befehlszeilenoption -Xmx überschreiben.

Dies ist eindeutig falsch, da ich eine Maschine, die ich auf dieser verfügt über 12 GB RAM und einem 4096 MB getestet haben, überprüften wie mit java -XX:+PrintFlagsFinal -version | grep HeapSize. Der Vorbehalt ist jedoch enthalten:

Hinweis: Die für die Heap-Größe angegebenen Grenzen und Brüche sind für J2SE 5.0 korrekt. Sie werden wahrscheinlich in späteren Versionen anders sein, wenn Computer leistungsfähiger werden.

Welche ist großartig! Ich kann jedoch keine aktuelle Dokumentation zu diesem Thema finden. Ich habe überprüft, dass ich eine Server-Klasse per this question ausführen. Warum ist das wichtig? Da meine 12-GB-Server-Klasse-Maschine standardmäßig 170 MB ist. Hier bricht alles zusammen. Ja, ich bin mir bewusst, dass ich dies überschreiben kann. Ich möchte diese Überschreibung nicht für jede Anwendung, die ich ausführe, duplizieren, und ich würde es lieber nicht hart in Pom-Dateien codieren. Mehr noch, diese Nummer hat sich irgendwie zufällig auf meiner Maschine geändert, und ich muss verstehen, wie sie gestoßen wurde.

Hier ist meine Java-Version:

$ java -version 
java version "1.7.0_04" 
Java(TM) SE Runtime Environment (build 1.7.0_04-b21) 
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode) 

ich auf Mac OS X 10.9.2 bin.

+0

@ElliottFrisch guter Punkt, zu helfen, hat hinzugefügt – djechlin

+0

@EliottFrisch OK, nichts hilfreiches in diesem Dokument. – djechlin

+0

Jedes Java Tomcat/Eclipse/etc Ich musste starten und gehe entweder und -Xmx = 2g zur Konfig selbst oder setze es in JAVA_OPTS. Es ist ein kleiner Preis für die Ruhe – Totoro

Antwort

0

Sie haben Recht. Die Dokumentation zur Java-Speicherverwaltung ist veraltet und nicht vollständig: Xmx ist nur ein Beispiel.

machte ich die gleiche Beobachtung und ich mein Verhalten geändert: Ich Xmx immer angeben.

Meiner Meinung nach ist es kein Problem. Der von Ihrem Java-Programm benötigte Speicher sollte nicht von Ihrer Hardware abhängen. Außerdem halte ich es für eine gute Praxis ist: explizit angeben Xmx (und andere Tunings) in Ihren Skripten/Rezept das gleiche Verhalten in allen Umgebungen (dev/prod hat häufig unterschiedliche Hardware-Konfigurationen)

Verwandte Themen