Java-Inline-Funktion

Sheeraz Gul 12 Oktober 2023
Java-Inline-Funktion

Dieses Tutorial zeigt, wie Sie eine Inline-Funktion in Java implementieren.

Java-Inline-Funktion

Wenn der Compiler den Code einer Funktion kopiert und an einer beliebigen Stelle platziert, wird dies als Inline-Funktion betrachtet. Wenn wir den Code einer Inline-Funktion ändern, müsste der Compiler den Code in allen kopierten Versionen ändern.

Der Just-in-Time (JIT)-Compiler von HotSpot JVM kann viele Optimierungen durchführen, darunter auch Inlining, das standardmäßig aktiviert ist, und wir können die folgenden Flags verwenden, um das Inlining in JVM zu aktivieren oder zu deaktivieren:

-XX:+Inline (+ means true, which enables the inlining)
-XX:-Inline (- means false, which disables the inlining)

Java bietet keine Inline-Funktionen, aber die JVM führt diese Operation zur Ausführungszeit durch. Da der Compiler ausgeführt wird, müssen wir die Inline-Funktion in Java nicht verwenden.

Um zu verstehen, wie es funktioniert, versuchen wir, die Inline-Funktionsfunktionalität in Java zu erstellen. Siehe das Beispiel:

package delftstack;

public class Inline_Example {
  public static final class Points {
    private int a = 0;

    private int b = 0;

    public int getA() {
      return a;
    }

    public void setA(int a) {
      this.a = a;
    }

    public int getB() {
      return b;
    }

    public void setB(int b) {
      this.b = b;
    }

    @Override
    public String toString() {
      return String.format("%s[a=%d, b=%d]", getClass().getSimpleName(), a, b);
    }
  }

  public static void main(String[] args) {
    final Points NotInlinedPoints = new Points();
    NotInlinedPoints.setA(NotInlinedPoints.getA() + 2);
    NotInlinedPoints.setB(NotInlinedPoints.getA() * 6 / 2);

    final Points InlinedPoints = new Points();
    InlinedPoints.a = InlinedPoints.a + 2;
    InlinedPoints.b = InlinedPoints.a * 6 / 2;

    System.out.println("The Non Inlined Points " + NotInlinedPoints);
    System.out.println("The Inlined Points " + InlinedPoints);
  }
}

Der obige Code zeigt die Methode Inlining. Die Optimierung wird durchgeführt und der Methodenaufruf wird durch einfache Anweisungen ersetzt, wie in unserem Code gezeigt.

Sowohl NotInlinedPoints als auch InlinedPoints führen dieselbe Operation aus, wie in der Ausgabe gezeigt:

The Non Inlined Points Points[a=2, b=6]
The Inlined Points Points[a=2, b=6]

Wie wir hier sehen können, müssen wir das Inlining nicht durchführen, indem wir eine Inline-Funktion in Java deklarieren. Die JVM tut dies mit einer komplexen Struktur hinter den Kulissen.

Standardmäßig ist das Inlining in JVM aktiviert. Versuchen wir, den Code auszuführen, indem wir das Inlining mithilfe der obigen Flags deaktivieren.

Führen Sie den obigen Code in cmd aus:

C:\Users\DelftStack>javac Inline_Example.java
C:\Users\DelftStack> Java -XX:-Inline Inline_Example.java
The Non Inlined Points Points[a=2, b=6]
The Inlined Points Points[a=2, b=6]

Wie wir sehen können, zeigt der Code nach dem Deaktivieren des Inlinings keinen Unterschied im Ergebnis, aber die Prozess-IDs und die verstrichene Zeit werden für diese Kompilierung größer sein.

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook