Andere Tipps

http://en.wikipedia.org/wiki/Inlining

Bei der Berechnung, Inline-Erweiterung oder inlining, ist eine Compiler-Optimierung, die eine Funktion Aufrufstelle mit dem Körper des Angerufenen ersetzt. Diese Optimierung kann Zeit und Raumnutzung zur Laufzeit, bei den möglich Kosten für die Erhöhung der Größe des endgültigen Programms verbessern.

Als Java-Entwickler, Sie haben in der Regel nicht zu befürchten Methode inlining. Java Just-in-Time-Compiler kann und es automatisch in den meisten Orten tun, wo es Sinn macht.

IDEs wie Eclipse kann eine Funktion haben, die Sie Methoden auf Quellcode-Ebene Inline erlaubt - nie tun dies für die Leistung, nur für die Lesbarkeit des Codes (zB wenn man bedenkt, dass das Verfahren nur nennt man andere Verfahren ohne nützlich selbst) etwas hinzuzufügen.

Norman Maurer , erklärt in seinem Eva Andreasson 's Java Welt Geben Sie . Sie können unter dem zugehörigen Teil der Post finden.

  

versuchen Viele Optimierungen Maschine-Level-Sprungbefehle (zum Beispiel JMP für x86-Architekturen) zu beseitigen. Ein Sprungbefehl ändert die Befehlszeigerregister und dadurch überträgt den Ausführungsablauf. Dies ist eine teure Operation relativ zu anderen Montageanleitung, weshalb es sich um ein gemeinsames Ziel zu verringern oder zu beseitigen. Ein sehr nützliche und bekannte Optimierung, dass die Ziele dieser genannt wird inlining. Da Springen teuer sind, kann es hilfreich sein, viele häufigen Anrufe zu kleinen Methoden Inline, mit verschiedenen Eingabeadressen, in die anrufende Funktion. Der Java-Code in Anzeigen 3 bis 5 ein Beispiel für die Vorteile von inlining.

Listing 3. Caller Methode

int whenToEvaluateZing(int y) {
   return daysLeft(y) + daysLeft(0) + daysLeft(y+1);
}

Listing 4. Called Methode

int daysLeft(int x){
   if (x == 0)
      return 0;
   else
      return x - 1;
}

Listing 5. Inlined Methode

int whenToEvaluateZing(int y){
   int temp = 0;

   if(y == 0) temp += 0; else temp += y - 1;
   if(0 == 0) temp += 0; else temp += 0 - 1;
   if(y+1 == 0) temp += 0; else temp += (y + 1) - 1;

   return temp; 
}
  

In Listings 3 bis 5 der anrufende Methode macht drei Anrufe ein   kleine Methode, die wir für dieses Beispiel willen mehr davon ausgehen,   vorteilhaft Inline als zu springen zu dreimal.

     

Es ist vielleicht nicht viel Unterschied machen, ein Verfahren zur Inline, die aufgerufen wird   selten, aber inlining eine so genannte „hot“ Methode, die häufig ist   genannt einen großen Unterschied in der Leistung bedeuten könnte. inlining auch   wie oft macht Weg für weitere Optimierungen, 6 in Listing.

Listing 6. Nach inlining können mehr Optimierungen angewendet werden

int whenToEvaluateZing(int y){
   if(y == 0) return y;
   else if (y == -1) return y - 1;
   else return y + y - 1;
}

Wie bereits in anderen Antworten erwähnt, inlining kommt mit einem Preis. In der Regel wird dies als klein, aber wenn tatsächlich messen Sie überrascht sein könnte und lernen, dass es sein könnte, größer als das, was Sie gewinnen (so , was andere Leute sagen gilt:. nicht optimize es sei denn, Sie haben gemessen)

Es ist erwähnenswert, dass in der Linux-Kernel begannen sie un-inlining ursprünglich inlined Funktionen vor einiger Zeit, weil die Kosten zu hoch waren (größere Funktionen mehr von der CPU-Cache-Speicher verbraucht, und das daraus resultierende Cache-Misses waren teurer als nur Aufruf der Funktion, die) werden inlined wurden sollen. Siehe "Kapitel 15: Die Inline-Krankheit" in doc / Dokumentation / Prozess / Codierung-style.rst für weitere Details.

Im Grunde genommen in C / C ++, kann der Compiler Funktionen inline, das heißt, anstatt einen Funktionsaufruf zu machen, dass die Operation zu tun, wird der Code zum Aufruf Funktion des Blocks hinzugefügt werden, so wird es als sein, obwohl es nie hatte war ein separater Funktionsaufruf.

Dies wird mehr ins Detail gehen: http://www.codersource.net/cpp_tutorial_inline_functions.html

Inlining bezeichnet Zeit kompiliert Optimierung, wo eine kleine Funktion des Code wird in die aufrufende Funktion injiziert werden, anstatt einen separaten Aufruf erforderlich.

Die Compiler-Optimierung Antworten sind richtig. Es gibt eine andere Nutzung, obwohl - in Refactoring , inlining bezieht sich einen Methodenaufruf mit dem Körper zu ersetzen das Verfahren und das anschließende Entfernen des Verfahrens. Siehe Inline-Methode . Es gibt ähnliches Refactoring, wie Inline Klasse .

EDIT: Beachten Sie, dass Refactoring manuell durchgeführt wird oder mit einem Werkzeug; In beiden Fällen geht es um den Quellcode zu verändern.

Inline-Funktionen werden in der Regel in C ++ Header-Dateien nicht Java verwendet. Ein C ++ Header-Datei in der Regel enthält Code nicht implementiert und ist eine Schnittstelle zu der CPP-Datei mit dem gleichen Namen betrachtet, die in der Regel den implementierten Code enthält. Es ist legal, eine Inline-Funktion in einer Header-Datei, in der Regel eine kleine, leichte Funktion aufzunehmen. Inline-Funktionen zu einem Preis kommen, so dass sie keine großen speicherintensiven Operationen sein sollten. Für kleine Routinen sind die Performance-Einbußen minimal, und sie sind mehr Einfachheit halber verwendet.

In dieser Diskussion Jon Skeet erwähnt Client-JVM (Hotspot) v Server Jvm mit den Leistungsverbesserungen zur Verfügung zu Laufzeit, wenn der JIT (Just-in-Time) Compiler zu bringen zeitbasierte Erweiterungen erlaubt. Das ist „wie es gemacht wird“ in Java.

Ursprünglich kleine Abschnitte des Codes, die nicht von vielen Orten genannt wurden würden „inlined“ durch den Compiler, was bedeutet, dass das, was ein Singleton direkt in dem Befehlszeiger Codepfad platziert werden würde genannt wurde, dabei eine Funktion Zweig und Rücksendekosten mehr Prozessorleistung als nur eine Schleife oder Funktionsaufruf Abrollen und die Anweisungen „genau dort“

platzieren

Heute Singleton ist das Thema von mehreren Seiten Diskussionen und Loop-Abrollen sowie etwas wie inlining sind etwas entfernt von ihrem ursprünglichen Kontext (n). Sie können Dov Bulka ist sehr informiert Arbeit über die Angelegenheit lesen Sie die C / C ++ zu bekommen auf der Angelegenheit. Für Java-Studie davon ist reich lib ist in java.util würde Ihre Bedürfnisse besser als Studie von inlining und tiefen Compiler Fragen dienen - Sie verschanzt umkämpfte intra-Kriegsführung auf Datenstrukturen, über Anrufe in 16-Bit-Code, der Glanz gehängt bekommen können, und geht kein Ende auf Ihrer Lernkurve.

Sie kann tun instanceof in Java, das eine vf-Tabelle ähnelt (keine Wärme Leute, bitte), aber denken Sie daran, wie Sie in einer stark typisierte Sprache geschrieben haben - und wird nun in einer Sprache zu schreiben, in dem String Ausreißer kann leicht stochert, wo sie nichts zu suchen haben. Ich habe versucht, vor kurzem zu schreiben Code, der ein Bild in Java aufgebaut, tut das aus C-Code. Ich fand ich bald für eine starke Verschlüsselung bei der OXR Tabelle suchen - die nichts mit dem Code zu tun hat, ich schreibe.

Wie würden Sie eine String-Klasse in C / C ++ schreiben, die einen kleinen Puffer für Strings unter 32 Bytes und Fallen Zeiger haben, so dass sie nur auf der Saite arbeiten?

Nicht versuchen, Sie oder etwas zu necken, es ist nur ein wirklich guter Anfang, anstatt inlining und Compiler Wissenschaft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top