Inlining ist eine Optimierung, die vom Java Just-In-Time Compiler durchgeführt wird.
Wenn Sie eine Methode:
public int addPlusOne(int a, int b) {
return a + b + 1;
}
, die Sie wie folgt aufrufen:
public void testAddPlusOne() {
int v1 = addPlusOne(2, 5);
int v2 = addPlusOne(7, 13);
// do something with v1, v2
}
der Compiler entscheidet, Ihre Funktionsaufruf mit dem Körper der Funktion zu ersetzen, so wäre das Ergebnis effektiv wie folgt aussehen:
public void testAddPlusOne() {
int v1 = 2 + 5 + 1;
int v2 = 7 + 13 + 1
// do something with v1, v2
}
Der Compiler tut dies, um den Overhead zu speichern o f macht tatsächlich einen Funktionsaufruf, bei dem jeder Parameter auf den Stack geschoben wird.
Dies kann eindeutig nur für nicht-virtuelle Funktionen durchgeführt werden. Stellen Sie sich vor, was passiert, wenn die Methode in einer Unterklasse überschrieben wird und der Typ des Objekts, das die Methode enthält, erst zur Laufzeit bekannt ist. Wie würde der Compiler wissen, welchen Code er kopieren soll: den Methodenhauptteil oder den Unterklassencode der Basisklasse Methodenkörper? Da alle Methoden in Java standardmäßig virtuell sind, können Sie diejenigen, die nicht überschrieben werden können, explizit als final
markieren (oder sie in eine Klasse final
setzen). Dies wird dem Compiler helfen herauszufinden, dass die Methode niemals überschrieben wird, und es ist sicher inline zu arbeiten. (Beachten Sie, dass der Compiler diese Entscheidung manchmal auch für nicht finale Methoden treffen kann.)
Beachten Sie auch das Wort Mai im Zitat. Die endgültigen Methoden sind nicht garantiert inlineable. Es gibt verschiedene Möglichkeiten, wie Sie garantieren können, dass eine Methode nicht inline sein kann, aber keine Möglichkeit, den Compiler auf zu inline zu zwingen. Es wird fast immer besser als Sie wissen, wenn Inlining hilft, oder die Geschwindigkeit des resultierenden Codes zu verletzen.
Siehe wikipedia für einen guten Überblick über Vorteile und Probleme.
Das wird helfen: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/perf2.html#vm – codaddict