Función en línea de Java

Sheeraz Gul 12 octubre 2023
Función en línea de Java

Este tutorial demuestra cómo implementar una función en línea en Java.

Función en línea de Java

Cuando el compilador copia el código de una función y lo coloca en cualquier lugar, se considera una función en línea. Si cambiamos el código de una función en línea, el compilador tendría que cambiar el código en todas las versiones copiadas.

El compilador Just-in-Time (JIT) de HotSpot JVM puede realizar muchas optimizaciones que también incluyen la inserción, que está habilitada de manera predeterminada, y podemos usar los siguientes indicadores para habilitar o deshabilitar la inserción en JVM:

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

Java no proporciona funciones en línea, pero la JVM realiza esta operación en el momento de la ejecución. Como funciona el compilador, no tenemos que usar la función en línea en Java.

Para entender cómo funciona, intentemos crear la funcionalidad de la función en línea en Java. Ver el ejemplo:

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);
  }
}

El código anterior muestra el método en línea. Se realiza la optimización y la llamada al método se reemplaza con declaraciones simples, como se muestra en nuestro código.

Tanto NotInlinedPoints como InlinedPoints están realizando la misma operación, como se muestra en el resultado:

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

Como podemos ver aquí, no tenemos que realizar la inserción declarando una función en línea en Java. La JVM lo hace con una estructura compleja detrás de escena.

De forma predeterminada, la inserción está habilitada en JVM. Intentemos ejecutar el código deshabilitando la inserción usando las banderas anteriores.

Ejecute el código anterior en cmd:

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]

Como podemos ver, el código no muestra ninguna diferencia en el resultado después de deshabilitar la inserción, pero las identificaciones del proceso y el tiempo transcurrido serán mayores para esta compilación.

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