Echte Unterschiede zwischen "Java-Server" und "Java-Client"?
Gibt es tatsächlich einen praktischen Unterschied zwischen "java -server" und "java -client"? Alle die ich finden kann auf der Sun-Website, ist eine vage "-server startet langsamer, aber sollte schneller laufen". Was sind die wirklichen Unterschiede? (Mit dem JDK 1.6.0_07 derzeit.)
InformationsquelleAutor der Frage Paul Tomblin | 2008-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist sehr eng mit der HotSpot und die Standard - option Werte ( Java HotSpot VM Options ), die unterscheiden zwischen client-und server-Konfiguration.
Vom Kapitel 2 des grundlagenpapiers (Die Java HotSpot Performance Engine-Architektur):
Also der eigentliche Unterschied ist auch auf die compiler-Ebene:
Hinweis: Die Veröffentlichung von jdk6 update 10 (siehe Update-Release Notes:Änderungen in 1.6.0_10) zu verbessern versucht, startup-Zeit, aber aus einem anderen Grund, als die hotspot-Optionen, die anders verpackt mit einer viel kleineren kernel.
G. Demecki Punkte aus in den Kommentarendass im 64-bit-Versionen von JDK, die
-client
option wird ignoriert, für viele Jahre.Sehen Windows
java
- Befehl:InformationsquelleAutor der Antwort VonC
Der sichtbarste Unterschied sofort in älteren Java-Versionen wäre der Speicher für eine
-client
im Gegensatz zu einem-server
Anwendung. Zum Beispiel auf meinem Linux-system habe ich bekommen:Standard
-server
aber mit der-client
option ich bekommen:also mit
-server
meisten der Speicher begrenzt und erste Zuordnungen sind viel höher für diesejava
version.Diese Werte ändern können, die für verschiedene Kombinationen von Architektur, Betriebssystem und jvm-version jedoch. Die letzten Versionen der jvm entfernt haben flags und wieder zog es viele der Unterschiede zwischen server und client.
Daran zu erinnern, dass können Sie sehen, alle details eines Laufenden
jvm
mitjvisualvm
. Dies ist nützlich, wenn Sie Benutzer oder Module, die setJAVA_OPTS
oder Skripte verwenden, die change command line Optionen. Dies wird auch lassen Sie überwachen, in Echtzeit, heap und permgen Raum-Nutzung zusammen mit vielen anderen stats.InformationsquelleAutor der Antwort Mark Booth
Einem Unterschied ich habe gerade bemerkt, dass in "client" - Modus, scheint es die JVM gibt tatsächlich einige nicht verwendete Speicher wieder an das Betriebssystem - in der Erwägung, dass mit "server" - Modus, sobald die JVM schnappt sich den Speicher, wird es nicht geben es zurück. Das ist, wie es scheint, auf Solaris mit Java6 sowieso (mit prstat -Z zu sehen, die Menge des Arbeitsspeichers auf einen Prozess).
InformationsquelleAutor der Antwort prule
the-client-und -server-Systemen sind unterschiedliche binaries. Sie sind im wesentlichen zwei verschiedene Compiler (JITs) Anbindung an die gleiche runtime-system. Das client-system ist optimal für Anwendungen, die schnelle startup-Zeiten oder kleine Fußabdrücke, die server-system ist optimal für Anwendungen, bei denen die Gesamt-performance wichtig ist. Im Allgemeinen kann das client-system ist besser geeignet für interaktive Anwendungen wie z.B. GUIs
Führen wir den folgenden code mit den beiden Schaltern:
Hinweis: Der code kompiliert wurde nur einmal!!!! Die Klassen sind die gleichen in beiden Läufen!
Mit - - client:
java.exe -client -classpath C:\mywork\classes com.blogspot.sdoulger.LoopTest
Zeitaufwand: 766
Mit -server:
java.exe -server -classpath C:\mywork\classes com.blogspot.sdoulger.LoopTest
Zeitaufwand: 0
Scheint es, dass der aggressivere Optimierung des server-Systems, entfernen Sie die Schleife, da es versteht, dass es nicht jede Aktion!
Referenz
InformationsquelleAutor der Antwort Premraj
Oracle-online-Dokumentation enthält einige Informationen, die für Java SE 7.
Auf dem java – the Java application launcher - Seite für Windows, die
-client
option wird ignoriert, die in einer 64-bit-JDK verwendet wird:Jedoch (um die Dinge interessant), unter
-server
heißt es:Den Server-Class Machine Detection Seite gibt Informationen über die VM ausgewählt ist, die von OS und Architektur.
Ich weiß nicht, wie viel dieses gilt für JDK 6.
InformationsquelleAutor der Antwort pharsicle
IIRC die server-VM nicht mehr hotspot-Optimierungen beim starten damit es schneller läuft, aber dauert ein wenig länger zum starten und verbraucht mehr Speicher. Die client-VM verzögert, die meisten von die Optimierung für einen schnelleren Systemstart.
Bearbeiten, um hinzuzufügen: Hier einige info aus Sonne, es ist nicht sehr spezifisch, aber Sie wird Ihnen einige Ideen.
InformationsquelleAutor der Antwort Mike Akers
Von Goetz - Java Concurrency in Practice:
Mein Schwerpunkt. YMMV
InformationsquelleAutor der Antwort Adam
IIRC, geht es um die garbage collection Strategien. Die Theorie ist, dass ein client und server wird anders sein in Bezug auf kurzlebige Objekte, die wichtig ist für die moderne GC-algorithmen.
Hier ist ein link auf server-Modus. Ach, Sie nicht zu erwähnen-client-Modus.
Hier ist eine sehr Gründliche link auf GC im Allgemeinen, dies ist ein mehr basic-Artikel. Nicht sicher, ob entweder-Adresse -server vs. -client, aber dieser ist relevant material.
Bei No Fluff Just Stuff, beide Ken Sipe und Glenn Vandenburg haben tolle Gespräche über diese Art der Sache.
InformationsquelleAutor der Antwort Michael Easter
Ich habe nicht bemerkt keinen Unterschied in der startup-Zeit zwischen den 2, aber getaktet eine sehr geringe Verbesserung in der performance der Anwendung mit "-server" (Solaris-server, jeder mit Sonnenstrahlen, um die app auszuführen). Das war unter 1.5.
InformationsquelleAutor der Antwort Brian Knoblauch
Letzte mal hatte ich einen Blick auf diese, (und zugegeben, es war eine Weile zurück), der größte Unterschied, den ich bemerkte, war in der garbage collection.
IIRC:
Wenn Sie vergleichen, können Sie zwei java-VMs, ein client, ein server mit dem jvisualvm tool, Sie sollten sehen, ein Unterschied in der Häufigkeit und die Auswirkungen der garbage collection, sowie in der Anzahl der Generationen.ich hatte ein paar screenshots, die zeigte, dass der Unterschied wirklich gut, aber ich kann es nicht reproduzieren, da ich eine 64-bit-JVM, die nur implementiert die server-VM. (Und ich kann nicht sein belästigt, um herunterzuladen und zu streiten die 32-bit version auf meinem system auch.)Scheint dies nicht mehr der Fall, versucht haben, die einige code auf windows mit server-und client-VMs, die ich scheinen, um die gleiche generation-Modell für beide...
InformationsquelleAutor der Antwort brice
Wenn eine migration von 1,4 auf 1,7("1.7.0_55")version.Die Sache, die wir hier beobachtet wird, gibt es keine solchen Unterschiede in der default-Werte zugewiesen heapsize|permsize|ThreadStackSize Parameter im client & server-Modus.
Durch die Art und Weise, (http://www.oracle.com/technetwork/java/ergo5-140223.html). Das ist das snippet von oben genommen link.
ThreadStackSize ist höher bei 1,7, während er durch Open JDK forum,es gibt Diskussionen, die genannten frame-Größe ist etwas höher in der version 1.7.
Es wird vermutet wirkliche Unterschied möglich sein könnte, zu Messen, zur Laufzeit basierend auf Ihrem Verhalten Ihrer Anwendung
InformationsquelleAutor der Antwort Nuwan Arambage