SocketServer und Ahead-Of-Time-Compiler

Status
Nicht offen für weitere Antworten.
Hallo,

da meines Wissens nach ein kompiliertes JavaProgramm, was einen SocketServer und MultiPlayerFunktionalität beinhaltet, standardmäßig über einen JIT-Compiler automatisch vom kompilierten ByteCode über diese HotSpotTechnologie in MaschinenCode umgewandelt wird, interessiert mich ob dieses Verfahren auch bei einem, wie gesagt, SocketServer in ByteCodeForm der Fall ist. Wenn ja würde mich dann noch interessieren ob man einen SocketServer (+JavaProgramm für MultiPlayerAnwendung) direkt mit einem Ahead-Of-Time-Compiler in MaschinenCode übersetzen lassen kann um so noch mehr Performance für die Serveranwendung heraus zu holen.

Kann mir das jemand klar beantworten? Wäre nett.
 
Warum? Eine Server Anwendung ist long-running. Nach einer Zeit X sind die Hot-Spots sofern möglich nativ kompiliert und danach ist es egal. Da die Anwendung vorraussichtlich um ein Vielfaches länger läuft als X, ist X irrelevant.
 
"Nach einer Zeit X sind die Hot-Spots sofern möglich nativ kompiliert und danach ist es egal"

Das ist es ja gerad, "sofern möglich".. An was könnte es denn liegen wenn es nicht möglich wäre? Bin Anfänger.

Naja doch, ich sehe da schon einen geringen PerformanceVorteil wenn von vorn herein fest steht dass die ganze Anwendung als Maschinencode fertig zu Verfügung steht.

Dieser kleine Unterschied von JIT zu nativem Compiler wirkt sich meiner Meinung nach deutlich auf die Performance aus, was die Abarbeitung dessen angeht. Beispiel: Kleiner Vorteil -> wird immer größer um so mehr User ins Spiel kommen. Ist doch überall so, zumindest als Grundregel. Zur Vollständigkeit: Kleiner Nachteil -> wird auch immer größer um so mehr User ins Spiel kommen.

P.S.
Hab noch keine einzige Zeile Code in Java geschrieben. Lern seit 2 Tagen erst den ganzen Kram.
 
"Nach einer Zeit X sind die Hot-Spots sofern möglich nativ kompiliert und danach ist es egal"

Das ist es ja gerad, "sofern möglich".. An was könnte es denn liegen wenn es nicht möglich wäre? Bin Anfänger.
Unter bestimmten Bedingungen (zB dynamisch neue Klassen per Reflection laden) müssen Optimierungen zurückgenommen werden.

Naja doch, ich sehe da schon einen geringen PerformanceVorteil wenn von vorn herein feststeht dass die ganze Anwendung als Maschinencode fertig zu Verfügung steht.
Das ist so nicht korrekt, nein.

Dieser kleine Unterschied von JIT zu nativem Compiler wirkt sich meiner Meinung nach deutlich auf die Performance aus, was die Abarbeitung dessen angeht.
Quelle?
Beispiel: Kleiner Vorteil -> wird immer größer um so mehr User ins Spiel kommen. Ist doch überall so, zumindest als Grundregel. Zur Vollständigkeit: Kleiner Nachteil -> wird auch immer größer um so mehr User ins Spiel kommen.
Unsinn. Das Server Programm existiert genau einmal, völlig egal wie viele User sich darauf tummeln. Sobald das Programm optimiert ist, ist es optimiert. Was soll sich daran ändern wenn sich noch jemand einlogget? Oder generierst du neuen Code für jeden User? 😉
P.S.
Hab noch keine einzige Zeile Code in Java geschrieben. Lern seit 2 Tagen erst den ganzen Kram.
Ein Wort zur Optimierung: Don't.
Erst recht nicht wenn nicht eindeutig Bewiesen ist das ein Bottleneck vorhanden ist und sichergestellt ist das man auch wirklich die richtige Stelle im Code erwischt hat.
 
>Ein Wort zur Optimierung: Don't.

Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet. - that is not until you have a perfectly clear and unoptimized solution.
- M.A. Jackson
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.
- Donald Knuth
 
Zuletzt bearbeitet:
"Unsinn. Das Server Programm existiert genau einmal, völlig egal wie viele User sich darauf tummeln. Sobald das Programm optimiert ist, ist es optimiert. Was soll sich daran ändern wenn sich noch jemand einlogget? Oder generierst du neuen Code für jeden User?"

Als Grundregel gilt immernoch, um so schneller der Prozess oder was auch immer für den User abgearbeitet ist, um so besser für die GesamtPerformance. Das hat nix mit anderem Code für neuen User generieren zu tun. Eine Optimierung über diese HotSpotTechnologie beinhaltet doch lediglich bloß das Vorhalten des Maschinencodes. Wenn du diesen Umstand zur vorherigen kompletten Kompilierung in MaschinenCode vorziehst redest du in meinen Augen wohl oder übel Unsinn.

Nun gut. Der Thread führt augenscheinlich nicht zur Lösung der eigentlichen Frage. Soll ich es als erledigt markieren?:lol:
 
Ich denke nicht das du wirklich verstehst wie die JIT/Hotspot Optimierungen funktionieren. Da du nach eigenen Aussagen noch nichtmal eine Zeile Java geschrieben hast, möchte ich dir einfach den Rat geben in solchen Fällen erstmal auf Leute zu hören die ein wenig Ahnung von der Thematik haben. Nur solange bis du in der Lage bist dir selbst eine fundierte Meinung zu bilden.
 
Pass mal auf, du bemäkelst keine meiner Aussagen als Unsinn.

Du bist hier ein Moderator und hast in erster Linie für eine angenehme Atmosphäre zu sorgen.

Jede deiner Aussagen hat in meinen Augen etwas sehr unprofessionelles an sich, deswegen habe ich keine Lust mit dir über so ein Thema zu reden, da du einen gleich persönlich/schräg kommst.

Erzähl du mir bitte nicht wann ich mir eine Meinung zu bilden habe und wann nicht.

Du hast wohl nicht mehr alle Latten am Zaun oder was?

Naja, wer sein halbes Leben in einem Forum verbringt (17000 Beiträge) ...

Muss man nicht mehr viel zu sagen.
 
ActionScripter hat gesagt.:
Wenn du diesen Umstand zur vorherigen kompletten Kompilierung in MaschinenCode vorziehst redest du in meinen Augen wohl oder übel Unsinn. ... Pass mal auf, du bemäkelst keine meiner Aussagen als Unsinn.
Aha, wer gibt Dir das Recht ihn zu kritisieren und ihn davon abhalten zu wollen? Und es spielt da keine Rolle, ob er Mod ist oder nicht, wenn einer keine Ahnung von dem hat, was er erzählt, dann darf er das ruhig sagen.

4 Beiträge in einem Java-Forum und schon die Fresse breit, muss man nicht mehr viel zu sagen.

Geh doch zurück zu Flash, Du ActionScripter und treib die Prozzis Deiner Anwender in den Hitzetod.

Kein Gruß von mir für so ein Fehlverhalten.
 
Lernt erstmal zufrieden mit euch selbst zu sein, dann mögen euch die Leute auch.

Mehr als provozieren könnt ihr ja nicht, hat man schon in den ersten Beiträgen gesehen.

( Und erzähl du mir nix von Performance. )
 
>( Und erzähl du mir nix von Performance. )

Wenn du nix von Erfahrenen Programmieren hören willst, dann stell keine Fragen.
 
Aber echt hey @Der Müde Joe *back to topic*

@Fragesteller, der mit den Antworten nicht klar kommt

Wenn ein Server mit zunehmender Anzahl an User im unteren 3-stelligen Bereich langsamer wird, dann hat man wohlmöglich die falsche Technik.

In Java gibts das gute alte "blocking IO". Damit kommt man recht schnell voran, die Lernkurve ist nicht allzu hoch. Aber bei sehr vielen Usern kann das schnell böse enden. Denn beim blocking-IO Ansatz hat man pro Client einen Thread. Jetzt lass mal mehr >=1000 Clients verbinden... Der Thread-Dispatcher ist da sher stark mit umschalten der Threads beschäftigt. Nehmen die Anzahl der User weiter zu überwiegt irgendwann das Dispatchen und keiner der eingeloggten User kommt mehr zum Zug.

Dann gibts da noch das Non-blocking-IO (Java NIO). Die lernkurve ist um ein vielfaches steiler, man kann deutlich mehr falsch machen etc. ABER: Man kommt mit deutlich weniger Threads aus und du kannst wesentlich mehr Clients bedienen. Wenn jedoch jeder Client an sich zu viel CPU-Last am Server verbrät ist auch hier irgend wann Ende-Gelände. Aber eben erst bei seeeeehr vielen Clients. Das ganze ist dann nichtmehr allein Thread-Bedingt.

Denke nicht dass da JIT etc. sooo viel ausrichten oder verschlimmbessern können. I.d.R. wird es an der BusinessLogic im Server liegen. Wenn man's da nicht total "versaut" kriegt der JIT etc. das schon ziemlich gut gebacken und optimiert. Und das unabhängig von der Anzahl der User. Und ebenfalls unabhängig davon, ob da jetzt ein SocketServer mit Netzwerkanbindung davor sitzt oder nicht.

- Alex
 
Noch was:

da meines Wissens nach ein kompiliertes JavaProgramm, was einen SocketServer und MultiPlayerFunktionalität beinhaltet, standardmäßig über einen JIT-Compiler automatisch vom kompilierten ByteCode über diese HotSpotTechnologie in MaschinenCode umgewandelt wird,
* bis jetzt soweit verstanden *

interessiert mich ob dieses Verfahren auch bei einem, wie gesagt, SocketServer in ByteCodeForm der Fall ist

ByteCode=ByteCode.

Wo ist jetzt der Unterschied zwischen:

SocketServer und MultiPlayerFunktionalität

und

SocketServer in ByteCodeForm

???

Beides ist nach dem compilieren ByteCode und wird in der JVM irgendwie, irgendwo stellenweise in optimiertem Maschinencode enden.
 
Danke für die ausführliche Antwort.

Dennoch muss ich dir direkt sagen dass du so etwas "@Fragesteller, der mit den Antworten nicht klar kommt" bitte zu unterlassen hast. Lernt einfach mal den Leuten nicht gleich persönlich zu kommen.

Bitte unterlass auch so einen Schwachsinn: "ByteCode=ByteCode."

In meiner Frage kann man ein "wie gesagt" erkennen, somit erledigt sich dein letztes "in Frage stellen meiner Frage" wohl von selbst.

Im Prinzip ist es doch so. Ihr macht alle so einen streitsüchtigen Eindruck dass am Ende einfach nur zum größten Teil Müll heraus kommt.

Eine Frage in einem FachForum ist doch dafür da um den Inhalt der Frage zu klären. Vielleicht solltet ihr euch das nach tausenden von Beiträgen erstmal wieder ins Gewissen rufen.
 
Zuletzt bearbeitet:
Du willst Flamewar? Den kannst du haben :lol:

Wenn ich dich richtig verstehe sind wir alle mit nix anderem beschäftigt als in diesem Forum "rumzuhängen" und den Postcounter in die Höhe zu treiben und Anfängern vermeintlich abfällige und abwertende Antworten zu geben? Klar. Das ist unser Spezial-Hobby.

Nein, mal im ernst. Hier sind viele Profis unterwegs die neben Ihrre Arbeit Zeit opfern um Anfängern zu helfen. Falls du mal im Netz nach einer Java Forum Alternatuve gesucht hast: Dieses Forum ist eins der größten seiner Art. Und warum wir ein Forum groß? Nur weil "Verklemmte Arschlöcher blutigen Anfängern keine richtigen Tipps geben"? Das glaubst du ja selbst nicht.

Im Endeffekt: Du hast es selbst herausgefordert. Du hast eine Antwort erhalten die dir nicht gepasst hat, woraufhin dein Puls um 30 Punkte gestiegen ist und so eine in unseren Augen unabgebrachte Kritik entstanden ist (geschehen in exakt diesem Post: http://www.java-forum.org/java-basi...erver-und-ahead-time-compiler.html#post555967)

Du hast gefragt, wir haben geantwortet. Wenn dir das nicht passt kannst du das hinterfragen und die Sache sachlich vertiefen. Aber nicht anfangen zu stressen und uns als Deppen hinstellen. :noe: Das geht gar nicht. Im übrigen wirst du so auch keine besseren Antworten finden. Da wirst du dann noch mal :rtfm: müssen oder dein Glück in einem anderen Forum probieren :autsch:

In diesem Sinne *bitte wieder zurück zu einer sachlichen Diskussion* :toll:

- Alex
 
Pass mal auf, du bemäkelst keine meiner Aussagen als Unsinn.

Du bist hier ein Moderator und hast in erster Linie für eine angenehme Atmosphäre zu sorgen.

Jede deiner Aussagen hat in meinen Augen etwas sehr unprofessionelles an sich, deswegen habe ich keine Lust mit dir über so ein Thema zu reden, da du einen gleich persönlich/schräg kommst.

Erzähl du mir bitte nicht wann ich mir eine Meinung zu bilden habe und wann nicht.

Du hast wohl nicht mehr alle Latten am Zaun oder was?

Naja, wer sein halbes Leben in einem Forum verbringt (17000 Beiträge) ...

Muss man nicht mehr viel zu sagen.

[...]

Lernt einfach mal den Leuten nicht gleich persönlich zu kommen

ohne worte 😀
 
Wie gesagt. Fangt nicht gleich an zu provozieren und bleibt einfach sachlich. Das hat nix mit Puls zu tun.

Von mir aus kann sich der nächste Held noch mal melden.
 
Da dieser Thread zu nichts führt, da jede Antwort als persönlicher Angriff gewertet wird, werde ich das Ganze an dieser Stelle abbrechen.

Und ganz ohne persönlich zu werden bitte ich den Threadersteller in Zukunft Threaderstellung zu unterlassen oder zu akzeptieren, dass andere, meist erfahrenere Java-Entwickler (und wildcard ist hier einer der Erfahrensten) eine andere Meinung haben.
Entweder will man eine Antwort auf die Frage und muss mit anderen Meinungen rechnen oder man will hören, dass man richtig liegt, dann ist oft das Gespräch mit dem Spiegel das Beste. Das mussten hier auch schon andere User (ohne hier Namen zu nennen, wissen eh die Meisten wen ich meine) erfahren. Oft mit sehr unterschiedlichem Ergebnis.

Zum eigentlichem Thema als Abschluss kann ich mich den Vorrednern nur anschließen. Der Hotspot JIT Compiler ist einer der besten Compiler am Markt. Die Optimierungen gehen soweit, dass selbst zur Laufzeit unbenutzte Teile an Code rausfallen (Analyse per Codeflow-Analysing). Sollte nach 10.000 Durchläufen ein bisher nie genutztes und damit wegoptimiertes Feature gebraucht werden, so wird an dieser Stelle einmal interpretiert. Der Laufzeitgewinn ist immer noch um Längen höher als wenn es die gesamte Zeit drin gewesen wäre.
Ein Ahead-Of-Time Compiler hat keine Möglichkeit das Laufzeitverhalten zu analysieren, zusätzlich dauert der Start, auf Grund der Vorkompilierung um Längen länger als ohne diese (bestes beispiel .NET an dieser Stelle).

Ansonsten wie bereits mehrfach erwähnt wurde, generell gilt die Regel:
Solange keine Optimierungen gebraucht werden, lass es. Wird es irgendwann eng, kann man sich die Zeit nehmen.

Damit schließe ich das Thema ab.

~closed~
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben