Ich wundere mich, dass du dir über solche Fragen Gedanken machst.
Ich habe nicht in die Spezifikation geschaut und habe dazu auch keine Lust. Aber möglicherweise wird "greater or equals" im Bytecode durch "ge" abgekürzt und "greater than" durch "gth" (oder ähnliches). Das würde die Differenz jedenfalls erklären.
Ich wundere mich, dass du dir über solche Fragen Gedanken machst.
Ich habe nicht in die Spezifikation geschaut und habe dazu auch keine Lust. Aber möglicherweise wird "greater or equals" im Bytecode durch "ge" abgekürzt und "greater than" durch "gth" (oder ähnliches). Das würde die Differenz jedenfalls erklären.
Die Betonung meines Beitrags sollte darauf liegen, dass ich die Beschäftigung mit solchen Fragen lächerlich finde. Ich intereesier mich nicht dafür, wie mein Java-Code in Byte-Code übersetzt wird. Und noch wenige kümmere ich mich um zwei (in Zahlen: 2) Bytes.
Und wir sehen, sind ident mit Ausnahme des Vergleichs. Also was auch immer den Unterschied bei dir ausloest, wird sich vermutlich nicht in der Methode finden.
Im Zweifelsfall, schnapp' dir einen Decompiler wie JD oder Luyten, und schaue nach was der Unterschied ist.
Da ist die Frage, was das jeweilige Interesse ist. Wenn man ein Auto nur fahren will, dann ist es komplett egal, wie der Motor des Autos genau gesteuert wird und die Software des Computers interessiert einen nicht. Aber dennoch kann es einen interessieren und es muss auch Leute geben, die sich gut damit auskennen - weil die sowas halt bauen.
Und das mit dem Java Bytecode ist durchaus interessant. Bei Java hat mich das so im Detail auch noch nicht interessiert, aber bei .Net habe ich mich sehr intensiv mit MSIL auseinander gesetzt gehabt ...
@Robert Zenz Danke. Und da erkennt man auch gleich einen Fehler - das icmp<op> ist natürlich falsch - es muss das dcmp<op> sein. Und interessamte weise gibt es da als Operatoren nur "g" und "l" und kein "ge" oder "le".
Ich konnte anhand des von kneitzel gezeigten Beispiel das Verhalten gerade nicht reproduzieren... In "echt" erstellte ich zusätzlich ein jar file, das weist die unterschiedlichen Größen auf...
Kannst du ggf. ein Beispiel aufzeigen? Also ggf ein Projekt mit paar Dateien, an Hand dessen sich das reproduzieren lässt? Denn mich würde das schon interessieren.
Den echten Code auf ein minimales Beispiel zu reduzieren ist nicht ganz einfach, weil der einfache Getter, den du gezeigt hattest, sich bei mir aus 1000 Codezeilen zusammensetzt...
jar bzw. zip heisst nicht automatisch "komprimiert". zip ist ja nur ein Containerformat wie tar, welches optional auch Komprimierung unterstützt. Natürlich nutzen die meisten zip/jar Tools hier eine Compression Ratio != 0 bei zip. Man kann aber auch zip-Dateien wie tar behandeln mit Compression ratio = 0.
Tatsächlich ist es mittlerweile auch üblich, jar Dateien nicht mehr zu komprimieren, um das Laden der Klassen zur Laufzeit zu beschleunigen, gerade wenn Bandbreite keine Rolle mehr spielt.
Siehe auch https://docs.oracle.com/javase/tutorial/deployment/jar/build.html :
You might want to avoid compression, for example, to increase the speed with which a JAR file could be loaded by a browser. Uncompressed JAR files can generally be loaded more quickly than compressed files because the need to decompress the files during loading is eliminated. However, there is a tradeoff in that download time over a network may be longer for larger, uncompressed files.