|
Lunar
(Themenstarter)
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Hello World hat geschrieben: dentaku hat geschrieben: Jo, dieser Artikel ist demnach falsch! Ein JIT compiler (zumindest bei Java) kompiliert den code beim Start des Programmes - also weder davor noch während des Programmablaufs.
Das ist schonmal falsch. Das JIT in JIT-Compiler steht für "Just in Time". Der Code wird also genau dann kompiliert, wenn er zum ersten Mal gebraucht wird und _nicht_ notwendigerweise beim Start des Programms. Sonst würden Programme wie z. B. Eclipse ja ewig zum starten brauchen.
Genau! Sowohl ein Compiler, der Bytecode vor der Ausführung der Anwendung compiliert, als auch einer, der während dere Ausführung übersetzt, bezeichnet man als JIT Compiler. Wichtig ist allein die Tatsache, daß das Programme erst bei Ausführung compiliert wird.
|
|
dentaku
Anmeldungsdatum: 31. Januar 2005
Beiträge: 3785
|
Lunar hat geschrieben: Hello World hat geschrieben: dentaku hat geschrieben: Jo, dieser Artikel ist demnach falsch! Ein JIT compiler (zumindest bei Java) kompiliert den code beim Start des Programmes - also weder davor noch während des Programmablaufs.
Das ist schonmal falsch. Das JIT in JIT-Compiler steht für "Just in Time". Der Code wird also genau dann kompiliert, wenn er zum ersten Mal gebraucht wird und _nicht_ notwendigerweise beim Start des Programms. Sonst würden Programme wie z. B. Eclipse ja ewig zum starten brauchen.
Genau! Sowohl ein Compiler, der Bytecode vor der Ausführung der Anwendung compiliert, als auch einer, der während dere Ausführung übersetzt, bezeichnet man als JIT Compiler. Wichtig ist allein die Tatsache, daß das Programme erst bei Ausführung compiliert wird.
Sorry, dass ich Euch beide berichtigen muss: ein JIT Compiler übersetzt nicht irgendwann, wenn er gebraucht wird, sondern genau bei Start der Anwendung - lest die Links durch die ich oben gepostet habe - die sind direkt von Sun incl. technischer Dokumentationen. Wird ein JIT compiler verwendet, wird direkt beim Start der code übersetzt. JIT für "Just in time" bedeutete damals "Kompiliere nicht bei Entwicklung des Programmes, sondern erst wenn das Programm auf der Zielplatform gestartet wird". Diese Technologien sind nicht auf meinem Mist gewachsen sondern es hat Sun Jahre gekostet, diese HotSpot VMs zu entwickeln. Die ersten JIT compiler gabe es bereits kurz nach Erscheinen von Java und waren im Vergleich zu HotSpot ein erster Versuch überhaupt zu übersetzen - und zwar ziemlich dumm im Vergleich zu HotSpot. Letztenendes haben sie sogar oft dazu beigetragen den Ruf von Java weiter zu schädigen, weil die Programmstarts noch länger gedauert haben (was bei Serverapplikationen weniger Relevanz hat, aber bei Client Apps deutlich zu spüren war). Eclipse braucht deswegen bei Verwendung eines JIT nicht ewig zum starten, weil ein JIT compiler nicht hochoptimiert sondern nur sehr leicht, eben weil er nicht lange benötigen darf, weil eben sonst der Start zu lange benötigt. Deswegen werden JIT compiler Heute auch nicht mehr benutzt, weil sie den Programmstart unnötig verzögern (im Gegensatz zu HotSpot) und trotzdem nur einen mässigen Geschwindigkeitsvorteil gegenüber der Interpretierung bringen (im Gegensatz zu HotSpot). Macht Euch wenigstens schlau und lest die Dokus von Sun JVMs durch (links u.a. siehe oben). Danke! Oder macht Euch Schlau über die milestones von Java (Bytecode Interpreter → JIT compiler → HotSpot JVMs).
|
|
Hello_World
Anmeldungsdatum: 13. Juni 2006
Beiträge: 3620
|
dentaku, davon dass Du es wiederholst wird es nicht richtiger. Schonmal dran gedacht, dass es im Interesse von Sun sein könnte, HotSpot als etwas ganz neues, tolles, nie dagewesenes darzustellen? Es bleibt dabei, HotSpot ist ein (wenn auch zweifellos sehr ausgefeilter) JIT-Compiler.
Ich habe mich für C entschieden weil ja alles was C auch C++ kann bis halt auf OOP, die ich ja sowieso als Anfänger eigentlich nicht benötige.
C++ bietet noch wesentlich mehr als OOP, z. B. Templates, Exceptions, Referenzen, Überladung...
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4735
|
Sorry, dass ich Euch beide berichtigen muss: ein JIT Compiler übersetzt nicht irgendwann, wenn er gebraucht wird, sondern genau bei Start der Anwendung - lest die Links durch die ich oben gepostet habe - die sind direkt von Sun incl. technischer Dokumentationen.
Sorry, aber da musst Du jetzt uns drei berichtigen. Der "alte" JIT Compiler von Sun übersetzt nicht beim Start des Programms, das wäre "ahead of time" (AOT), sondern z.B. wenn eine Bytecode-Datei geladen wird. Und das passiert nach Bedarf und nicht komplett am Anfang. Sonst wäre der Programmstart bei grösseren Anwendungen auch noch langsamer.
Wird ein JIT compiler verwendet, wird direkt beim Start der code übersetzt. JIT für "Just in time" bedeutete damals "Kompiliere nicht bei Entwicklung des Programmes, sondern erst wenn das Programm auf der Zielplatform gestartet wird".
JIT-Compiler gab es schon lange vor Java, und damit auch schon die Unterscheidung zwischen JIT und AOT und was Du beschreibst ist eindeutig AOT. Wenn Java das wirklich so gemacht hätte, dann wäre es unglaublich dumm gewesen bei jedem Programmstart neu zu übersetzen, anstatt das Ergebnis der Übersetzung auf Platte zu speichern für den nächsten Programmlauf.
Macht Euch wenigstens schlau und lest die Dokus von Sun JVMs durch (links u.a. siehe oben). Danke!
Lies Du doch mal etwas zum Thema das nicht von Sun ist und denk über das Marketing-Argument von Hello World nach. Danke! http://foldoc.org/foldoc/foldoc.cgi?query=JIT http://en.wikipedia.org/wiki/Dynamic_translation JIT-Compiler
|
|
dentaku
Anmeldungsdatum: 31. Januar 2005
Beiträge: 3785
|
Ihr wisst es eben alle drei nicht. Anstatt so blöde und falsche Argumente zu bringen, solltet Ihr Euch genauer informieren. Ich rede hier nicht von einem abstrakten Begriff "JIT" sondern vom Java JIT Compiler (siehe Topic dieses Threads), so wie Sun ihn in Java damals eingeführt hat. Und der JIT von Java übersetzt bei Programmstart jedesmal. Das ist nunmal Fakt (ich habe Jahrelang auch JITs benutzt). Und wenn Ihr mir nicht glaubt, lest eben selbst nach (bei Sun) - ich habe inzwischen genügend Links angegeben. So und jetzt habe ich keine Lust mehr - glaubt doch was Ihr wollt, Ihr unverbesserlichen Möchtegernfachleute. *tztztz* 🙄
|
|
Lunar
(Themenstarter)
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
dentaku hat geschrieben: Ihr wisst es eben alle drei nicht.
Wird sind auch kein bisschen arrogant, nicht wahr? 😉 dentaku hat geschrieben: Anstatt so blöde und falsche Argumente zu bringen, solltet Ihr Euch genauer informieren. Ich rede hier nicht vom abstrakten Begriff "JIT" sondern vom Java JIT Compiler (siehe Topic dieses Threads), so wie Sun ihn in Java damals eingeführt hat. Und der JIT von Java übersetzt bei Programmstart jedesmal.
Das bezweifelt ja auch keiner. Der alte JIT von Java hat beim Programmstart übersetzt. Das ändert allerdings nichts an der Tatsache, daß auch der neue Hotspotcompiler ein JIT Compiler ist. Nur eben ein sehr guter mit sehr fortgeschrittenen Optimierungsmechanismen. Sun wehrt sich nur aus Marketing Gründen dagegen, diese Compiler ebenfalls als JIT Compiler zu bezeichen. Der Wechsel von einem JIT Compiler zu einem JIT Compiler lässt sich eben schwerer vermarkten als der Wechsel von einem ordinären JIT Compiler zu einem Hotspot Compiler (Tataaa). Ich würde mal sagen, du bist ein bisschen auf das Marketing Gequatsche reingefallen 😉 Gruß lunar
|
|
dentaku
Anmeldungsdatum: 31. Januar 2005
Beiträge: 3785
|
Wenn Du technische Dokumentationen als "Marketing Gequatsche" bezeichnest - bitte schön.
|
|
Lunar
(Themenstarter)
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
dentaku hat geschrieben: Wenn Du technische Dokumentationen als "Marketing Gequatsche" bezeichnest - bitte schön.
In jeder technischen Dokumentation einer Firma schwingt immer auch das Marketing mit. Lies dir mal Microsofts Dokumentation zum .NET Framework durch. Da ist selbst bei absolut schlecht implementiertem Zeug soviel "Unsere Bibliotheken sind ja soooooo toll" drinnen, daß man fast nicht mehr an eine technische Dokumentation glaubt. Auch Sun hat in der Vergangenheit in technischen Dokumentationen schon oft viel Zeug erzählt, was sich nicht als ganz wahr herausgestellt hat. Die erzählen z.B. immer noch, daß Swing das beste GUI Framework der Welt ist 😉 Ich bin generell vorsichtig gegenüber technischen Dokumentationen von Firmen, die ihre Produkte verkaufen wollen, solange ich das nicht selbst ausprobiert habe oder aus unabhängigen Quellen bestätigt finde. Lies dir doch mal bitte unabhängige Quellen zum Thema JIT Compiler durch.
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17630
|
Hier ist die Fortsetzung einer Debatte, die als "C++ oder Java" begann (und inzwischen "C statt C++" ist). ☺ Wenn manche Antworten deplaziert erscheinen, liegt das daran, daß die Teilung nicht immer ganz sauber vollzogen werden konnte. Der andere Thread ist hier: http://forum.ubuntuusers.de/topic/44141/30/#318836
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17630
|
Lunar hat geschrieben: Die erzählen z.B. immer noch, daß Swing das beste GUI Framework der Welt ist 😉
Wo?
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4735
|
dentaku hat geschrieben: Ihr wisst es eben alle drei nicht. Anstatt so blöde und falsche Argumente zu bringen, solltet Ihr Euch genauer informieren. Ich rede hier nicht von einem abstrakten Begriff "JIT" sondern vom Java JIT Compiler (siehe Topic dieses Threads), so wie Sun ihn in Java damals eingeführt hat. Und der JIT von Java übersetzt bei Programmstart jedesmal. Das ist nunmal Fakt (ich habe Jahrelang auch JITs benutzt). Und wenn Ihr mir nicht glaubt, lest eben selbst nach (bei Sun) - ich habe inzwischen genügend Links angegeben.
Okay, dann lese ich mal bei Sun nach: Chapter 8 Continued: Performance Features and Tools hat geschrieben: When does the code become JIT compiled code? When a method is called the first time the JIT compiler compiles the method block into native code for this method and stored that in the code block for that method.
Der JIT-Compiler übersetzt also wenn eine Methode das erste mal aufgerufen wird genau diese eine Methode. Und nicht beim Start das gesamte Programm. Eben JIT und nicht AOT. Soviel zum Thema "genauer informieren" und und "falsche Argumente".
|
|
Lunar
(Themenstarter)
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
user unknown hat geschrieben: Hier ist die Fortsetzung einer Debatte, die als "C++ oder Java" begann (und inzwischen "C statt C++" ist). ☺
Gute Idee! Es tut mir auch leid, für den ursprünglichen Fragesteller, daß wir seinen Thread ein bisschen verunstaltet haben 😳 user unknown hat geschrieben: Lunar hat geschrieben: Die erzählen z.B. immer noch, daß Swing das beste GUI Framework der Welt ist 😉
Wo?
Das kann ich so genau jetzt nicht sagen. Das war ein persönlicher Eindruck, der beim Lesen einiger Artikel und Dokumente von Sun zum Thema Swing geblieben ist. Allerdings habe ich schon seit zwei Jahren nichts mehr mit Java zu tun. Deswegen kann ich dir jetzt auch keine einzelnen Artikel zeigen. Ich müsste erst mal etwas suchen... Gruß lunar
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17630
|
Lunar hat geschrieben: user unknown hat geschrieben: Hier ist die Fortsetzung einer Debatte, die als "C++ oder Java" begann (und inzwischen "C statt C++" ist). ☺
Gute Idee! Es tut mir auch leid, für den ursprünglichen Fragesteller, daß wir seinen Thread ein bisschen verunstaltet haben 😳
Tja - das läßt sich manchmal schlecht vermeiden. Und ich persönlich finde, daß lebhafte, engagierte Diskussionen das Forum beleben. Da müssen wir Supporter oder Moderatoren halt gelegentlich splitten. Lunar hat geschrieben: user unknown hat geschrieben: Lunar hat geschrieben: Die erzählen z.B. immer noch, daß Swing das beste GUI Framework der Welt ist 😉
Wo?
Das kann ich so genau jetzt nicht sagen. Das war ein persönlicher Eindruck, der beim Lesen einiger Artikel und Dokumente von Sun zum Thema Swing geblieben ist. Allerdings habe ich schon seit zwei Jahren nichts mehr mit Java zu tun. Deswegen kann ich dir jetzt auch keine einzelnen Artikel zeigen. Ich müsste erst mal etwas suchen...
Tja - das ist aber ein ziemlich deutlicher Widerspruch, zu sagen die erzählen z.B. immer noch und habe ich schon seit zwei Jahren nichts mehr mit Java zu tun. Es gibt so viele Gerüchte, Legenden und Unwahrheiten die im Netz kursieren, daß ich nichts mehr glaube, was ich nicht selbst geprüft habe. Denn User, denen man auf's Wort glauben kann, gibt es leider auch kaum. Ich meine, man sollte sich schon die Mühe machen, Behauptungen zu prüfen, und labile Meinungen klar als solche zu kennzeichnen, um seine Glaubwürdigkeit nicht zu gefährden.
|
|
Lunar
(Themenstarter)
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
user unknown hat geschrieben: Tja - das ist aber ein ziemlich deutlicher Widerspruch, zu sagen die erzählen z.B. immer noch und habe ich schon seit zwei Jahren nichts mehr mit Java zu tun.
Stimmt! 😳 Das "immer noch" war fehl am Platz. user unknown hat geschrieben: Es gibt so viele Gerüchte, Legenden und Unwahrheiten die im Netz kursieren, daß ich nichts mehr glaube, was ich nicht selbst geprüft habe. Denn User, denen man auf's Wort glauben kann, gibt es leider auch kaum.
full ack. user unknown hat geschrieben: Ich meine, man sollte sich schon die Mühe machen, Behauptungen zu prüfen, und labile Meinungen klar als solche zu kennzeichnen, um seine Glaubwürdigkeit nicht zu gefährden.
full ack. Aber ich hab noch mal ein bisschen gesucht: Auf der Community Seite des Java Desktop Projektes (http://www.javadesktop.org) gibt es eine dieser Artikel, die nach meiner persönlichen Meinung das Marketing auch nicht unter den Tisch fallen lassen. Ich hoffe meine Glaubwürdigkeit ist zumindest teilweise wiederhergestellt 😉 Gruß lunar
|