Gibt es Inline-Funktionen in Java?
Gibt es ein Konzept von inline-Funktionen in java, oder Ihr ersetzt etwas anderes? Wenn es, wie wird es genutzt? Ich habe gehört, dass public
static
und final
Methoden sind inline-Funktionen. Können wir unsere eigene inline-Funktion?
InformationsquelleAutor der Frage giri | 2010-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Java, die Optimierungen werden in der Regel an der JVM-Ebene. Zur Laufzeit der JVM ausführen etwas "kompliziert" - Analyse, um festzustellen, welche Methoden zur inline. Es kann aggressiv sein, im inlining und der Hotspot JVM tatsächlich können inline-non-final Methoden.
Den java-Compiler fast nie inline-beliebige Methode aufrufen (die JVM macht alles zur Laufzeit). Sie tun inline-compile-Zeit-Konstanten (z.B. der statischen primitiven Werte). Aber nicht die Methoden.
Weitere Ressourcen:
Artikel: Java HotSpot Performance Engine: Method Inlining Beispiel
Wiki: Inlining in OpenJDKnicht vollständig ausgefüllt, sondern enthält links zu nützlichen Diskussionen.
InformationsquelleAutor der Antwort notnoop
Java bietet keine Möglichkeit, manuell zu vermuten, dass eine Methode inlined. @Notnoop sagt in den Kommentaren, das inlining erfolgt in der Regel durch die JVM bei der Ausführung.
InformationsquelleAutor der Antwort Thomas Owens
Nein, es gibt keine inline-Funktion in java. Ja, können Sie eine öffentliche statische Methode, die irgendwo in den code, wenn in einer öffentlichen Klasse. Der java-compiler kann tun inline-expansion auf eine statische oder Finale Methode, aber das ist nicht garantiert.
Typischerweise sind solche code-Optimierungen werden durchgeführt, indem der compiler in Kombination mit der JVM/JIT/HotSpot für code-Segmente, die sehr oft benutzt. Auch andere Optimierungs-Konzepte wie register, Erklärung der Parameter nicht bekannt sind, in java.
Optimierungen können nicht gezwungen werden, durch Erklärung in java, aber von compiler und JIT. In vielen anderen Sprachen werden diese Erklärungen oft nur compiler-Hinweise (Sie können erklären, mehr register als Parameter den Prozessor hat, der rest wird ignoriert).
Deklarieren java-Methoden static, final oder private sind auch die Hinweise für den compiler. Sie sollten es verwenden, aber nicht garantiert. Java-performance ist dynamisch, nicht statisch. Erste Anruf an ein system wird immer langsamer, weil der laden von Klassen. Nächste Aufrufe sind schneller, aber je nach Speicher-und Laufzeit-die häufigsten Anrufe sind optimiert withinthe running system, also ein server kann auch schneller geworden während der Laufzeit!
InformationsquelleAutor der Antwort Arne Burmeister
Was Sie oben sagte, ist richtig. Manchmal final Methoden erstellt werden, die als inline -, aber es gibt keinen anderen Weg, um explizit erstellen Sie eine inline-Funktion in java.
InformationsquelleAutor der Antwort GreenieMeanie
Beispiel aus der Praxis:
Dann in anderen Klassen, kann ich beenden, wenn der code abgelaufen ist. Wenn ich mich auf die EXPIRED_ON variable von einer anderen Klasse, die Konstante inline, um den byte-code, so dass es sehr schwer alle stellen im code, der prüft das Ablaufdatum. Allerdings, wenn die anderen Klassen aufrufen, die isExpired () - Methode wird die eigentliche Methode aufgerufen, d.h. ein hacker könnte ersetzen Sie die Methode isExpired mit anderen, die immer false zurückgibt.
Ich Zustimmen, es wäre sehr schön, Kraft-compiler zu einem inline static final Methode für alle Klassen, die darauf verweisen. In diesem Fall müssen Sie nicht einmal die Control-Klasse, als wäre es nicht zur Laufzeit benötigt.
Aus meiner Forschung, dies kann nicht getan werden. Vielleicht haben einige Obfuscator-tools können dies tun, oder Sie ändern könnte, Ihren build-Prozess zu Bearbeiten, Quellen vor dem kompilieren.
Als für den Nachweis, ob die Methode der control-Klasse gelegt wird inline in eine andere Klasse beim kompilieren, versuchen Sie es mit der anderen Klasse ohne die Klasse im Klassenpfad.
InformationsquelleAutor der Antwort Billy Guthrie
Gut, es gibt Methoden, die genannt werden könnte "inline" Methoden in java, aber je nach jvm. Nach dem kompilieren, wenn die Methode, die Computer-code, ist weniger als 35 byte, es wird übertragen, um eine inline-Methode sofort, wenn die Methode, die Computer-code, ist weniger als 325 byte, die übertragen werden könnten in eine inline-Methode, je nach jvm.
InformationsquelleAutor der Antwort Ethan
so, es scheint, es gibt nicht, aber Sie können verwenden Sie diese Problemumgehung mit Guave oder eine gleichwertige Funktion Klasse Umsetzung, denn diese Klasse ist äußerst einfach, BSP.:
ja, das ist Toter code nur um zu veranschaulichen, wie das erstellen einer komplexen code-block (in {}), um so etwas besonderes, dass sollte nicht die Mühe, uns auf die Schaffung einer Methode für Sie, auch bekannt als inline!
InformationsquelleAutor der Antwort Aquarius Power
Java9 hat ein "Ahead of time" - compiler, der verschiedene Optimierungen zur compile-Zeit, sondern als runtime, die gesehen werden können, wie inlining.
InformationsquelleAutor der Antwort tkruse