자바 인라인 함수

Sheeraz Gul 2023년10월12일
자바 인라인 함수

이 자습서는 Java에서 인라인 함수를 구현하는 방법을 보여줍니다.

자바 인라인 함수

컴파일러가 함수의 코드를 복사하여 어디에나 배치하면 인라인 함수로 간주됩니다. 인라인 함수의 코드를 변경하면 컴파일러는 복사된 모든 버전의 코드를 변경해야 합니다.

HotSpot JVM JIT(Just-In-Time) 컴파일러는 기본적으로 활성화된 인라인을 포함하는 많은 최적화를 수행할 수 있으며 다음 플래그를 사용하여 JVM에서 인라인을 활성화 또는 비활성화할 수 있습니다.

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

Java는 인라인 기능을 제공하지 않지만 JVM은 실행 시 이 작업을 수행합니다. 컴파일러가 수행함에 따라 Java에서 인라인 함수를 사용할 필요가 없습니다.

작동 방식을 이해하기 위해 Java에서 인라인 함수 기능을 만들어 보겠습니다. 예를 참조하십시오.

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

위의 코드는 메서드 인라인을 보여줍니다. 최적화가 수행되고 메서드 호출이 코드에 표시된 것처럼 간단한 문으로 대체됩니다.

NotInlinedPointsInlinedPoints 모두 출력에 표시된 것처럼 동일한 작업을 수행합니다.

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

여기에서 볼 수 있듯이 Java에서 인라인 함수를 선언하여 인라인을 수행할 필요가 없습니다. JVM은 배후에서 복잡한 구조로 이를 수행합니다.

기본적으로 인라인은 JVM에서 활성화됩니다. 위의 플래그를 사용하여 인라인을 비활성화하여 코드를 실행해 봅시다.

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]

보시다시피 코드는 인라인을 비활성화한 후 결과에 어떤 차이도 표시하지 않지만 이 컴파일에서는 프로세스 ID와 경과 시간이 더 커집니다.

작가: Sheeraz Gul
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