JIT

Status
Nicht offen für weitere Antworten.
H

HändyÄndy

Gast
Mir ist etwas bzgl. der just in time Kompilation nicht klar:

Ein Javaprogramm wird standardmäßig (Java 1.5) nicht interpretiert sondern just in time kompiliert und dann ausgeführt ? Oder muß ich das dem javac irgendwo sagen, oder wie geht das ?
 

Wildcard

Top Contributor
Wenn die VM der Meinung ist das es sinnvoll ist, dann wird ein teil des Codes Just-In-Time, also zur Laufzeit kompiliert.
Java ist natürlich weiterhin eine interpretierte Sprache, es kann aber eben vorkommen das Teile kompiliert werden.
Wann der JIT oder HotSpot Compiler solche Optimierungen durchführt entscheidet die VM (hier unterscheiden sich Server und Client VM sehr deutlich) und liegt nicht in deiner Verantwortung.
 

thE_29

Top Contributor
Naja, javac geht mal her und wandelt das ganz in den bytecode!

Der JIT kann es zu Verbesserungszwecken dann in Maschinencode (sprich exe) umwandeln!

Der JIT (also der JustInTimeCompiler) sowie der Interpreter sind bestandteile der JVM!

Daher reicht eine normale JRE aus um eine .class oder .jar Datei laufen zu lassen!

Zum Erstellen braucht man einen Compilier (also javac/JDK)!
 

AlArenal

Top Contributor
Java ist generell keine interpretierte Sprache. Aus Java Sourcecode wird Java Bytecode generiert, das ist der Kompiliervorgang den javac übernimmt. Das Kompilat ist gewissermaßen die Maschinensprache einer virtuellen Maschine, der Java Virtual Machine (JVM). Diese wiederum bringt als integralen Bestandteil einen JIT mit, der den Bytecode bei Bedarf in nativen Maschinencode für den vorgefundenen Prozessor umwandelt.
Während der Ausführung analysiert der JIT mittlerweile auch weiter und nimmt weitere Optimierungen vor wenn möglich.

Mit etwas Nachdenken kommt man schnell drauf, dass ein guter JIT in der Lage ist besser optimierten nativen Code zu erzeugen, als jeder statische native Compiler. Das hängt natürlich davon ab wieviel Grips man dem JIT mitgibt und wie gut die Optimierungen für die diversen CPUs sind.
 

Wildcard

Top Contributor
AlArenal hat gesagt.:
Java ist generell keine interpretierte Sprache.
Würde ich so nicht sagen. Der Java-Quellcode wird in Bytecode kompiliert und dieser dann von der VM interpretiert.
Ich denke es ist gängig Java selbst als interpretiert zu bezeichnen.
 

AlArenal

Top Contributor
Wildcard hat gesagt.:
AlArenal hat gesagt.:
Java ist generell keine interpretierte Sprache.
Würde ich so nicht sagen. Der Java-Quellcode wird in Bytecode kompiliert und dieser dann von der VM interpretiert.
Ich denke es ist gängig Java selbst als interpretiert zu bezeichnen.

Ich kann es auch nativ kompilieren lassen, mittels Excelsior JET oder GCJ. Sun handhabt es es eben über Bytecode und eine VM, aber das ist nicht zwingend und aus Sicht des Programmierers auch transparent und unerheblich.
 

thE_29

Top Contributor
Toll ;)

Nur weil 3t Anbieter sowas anbieten, kann man net sagen das Java keine interpretierte Sprache ist!

Generell ist Java eine. Nur kann man aus Java Code mit Tools halt auch Maschinencode erzeugen lassen!

Der Excelsior ist wenigstens schon 1.5 zertifiziert! Hingegen der gcj scheint da ja noch nicht so weit zu sein.. Ich teste mal die JET Version ;)
 
H

HändyÄndy

Gast
Kann ich java explizit irgendwie sagen, daß alles jit kompiliert werden soll ?
 

thE_29

Top Contributor
Naja, dadurch das java open Source wird (bzw es schon Teile sind) könntest du oder andere in absehbarer Zeit die JVM umschreiben und maybe einen zusätzlichen Parameter einbauen ;)

Aber zZ geht das nicht!
 

AlArenal

Top Contributor
Die JVM weiß am besten wie sie welchen Code verarbeitet, von daher sehe ich da wenig Bedarf. Das ist so sinnig wie sich einen Toyota Prius zu kaufen und dann den Benzinmotor ausschalten zu wollen.
 

thE_29

Top Contributor
Das haben aber viele gemacht :D

Zwar nicht beim Prius aber beim Lexus.. Die konnte man hacken ^^ Gibt welche die fahren nur noch mit Batterien (zusätzlich eingebaut, etc..)


Zum Thema: Die Frage ist halt ob es schon optimal programmiert ist, das der JIT wirklich nur dann zum Einsatz wenns sinnvoll ist! Da wäre vielleicht eine Adaptierung drinnen, obwohl ich mir net vorstellen kann, das Sun das schlecht umgesetzt hat!
 

thE_29

Top Contributor
@Wildcard: was verspricht sich Excelsior oder gcj alles nativ zu kompilieren?!
Excelsior kostet sogar was und anscheinend gibts genug Leute die es kaufen ^^
 

Wildcard

Top Contributor
thE_29 hat gesagt.:
@Wildcard: was verspricht sich Excelsior oder gcj alles nativ zu kompilieren?!
Das verstehe ich noch eher, da du damit zB für Windoof eine exe erstellen kannst, aber was das beim JIT bringen sollte? ???:L
 

thE_29

Top Contributor
Wildcard meinte den JIT ;)
Ok, beim JIT sehe ichs auch net ein.. (Weils einem ja wurscht sein kann).

Und bei Java Programmen verstehe ich es bei solchen die speziell für ein OS angepasst sind! Siehe Notes für Windows, etc..
Oder einfach um die Daten zu schützen (dekompilieren)
 

Wildcard

Top Contributor
Wenn ich ein Programm in 1.6 kompiliere und ausliefere und der Kunde alles nativ mit dem JIT per Parameter kompilieren will, dann braucht er trotzdem eine Java 6 JRE um das ausführen zu können -> Also doch Pustekuchen
 

AlArenal

Top Contributor
Sorry, aber deine Frage "Sehe ich genauso. Was versprichst du dir davon alles nativ zu kompilieren?" war so derbe unpräzise, dass ich sie in Richtung Excelsior JET und GCJ gedeutet habe, was auch Sinn macht, denn sonst hättest du passiv formulieren müssen, denn der User kompiliert nicht, sondern der JIT ;)
 

Wildcard

Top Contributor
AlArenal hat gesagt.:
Sorry, aber deine Frage "Sehe ich genauso. Was versprichst du dir davon alles nativ zu kompilieren?" war so derbe unpräzise, dass ich sie in Richtung Excelsior JET und GCJ gedeutet habe
Naja, es ging ja um den JIT und zumindest thE_29 hat mich verstanden.
AlArenal hat gesagt.:
was auch Sinn macht, denn sonst hättest du passiv formulieren müssen, denn der User kompiliert nicht, sondern der JIT ;)
:bae:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben